1、第一章 Java 语言概述 2.“ java 编译 器将源文件编译为的字节码文件是机器码 ”这句话正确吗? 答:不正确 3.java 应用程序的主类必须含有怎样的方法? 答:含有 main 方法 4。 “java应用程序必须有一个类是 public 类 ”这句话正确吗? 答 ;不正确,只能有一个 public 类 5。 “java Applet程序的主类必须是 public 类 ”这句话正确吗? 答:正确,因为 java Applet 主类必须是 Applet 类的子类并且是 public 的类 6。请叙述 java 源程序的命名规则。 答:与 public 的 类同名。 7。源文件生成的字节
2、码文件在运行时都加载到内存中吗? 答:非也,动态随需要运行才加载。 8.面向对象的程序设计语言有那些基本特征? 答:封装;继承;多态性。 9.在 Java 程序中有多个类文件时,用 Java 命令应该运行那个类? 答:具有 main 方法的类 第二章 基本数据类型和数组 4。下列哪些语句是错的? Int x=120; Byte b=120; b=x; 答: B=x;错应为 b=( byte) x 5。下列哪些语句是错的? 答: y=d;错,应 y=( float) d 6。下列两个语句是等价的吗? Char x=97; Char x=a; 答:是等价的。 7。下列 system.out.pri
3、ntf 语句输出结果是什么? Int a=97; Byte b1=(byte)128; Byte b2=(byte)(-129); System.out.printf(“%c,%d,%d”,a,b1,b2); 如果输出语句改为: System.out.printf(“%d,%d,%d”,a,b1,b2); 输出什么? 答:输出 a , -128, 127 修改后输出 97, -128, 127 8.数组是基本数据类型吗?怎样 获取数组的长度? 答:不是基本数据类型,是复合数据类型。可以通过:数组名 .length 的方法获得数组长度 9。假设有两个 int 类型数组: Int a=new in
4、t10; Int b=new int8; b=a; A0=100; B0的值一定是 100 吗? 答;一定,因为 a 数组与 b 数组引用相同。 10。下列两个语句的作用等价吗? Int a=1, 2, 3, 4, 5, 6, 7, 8; Int a=new int8; 答:不等价,前者有初值,后者指分配空间。初值数组元 素为 0 11.有语句: int a=1,2,3,b=4,5; a=b; 求 a0=? b1=? 为什么? 答: a0=4 ; b1=5 因为有相同的引用,同指向 b. 12. Java 语言使用 _编码,每个字符占 _字节 _byte 位 Unicode 2 16 第三章
5、运算符、表达式与语句 1。下列语句输出的结果是什么? Int a=100, x,y; X=+a; Y=a- System.out.printf(“%d, %d,%d”,x,y,a); 答: 101, 101, 100 2。下列语句那些有错误 ? Int x=0; X=5.0/2; Float y=12.5F; y=5.0/2; 答: x=5.0/2; 错。 3。下列语句那些有错? Byte x=32; Char c=a; Int n=c-x; c=c-x; 答: c=c-x;错 应为 int 类型。 4 下列语句正确的是 A.表达式 “12+5634”的值是 true B.表达式 “12+56
6、|34”是非法表达式 C.表达式 “x+y=12”是非法表达式 D.表达式 “12+5634”的值是 13 答: ( A, C ) 5。对于整数 m, m9) y=100; Z=200; Else y=-100; z=-200; System.out.printf(“%d,%d,%d”,x,y,z); 输出: 10, 100, -200 8.下列 for 语句输出结果是什么? For(int i=1; i=0) root1=(-b+Math.sqrt(disk)/(2*a); root2=(-b-Math.sqrt(disk)/(2*a); System.out.printf(“方程的根 :%
7、f,%fn“,root1,root2); else System.out.printf(“方程没有实 根 n“); else System.out.println(“不是一元 2 次方程 “); public void setCoefficient(double a,double b,double c) this.a=a; this.b=b; SquareEquation.c=c; if(a!=0) boo=true; else boo=false; public class ZuoYe4_3 public static void main(String args ) SquareEquati
8、on equation1=new SquareEquation(4,5,1); SquareEquation equation2=new SquareEquation(3,5,-7); equation1.getRoots(); equation2.getRoots(); 4.程序源文件 Example.java 如果使用了包语句,例如: package tom.jiafei; 并且有 c:1000tomjiafei 的目录结构, 并且将源文件编译后得到的全部字节码文件拷贝到目录 c:1000tomjiafei 中。问在哪个目录中运行此文件,运行命令是什么? 答:运行程序时必须到 tomjia
9、fei 的上一层目录 1000 中来运行,如: c:1000java tom.jiafei. Example 第五章 继承、接口与泛型 1。子类在什么情况下可以继承父类的 友好成员? 答:父子类在同一包中时子类可以继承父类的友好成员。 2。子类通过什么办法,可以隐藏继承的成员变量。 答:子类成员变量与父类成员变量同名。 3。子类重写继承方法的规则是什么? 答:重写隐藏父类的方法需:返回的数据类型相同,参数的个数相同,并且类型相同。 如果重写父类的方法后参数的个数或类型不同会出现子类方法的重载。 4.子类的构造方法的第一条语句是什么? 答:如果需要调用父类构造方法,则应是用 super 关键词调
10、用父类的构造方法。 5。子类一旦重写了继承的方法,就会隐藏继承的方法。是这样吗? 答:不一定 。在参数的个数或类型不同时会产生重载。如果只有返回值的类型不同,将会产生编译错误。 (5)子类隐藏父类的方法,参数必须 _相同并且 _相同 . 答: 个数 ,类型 6。子类重写继承方法时,可以降低方法的权限吗? 答:重写继承方法时不能降低访问权限。 7。简述关键字 super 的用法。 答: 1)子类调用父类的构造方法。 2)子类对象引用被隐藏了的父类方法,或成员变量。 8.假设父类有一个方法: Public double f(double x, double y) return x+y; 是否允许子
11、类再声明如下的方法: Public float f(double x, double y) return 23; 答:不允许。 9。父类的 final 方法可以被子类重写吗? 答:不可以 10。什么类中可以有 abstract 方法? 答:被 abstract 修饰的类。接口中也可以有 abstract 方法 11。什么叫做对象的上转型对象? 答:用子类的构造方法构造出来的对象,赋值给父类对象。 12。什么叫接口回调? 答:用实现接口的类创建的对象,赋值给该接口声明的接口变量。 13。与类 有关的匿名类一定是该类的子类吗?与接口有关的匿名类一定是实现该接口的一个类吗? 答:一定,因为类创建对象
12、时,除了构造方法还有类体,此类体被认为是该类的一个子类去掉类声明后的类体。即匿名类,匿名类就是一个子类。与接口的匿名类相同。一定是子类。 14。怎样声明一个泛型类? 答:我们可以这样声明一个泛型类: class A 其中 A 时泛型的名称, E 是其中的泛型,即我们没有指定 E 是何种类型的数据,它可以是任何对象或接口,但不能是基本数据类型。 15 阅读下列程序,并说明输出结果。 class NegativeIntegerException extends Exception String message; public NegativeIntegerException() message=“
13、方法的参数值不是正整数 “; public String toString() return message; class MaxCommonDivisor public int getMaxCommonDivisor(int a, int b)throws NegativeIntegerException if(ab) int t=a; a=b; b=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; return b; class MinCommonMultiple extends MaxCommonDivisor public int getMinCommonM
14、ultiple(int a, int b)throws NegativeIntegerException if(a泛型类是一种什么数据结构? 答:是一种链表类数据结构。 7.对于需要经常查找的数据,应选用 LinkedList还是选用 HashMap? 答:选用 HashMap 第八章 线程 1.线程和进程是什么关系? 答:线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。 2.线程有几种状态? 答:新建状态, 运行状态,中断状态,死亡状态 3.引起线程中断的常见原因是什 么? 答
15、:有 4 种:有 4 种原因的中断: ( a) JVM 将 CPU 资源从当前线程切换给其他线程,使本线程让出 CPU 的使用权处于中断状态。 ( b)线程使用 CPU 资源期间,执行了 sleep(int millsecond)方法。 ( c)线程使用 CPU 资源期间,执行了 wait()方法。 (d) 线程使用 CPU 资源期间,执行某个操作进入阻塞状态,比如执行读 /写操作引起阻塞。 4.一个线程执行完 run()方法后,进入什么状态?该线程还能再调用 start()方法吗? 答:一个线程执行完 run()方法进入死亡状态,之后还能再调用 start()方法运行 5.线程在什么状态时,
16、调用 isAlive()方法后返回值是 false? 答 :当线程进入死亡状态后(实体内存被释放),线程仍可以调用方法 isAlive(),这时返回的值是 false。(线程未调用 start 方法之前,调用 isAlive()方法返回 false). 6.线程调用 interrupt()的作用是什么? 答: intertupt 方法经常用来“吵醒”休眠的线程。当一些线程调用 sleep 方法处于休眠状态时,一个使用 CPU 资源的其它线程在执行过程中,可以让休眠的线程调用 interrupt 方法“ 吵醒”自己,即导致休眠的线程发生 InterruptedException 异常,从而结束休
17、眠,重新排队等待CPU 资源。 8.wait(), notify(), notifyAll()的作用分别是什么? 答: wait()、 notify()和 notifyAll()都是 Object 类中的 final 方法,被所有的类继承,且不允许重写的方法。 当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用 wait()方法。使用 wait()方法可以中断方法的执行,使 本线程等待,暂时让出 CPU 的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用no
18、tifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。 (如果使用notify()方法则只通知处于等待中的某一个线程结束等待 ) 9.将例子 10 中的 TicketSeller 类中的循环条件: While(fiveNumber1) 改写成: If(fiveNumber1)是否合理,理由是什么? 答:是合理的,因为此循环只有一种可能作 循环体内的语句。 10.将例子 10 中的 TicketSeller 类中出现的: Wait( ) 改写成: Thread.sleep(2000)从新编译,运行,观察结果。 答: sleep(2000)线程到时醒来排队,这期间中断的原因
19、不一定解决, wait()则直到中断原因消失才结束等待。 11.什么叫守护线程? 答:一个线程调用 void setDaemon(boolean on) 方法可以将自己设置成一个守护( Daemon)线程,例如: thread.setDaemon(true); 线程默认是非守护线程,非守护线程也称作用户( user)线程。 当程序中的所有用户线程都已结束运行时,即使守护线程的 run 方法中还有需要执行的语句,守护线程也立刻结束运行。一般地,用守护线程做一些不是很严格的工作,线程的随时结束不会产生什么不良的后果。一个线程必须在运行之前设置自己是否是守护线程。 12.对于 thread(Runn
20、able target)构造的线程使用同一目标对象的线程,目标对象的成员变量自然成为这些线程 _的数据单元。 答: 共享 第九章 输入、输出流 1.如果准 备读取一个文件应使用 FileInputStream 流还是使用 FileOutputStream 流? 答: FileInputStream 2.FileInputStream 流的 read()方法和 FileReader 流的 read()方法有什么不同? 答: FileInputStream 流从输入流中顺序读取单个字节的数据。该方法返回字节数据值( 0-255之间的整数)到末尾返回 -1 FileReader 流,输入流调用该方法
21、从源中读取一个字符,该方法返回一个 0-65535 之间的一个整数( Unicode 字符值)到末尾返 回 -1 。 3.BufferReader 流能直接指向一个文件对象吗? 答:不能,要通过一个,底层的 FileImputStream 类的对象,才能指向一个文件对象。 4.ByteArrayOutputStream 流怎样获取缓冲区中的内容? 答:这个流的对象可以通过 public byte toByteArray( )方法,将刚刚写入缓冲区的内容全部返回。 5.DataInputStream 类和 DataOutputStream 类的主要用途是什么? 答: 主要是将 java 基本数据
22、类型写入底层流或以 Java 基本数据类型的 方式读出底层流的内容。 6.使用 ObjectInputStream 类和 ObjectOutputStream 类有哪些注意事项? 答:值得注意:当用对象流写入或读出对象时,要保证对象是序列化的。这是为了保证能把对象写到文件,并能再次把对象正确读回到程序中。 Java 提供给我们的绝大多数对象都是所谓序列化的,比如组件等。一个类如果实现了Serializable 接口,那么这个类创建的对象就是所谓序列化的对象。 Serializable 接口中的方法对程序是不可见的,因此实现该接口的类不需要实现额 外的方法,当把一个序列化的对象写入到对象输出流时
23、, JVM 就会实现 Serializable 接口中的方法,按着一定格式的文本将对象写入到目的地。 7.怎样使用输入 /输出流技术克隆对象? 答:使用对象流很容易得获取一个序列化对象的克隆。我们只需将该对象写入到对象输出流,然后用对象输入流读回的对象就是原对象的一个克隆。 如: Shop shop1=new Shop(); Goods s1=new Goods(“TV“),new Goods(“PC“); shop1.setGoods(s1); try ByteArrayOutputStream out=new ByteArrayOutputStream(); ObjectOutputStr
24、eam objectOut=new ObjectOutputStream(out); objectOut.writeObject(shop1); ByteArrayInputStream in=new ByteArrayInputStream(out.toByteArray(); ObjectInputStream objectIn=new ObjectInputStream(in); Shop shop2=(Shop)objectIn.readObject(); Shop2 就是 shop1 的克隆。 8.使用 RandomAccessFile 类读写文件的好处是什么? 答 (1)用这个类创建的流对象,建立的流既可以象文件写,也可以从同一文件读出。 (2)可以将读取文件,或写入 文件的任意位置。 9.使用 RandomAccessFile 类创建的流 _输入流, _输出流。 答: 既不是, 也不是 10.经常使用 File 类的对象获取文件本身的一些信息,但不可以获得文件的 _ 答:内容