第一篇:java语言深入:究竟什么叫面向接口编程
Java:Java语言深入:究竟什么叫面向接口编程
[ 来源:Java | 作者:Java | 时间:2007-7-20 | 去论坛]
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间 的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程我想就是指按照这种思想来编程吧!实际上,在日常工作中,你已经按 照接口编程了,只不过如果你没有这方面的意识,那么你只是在被动的实现这一思想;表现在频繁的抱怨别人改的代码影响了你(接口没有设计到),表现在某个模 块的改动引起其他模块的大规模调整(模块接口没有很好的设计)等等。
Booch先生那天谈到Interaction Designer,它就是指做这类设计的人,只不过层次更高一些。我想目前我们的软件设计队伍中,这类人是最缺乏的人才之一。非接口编程?是不是就是面向过程的编程思想?
1.关于接口的理解。
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。
抽象体与抽象面是有区别的。
2.设计接口的另一个不可忽视的因素是接口所处的环境(context,environment),系统论的观点:环境是系统要素所处的空间与外部影响 因素的总和。任何接口都是在一定的环境中产生的。因此环境的定义及环境的变化对接口的影响是不容忽视的,脱离原先的环境,所有的接口将失去原有的意义。
3.按照组件的开发模型(3C),它们三者相辅相成,各司一面,浑然一体,缺一不可。
面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法
面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现
接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题
我认为:UML里面所说的interface是协议的另一种说法。并不是指com的interface,CORBA的interface,Java的interface,Delphi的interface,人机界面的interface或NIC的interface。
在具体实现中,是可以把UML的interface实现为语言的interface,分布式对象环境的interface或其它什么 interface,但就理解UML的interface而言,指的是系统每部分的实现和实现之间,通过interface所确定的协议来共同工作。
所以我认为,面向interface编程,原意是指面向抽象协议编程,实现者在实现时要严格按协议来办。也就是Bill Joy同志说的,一边翻 rfc,一边写代码的意思。面向对象编程是指面向抽象和具象。抽象和具象是矛盾的统一体,不可能只有抽象没有具象。一般懂得抽象的人都明白这个道理。但 有的人只知具象却不知抽象为何物。
所以只有interface没有实现,或只有实现而没有interface者是没有用的,反OO的。
所以还是老老实实面向对象编程,面向协议编程,或者什么都不面向,老老实实编程。
但是我很讨厌讨论这样的术语,不如我们谈谈什么叫面向领导的编程?面向用户的编程?领导和用户有时都很BT,我们就面向BT编程?
第二篇:Java编程语言面试题
西安英泰移动通信学院S2级Java编程语言测试题 1
Java编程语言面试题
一、简答题
1、简述用Java编程语言编写、编译、解释和执行过程。
2、简述在Java JDK中,java.exe程序的作用。
3、简述Java编程语言中的数组和C编程语言中定义数组有什么区别。
4、简述类与对象的关系。对象的方法和类的方法是否为一回事?
5、JVM在解析代码Person p1=new Person()和new Person()时有什么区别?
6、简述this关键字的四中用途。
7、简述构造函数的作用。
8、分别简述static和final关键字的意义。
9、简述抽象类和接口的区别,并阐明抽象类和接口的用途。
10、简述多态的概念和意义。
11、简述异常和错误的区别。
12、简述如何创建和启动一个线程的两种方法
13、简述栈内存和堆内存分别用来做什么。
14、简述throw关键字在程序中抛出的是什么。
15、在一个类的public static void method()中,能够直接使用该类什么类型的成员。
二、计算题
1、在类Runner中定义一个方法move(),要求这个方法的参数是一个实现了接口Runnable的匿名内部类的对象,该接口中的方法中的内容自己可以决定。
2、类Outer中与方法属性平行定义的内部类为Inner{ public void doStuff(){}},写出在另一个类TestInner的public static void main(String s)中调用方法doStuff()的代码。
3、类Book{ public void insert(String id)throws Exception{…}}中的方法被类TestBook中public void testInser()方法调用,写出该方法中的主要代码。
4、两个顶级包test1和test2,需要将它们压缩成一个文件myjava.jar,再用WinRaR打开时,会在浏览器上看到下列层次;
◎META-INF
◎test1
◎test2
注:◎为文件夹
请写出操作过程,并写出运行的命令行程序(提示:用jar.......).5、同一个线程类ThreadTest中定义了:
public synchronized void sale(){...}
synchronized(str){...}
写出能使这两个类成员保持同步的改进代码。
6、解释类class Q{
private String name=“李四”;
private String sex=“女”;
boolean bFull=false;
public synchronized void put(String name,String sex){
if(bFull)
try{
wait();
this.name=name;
}catch(InterruptedException e){}
try{
Thread.sleep(10);
}catch(Exception e){
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=true;
notify();
}
public synchronized void get()
{
if(!bFull)
try{
wait();
}catch(InterruptedException e){}
System.out.println(name + “----” + sex);
bFull=false;
notify();
}
}
中wait()、notify()、sleep()诸方法的作用。
7、在类class TestInteger{
public static void main(String[] args){
int w =。。。。。。。。。。。。。。。。。。。。// 将args[0]转换int型的方法
int h =。。。。。。。。。。。。。。。。。。。。//将args[1]转换int型的另一种方法//int h = Integer.valueOf(args[1]).intValue();//第三种方法
for(int i=0;i StringBuffer sb=new StringBuffer(); for(int j=0;j sb.append('*'); } System.out.println(sb.toString()); } } } 中,args[0]的值为:“1234”,args[1]的值为:“5678”,请上面代码块中的……………处填写代码。 8、下面类 import java.util.*; public class TestVector{ public static void main(String [] args){ int b=0; Vector v=new Vector();System.out.println(“Please Enter Number:”); while(true){ try{ b= System.in.read();//……….} catch(Exception e){ System.out.println(e.getMessage()); } if(b=='r' || b== 'n') break; else{ int num=b-'0'; v.addElement(new Integer(num));//………..} } int sum=0; Enumeration e=v.elements();//………………… while(e.hasMoreElements()){ Integer intObj=(Integer)e.nextElement();//………………..sum += intObj.intValue(); } System.out.println(sum); } } 中,请在诸单行注释//。。。。中解释其左边一行代码的意义。 9、下面类 import java.io.*; public class DataStreamTest{ public static void main(String[] args){ try{ FileOutputStream fos=new FileOutputStream(“c:hello.txt”);//…….BufferedOutputStream bos= new BufferedOutputStream(fos);//…… DataOutputStream dos= new DataOutputStream(bos);//……..dos.writeUTF(“ab中国”);//……… dos.writeBytes(“ab中国”); dos.writeChars(“ab中国”); dos.close();//………… FileInputStream fis=new FileInputStream(“hello.txt”);//…….BufferedInputStream bis=new BufferedInputStream(fis);//…….DataInputStream dis=new DataInputStream(bis);//…….System.out.println(dis.readUTF()); dis.close(); }catch(Exception e){ System.out.println(e.getMessage()); } } } 中,请在诸单行注释//。。。。中解释其左边一行代码的意义。 10、已知接口:interface PCI { voidstart(); voidstop(); } 要求:写两个类:NetWorkCard,SoundCard分别实现上面接口的方法(内容自编),并写第三个类MainBoard,该类中的方法install(PCI p)应用NetWorkCard,SoundCard两个类对象的方法。根据上面的要求,填写下面的代码: class Assembler { public static void main(String []args) { //在下面写代码….} } class NetWorkCard ….{ } class SoundCard…………{ } class MainBoard…………………………………..{ install(PCI p){ } } 第一章 面向对象开发方法概述 1.面向对象的软件开发有哪些优点? 1) 把软件系统看成是各种对象的集合,这更接近人类的自然思维方式。 2) 软件需求的变动性往往是功能的变动,而功能的执行者——对象,一般不会有多大的变化,比结构化更稳定。 3) 对象包括属性和行为,对象把数据及方法的具体实现方式一起封装起来,使得方法与之相关的数据不再分析,提高了每个子系统的相对对立性,从而提高软件的可维护性。 4) 支持封装,抽象,继承和多态。提高了软件的可重用性,可维护性和可扩展性。 2.在软件系统中,为什么说一个孤立的不对外提供任何服务的对象是没有意义的? 1) 每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。 2) 从使用者角度出发,整个软件系统就是一个服务的提供者。 3) 在系统内部,每个子系统也都是服务的提供者,它们其他子系统提供服务。 4) 因此说一个孤立的部队为提供任何服务的系统是美欧任何意义的。 3.列举一些现实生活中的例子,来说明什么是依赖关系、什么是聚集关系,以及什么是关联关系。 1) 关联关系:关联是指类之间的特定对应关系,可以分为单向关联和双向关联,也可以分为一对一关联、一对多关联以及多对多关联。A关联B,是指Class A与Class B之间存在特定的对应关系。举例如学生和老师,订单和客户。 2) 依赖关系:类之间的调用关系。A依赖B,Class A访问Class B提供的服务。如Panel与Shape的关系。 3) 聚集关系:是整体与部分之间的关系 4.列举一些显示生活中的例子,来说明什么是封装,什么是接口。 1) 接口:对象中所有向使用者公开的方法的声明构成了对象的接口。 2) 封装:隐藏对象的属性和实现细节,仅仅对外公开接口。 3) 接口的优点:a.提高系统之间松散耦合b.提高了系统的可扩展性。 4) 封装的有点: a.便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。 b.有助于建立各个系统之间的松耦合关系,提高系统的独立性。 c.提高软件的可重用性,没个系统都是一个相对独立的整体,可以在多种环境中得到重用。 d.降低构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然有价值。 5.抽象的最主要特征是什么? 抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。 6.在建立对象模型时,要经历哪些抽象思维过程? 1) 从问题领域的事物到软件模型中对象的抽象。 2) 从对象到类的抽象。 3) 从子类到父类的抽象 7.类就是程序员自定义的类型。这种说法是否正确? 不正确,类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。开发人员需要根据先识别对象,然后再进行分类(创建任意的数据模型)的思路来建立对象模型。 8.小王本来体重70kg,经过减肥,体重降到45kg,试从这个问题领域中识别对象、类、属性、状态和状态的变化。 1) 类:人。 2) 对象:小王。 3) 属性:体重。 4) 状态:70kg。 5) 状态的变化:小王的减肥行为导致体重下降。 9.在UML图中哪些框图描述了系统的动态结构,哪些框图描述了系统的静态结构? 1) 用例图、类框图、组件图、部署图构成了系统的静态模型。 2) 状态转换图、时序图、协作图则构成了系统的动态模型。 第二章 第一个Java应用 1.把一个类放在包里有什么用? 答:把类分包的作用: (1) 能够区分名字相同的类 (2) 有助于实施访问权限控制 (3) 有助于划分和组织Java应用中的各个类 2.JavaDoc文档是不是为软件的终端用户提供的使用指南? 答:不是的,JavaDoc文档是供Java开发人员阅读的,他们通过JavaDoc文档来了解其他开发人员开发的类的用法。Java开发人员应该养成经常阅读JavaDoc文档的良好习惯。 3.对于com.abc.dollapp.AppMain类,使用以下命令进行编译,编译出来的.class文件位于什么目录下? java –d C:classes –sourcepath C:src C:srccomabcdollappAppMain.java 答:将会存放在C:classescomabcdollapp下。 4.对于以上编译出来的AppMain类,以下哪个java命令能正确运行它? (a) java C:classescomabcdollappAppMain.class (b) java –classpath C:classes AppMain (c) java –classpath C:classescomabcdollapp AppMain (d) java –classpath C:classes com.abc.dollapp.AppMain 答:(b) 5.以下哪些main()方法的声明能够作为程序的入口方法? (a) public static void main() (b) public static void main(String[] string) (c) public static void main(String args) (d) static public int main(String[] args) (e) static void main(String[] args) 答:(b),主函数必须以public static void形式存在,参数必须为String数组形式。 6.假定以下程序代码都分别放在MyClass.java文件中,哪些程序代码能够编译通过? (a) import java.awt.*;package Mypackage; class MyClass{}; (b) package MyPackage; import java.awt.*; class MyClass{}; (c) /*This is comment*/ package MyPackage; import java.awt.*; public class MyClass{}; 答:(c),程序顺序必须按照import, package, class走,源文件必须以public类型的类命名。 7.对于以下Myprog类,运行命令”java Myprog good morning”,将会得到打印结果? public class Myprog { public static void main(String argv[]) { System.out.println(argv[2]); } } 答:打印结果为空。argv[0] = “good”, argv[1] = “morning”。 8.下面哪些是Java的关键字? (a) default (b) NULL (c) String (d) throws (e) long (f) true 答:(a),(d),(e),(f),java中所有的关键字都是小写。 9.当AppMain类的main()方法创建了5个Doll对象时,运行时数据区的数据如何分布的?参考2.4节的图2-13,画出此时运行时数据区的状态图。 运行时数据区(内存) Java栈区 执行main()方法的主线程的方法调用栈 局部变量beibei 局部变量jingjing 局部变量huanhuan 局部变量yingying 局部变量nini 堆区 Doll实例 name:贝贝 Doll实例 name:晶晶 Doll实例 name:欢欢 Doll实例 name:迎迎 Doll实例 name:妮妮 方法区 Doll类型信息 AppMain类型信息 (包含main()方法信息) 10.下面哪些是合法的Java标识符? (a) #_pound (b) _underscore (c) 5Interstate (d) Interstate5 (e) _5_ (f) class 答:(b),(d),(e)标识符命名规则如下: (1) 标识符首字母必须为字母、下划线“_”、美元“$”、人民币“¥”(2) 标识符由数字、大写字母、小写字母、下划线以及美元等组成 (3) 不能把关键字和保留字作为标识符 (4) 标识符没有长度的限制 (5) 标识符是大小写敏感的第三章 数据类型和变量 1.对于以下程序,运行“java Abs”,将得到什么打印结果? public class Abs { static int a = 0x11; //十六进制 static int b = 0011; //八进制 static int c = 'u0011'; //十六进制数据的Unicode字符编码 static int d = 011; //八进制 /** * @param args */ public static void main(String[] args) { System.out.println(“a=”+a); System.out.println(“b=”+b); System.out.println(“c=”+c); System.out.println(“d=”+d); } } 答:输出如下 a=17 b=9 c=17 d=9 2.以下哪段代码能正确编译通过? (a) char a = „a‟; char b = 1; char c = 08; (b) int a = „a‟; (c) long a =‟u00FF‟; (d) char a = „u0FF‟; (e) char d = “d”; 答:(b)、(c)能通过编译。(a)中“char c=08”将int赋值给char需要部分强制转换,“char c=8”就正确;(d)中unicode编码错误,java采用的是UCS-2编码,共16位;(e)字符赋值是使用单引号,字符串String赋值时才使用双引号。 3.下面哪些代码能编译通过? (a) short myshort=99S; (b) String name = „Excellent tutorial Mr Green‟;(c) char c = 17c; (d) int z = 015; 答:(d)可以编译通过。(a)中char赋值给short需要强制转换;(b)中String类型赋值用双引号;(c)中int赋值给char需要部分强制转换。 4.字符“A”的Unicode字符编码为65.下面哪些代码正确定义了一个代表字符“A”的变量? (a) Char ch=65; (b) Char ch=‟65‟; (c) Char ch =‟u0041‟; (d) Char ch=‟A‟; (e) Char ch =”A” 答:(c)、(d)可以得到”A”。(b)的输出为5,其他无法编译通过。 5.以下代码共创建了几个对象? String s1=new String(“hello”); String s2=new String(“hello”); String s3=s1; String s4=s2; 答:共创建了2个对象。栈区4个局部变量分别引用了堆区的2个实例,而2个实例又引用了工作区的同一个类。 6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果? class Test { static int myArg = 1; public static void main(String[] args) { Int myArg; System.out.println(myArg); } } 答:无法编译通过,因为局部变量myArg声明之后Java虚拟机就不会自动给它初始化为默认值,若在使用前未被初始化,编译会报错。 7.对于以下程序,运行“java Mystery Mighty Mouse”,将得到什么打印结果? public class Mystery { public static void main(String[] args) { Changer c = new Changer(); c.method(args); System.out.println(args[0]+“ ”+args[1]); } static class Changer { void method(String[] s) { String temp = s[0]; s[0] = s[1]; s[1] = temp; } } } 答:打印结果为“Mighty Mystery” 8.对于以下程序,运行“java Pass”,将得到什么打印结果? public class Pass { static int j = 20; public static void main(String[] args) { int i=10; Pass p = new Pass(); p.amethod(i); System.out.println(“i=”+i); System.out.println(“j=”+j); } public void amethod(int x) { x*=2; j*=2; } } 答:打印结果是 i=10 j=40 其中“int x”是传参,作用域仅在amethod之中。 第四章 操作符 1.以下哪些程序代码能够编译通过? (a) int i=0;if(i){ System.out.println(“hello”);} (b) boolean b1=true; boolean b2=true; if(b1==b2){ System.out.println(“So true”);} (c) int i=1; int j=2; if(i==1||j==i){ System.out.println(“ok”);} (d) int i=1; int j=2; if(i==1&|j==i){ System.out.println(“ok”);} 答:(b)、(c)能编译通过。(a)中int不能作为boolean出现,(d)中不能出现&|该操作符。 2.运行以下程序,将得到什么打印结果? System.out.println(-1>>>1); System.out.println(-1>>1); System.out.println(2>>1); System.out.println(1<<<1); 答:>>>是逻辑右移位操作符,也称不带符号右移位操作符,在移位的过程中二进制数开头填0;>>是右移位操作符,也称带符号右移位操作符,舍弃末尾,在开头填符号位;<<<操作符不存在; 11111111 11111111 11111111 11111111 -1>>>1 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 -1>>1 11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000010 2>>1 00000000 00000000 00000000 00000001 2147483647-1 1 3.以下temp变量最终取值是什么? long temp =(int)3.9; temp %= 2; 答:取值为1。 4.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果? if(5 & 7 > 0 && 5 | 2)System.out.println(“true”); 答:int型不能作为boolean型出现。 5.以下代码能否编译通过?假如编译通过,运行时将得到什么打印结果? int output=10; boolean b1 = false; if((b1==true)&&((output+=10)==20)){ System.out.println(“We are equal”+output);} else { System.out.println(“Not equal!”+output);} 答:Not equal!10 6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果? int output=10; boolean b1 = false; if((b1==true)&((output+=10)==20)){ System.out.println(“We are equal”+output);} else { System.out.println(“Not equal!”+output);} 答:Not equal!20 7.对于以下声明: String s1=new String(“Hello”); String s2=new String(“there”); String s3=new String(); 下面哪些是合法的操作? (a) s3=s1+s2; (b) s3=s1-s2; (c) s3=s1&s2; (d) s3=s1&&s2; 答:(a)是合法操作。除了“+”能用于字符串的连接以外,其他操作符(如“-”、“&”、“&&”等)都不支持String类型的操作元。 第五章 流程控制 1.运行以下代码,将得到什么打印结果? int i = 3; int j = 0; double k = 3.2; if(i < k) if(i == j) System.out.println(i); else System.out.println(j); else System.out.println(k); 答:0 2.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果? int i = 4; switch(i){ default: System.out.println(“default”); case 0: System.out.println(“zero”); break; case 1: System.out.println(“one”); case 2: System.out.println(“two”);} 答:可以编译通过,打印结果是: default zero 分析:default可以放在任何位置上,一旦符合一个case即从头执行到尾,不再判断case。 3.以下哪些是合法的 (a) int i;for(i=5, int j=10;i<10;j--){} (b) int i,j;for(i=0, j=10;i<10, j>0;i++, j--){} (c) int i,k;for(i=0, k=9;(i<10 && k>0);i++, k--){} (d) int i,j;for(i=0;j=10;i<10;i++,j--){} 答:(a)for语句中int定义要放在开头。编译不通过。 (b)循环判断语句不可以用逗号连接。编译不通过。 (c)合法。 (d)分号只能有2个。 4.运行以下代码,将得到什么打印结果? int i = 1; switch(i){ default: System.out.println(“default”); case 0: System.out.println(“zero”); break; case 1: System.out.println(“one”); case 2: System.out.println(“two”);} 答:分析同1,运行结果如下: one two 5.以下哪些代码合法? (a) float x=1; switch(x){ case 1; System.out.println(“Got a 1”); } (b) long x=1; switch(x){ case 1; System.out.println(“Got a 1”); } (c) byte x=1; switch(x){ case 1/1; System.out.println(“Got a 1”); } (d) int x=1; int c=1; switch(c){ case x; System.out.println(“Got a 1”);} (e) short x=1; switch(x){ case 3.2/2; System.out.println(“Got a 1”); } (f) short x=1; switch(x){ case 1,2,3; System.out.println(“Got a 1”); } 答:只有(c)是合法的。 6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果? for(int a=0, b=0;a<2;b=++a, System.out.println(“b=”+b)){ System.out.println(“a=”+a);} 答:可以通过编译,打印结果: a=0 b=1 a=1 b=2 7.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果? int x=0;one: while(x<10) { two: System.out.println(++x); if(x>3) break two; } 答:不能通过编译。 第一章初识Java 1.程序是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。 2.Java包括编程语言和相关的技术。 3.Java主要用于开发,桌面应用程序和Internet应用程序。4.开发一个Java应用程序的基本步骤:编写源程序,编译程序和运行程序。源程序以.java为扩展名,编译后生成的文件以.class为扩展名。使用javac命令可以编译.java文件,使用java命令可以运行编译后生成的.class文件。 5.编写Java程序要符合Java编码规范,为程序编写注释可大大增加程序的阅读性。 6.MyEcplise是一个功能强大的集成开发环境(IDE)。它的各种窗口便于Java程序的开发,调试和管理。 第二章变量、数据类型和运算符 1.变量是一个数据存储空间的表示,它是存储数据的基本单元。变量的命名规则: (1)必须以字母,“_”,“$”开头。(2)可以包括数字,但不能以数字开头(3)不能包括除“_”,“$”以外的特殊符号(4)不能使用Java语言关键字或者保留字(goto) 2.Java中数据类型分为基本数据类型和引用数据类型,基本数据类型有整型(int),双精度浮点型(double),字符型(char)和字符串(String)。3.变量要先声明并赋值,才能使用。4.Java提供各种类型的运算符,具体如下。 (1)赋值运算(=)(2)算术运算符(+,-,*,/,%)(3)关系运算符(>,>=,<,<=,==,!=)(4)条件运算符(条件?表达式1:表达式2)(5)逻辑运算符(&& , || ,!, & , |)&&(短路与)与&的区别:&&进行判断时,当第一个条件为假,则不需要判断第二个条件,结果为假。&进行判断时,即使第一个条件为假时,也需要判断完第二个条件才能给出结果为假。||(短路或)与|的区别:与上同理(5)位运算符(&, | , << , >> , >>>)5.数据类型转换是为了方便不同类型的数据之间进行运算 6.数据类型转换包括了自动类型转换和强制类型转换,自动类型转换需要满足类型兼容且目标类型大于源类型的条件 7.Java中使用boolean类型表示真假,boolean类型的两个值为true和false。 8.Java中的关系运算符可以用于来比较大小,高低,多少等,比较厚的结果是boolean类型。 9.Java提供Scanner类,可以实现从控制台获取键盘上输入的信息 第三章选择结构(一)Java中的if选择结构,包括以下形式 (1)基本的if选择结构:可以处理单一或组合条件的情况(2)if-else选择结构:可以处理简单的条件分支情况(3)多重if选择结构:可以处理连续区间的条件分支情况(4)嵌套if选择结构:可以处理复杂的条件分支情况 第四章选择结构(二)1.switch选择结构适用于进行等值判断 2.switch关键字后面小括号里表达式的值可以是int , short , byte , char , 枚举 , String(JDK1.7开始支持) 第五章循环结构(一)1.循环结构由循环结构和循环操作构成,只要满足循环条件,循环操作就会反复执行 2.使用循环结构解决问题问题的步骤:分析循环条件和循环操作,套用循环结构的语法写出代码,检查循环能否退出 3.while循环结构是先判断后执行,do-while是先执行,后判断。Do-while至少执行一次。 4.debug调试:设置断点,单步运行,观察变量 第六章循环结构(二)1.for循环结构的语法结构如下 for(表达式1:表达式2:表达式3){ } //循环体 表达式1:循环结构的初始部分,为循环变量赋初值 表达式2:循环结构的循环条件 表达式3:循环条件的迭代部分,通常用来修改循环变量的值 2.用break和continue语句控制流程 (1)break语句用于终止某个循环,程序跳转到循环体外的下一条语句。Break也可以在switch语句中使用 (2)continue语句用于跳出本次循环,进入下一次循环 (3)return可以结束当前方法的执行并退出,返回调用该方法的语句处 第七章数组 1.数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型 2.数组中的元素通过数组的下标进行访问,数组的下标从0开始 3数组可用一个循环为元素赋值,或用一个循环输出数组中的元素信息 4.通过数组名.length可获得数组长度 5.利用Arrays.提供的sort()方法可以方便的对数组中的元素进行排序 6.二维数组实际上就是一个一维数组,他的每个元素又是一个一维数组。 第八章循环结构进阶 1.数组的输入排序,选择排序,冒泡排序 2.在二重循环中可以使用break、continue语句控制程序的执行 选择排序: 思路:每次循环得到最小值的下标,然后交换数据。如果交换的位置等于原来的位置,则不交换。插入排序: 思路:将数据插入到已排序的数组中。 第一章:抽象和封装 1,为什么使用面向对象 1.1:万事万物皆对象,面向对象就是采用“现实模拟”的方法设计和开发程序。 2,使用面向对象进行设计 2.1:面向对象设计三部曲 1,发现类。 2,发现类的属性。 3,发现类的方法。 经验:在需求中找出名词的方式确定类和属性,找出动词的方式确定方法。 3,创建类的对象 1,通过构造方法来创建对象 2,通过对象名.属性名的方式调用属性。 3,通过对象名.方法名的方式调用方法。 4,Static可以用来修饰属性,方法和代码块。Static修饰的变 量属于这个类所有。即由这个类创建的所有对象共有同一个static变量。类属性,类方法可以通过类名和对象名访问,势力属性,实例方法只能通过对象名访问。 5,在方法里不可以定义static变量,类变量不能是局部变量。6,构造函数的重载 1,构造方法的名字和类名相同,没有返回值类型。构造 方法的作用主要就是在创建对象是执行一些初始化操作,赋值。 2,在没有给类提供任何构造方法时,系统会提供一个无 参的方法体为空的默认构造方法。一旦提供了自定义构造方法,系统将不会提供这个默认构造方法,如果要使用她,必须手动添加。 3,如果同一个类中包含了两个或两个以上方法,它们的方法名相同,方法参数个数或参数类型不同,则称该方法被重载。成员方法和构造方法都可以重载。 4,构造方法没有返回值类型。如果有,就不是构造方法,而是构造方法同名的成员方法。 5,封装 1,封装是类的三大特性之一,就是将类的状态信息隐 藏在内部。 2,封装的具体步骤:为每个属性创建一对一赋值,在赋值方法中,加入对属性的存取控制语句。 3,隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制语句,限制不合理操作。第三篇:Java面向对象编程习题总结
第四篇:Java编程语言基础总结
第五篇:使用java实现面向对象编程总结