1、共 8 页,第 页 1 一、判断题(每题 1 分,共 15 分) 1、 Java 允许创建不规则数组,即 Java 多维数组中各行的列数可以不同。 ( 1 ) 2、接口和类一样也可以有继承关系,而且都只能支持 单继承 。 ( 0 ) 3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为 void。 ( 0 ) 4、包是按照目录、子目录存放的,可以在程序中用 package 定义包,若没有 package 一行,则表示该文件中的类不属于任何一个包。 ( 0 ) 5、 Java 对事件的处理是采用委托方式进行的,即将需要进行事件处理的组件委托给指定的事件处理器进行
2、处理。 ( 1 ) 6、在异常处理中,若 try 中的代码可能产生多种异常则可以对应多个 catch 语句,若 catch 中的参数类型有父类子类关系,此时应该将父类放在前面,子类 放在后面。 ( 0 ) 7、在实例方法或构造器中, this 用来引用当前对象,通过使用 this 可引用当前对象的任何成员。 ( 1 ) 8、我们可以方便地编写 Java 客户机 /服务器程序,在客户机 /服务器模式中,客户机一般通过套接字( Socket)使用服务器所提供的服务, Socket 由两部分组成: IP地址和端口号。 ( 1 ) 9、 Java 的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起
3、点。 ( 0 ) 10、 Java 程序里 ,创建新的类对象用关键字 new,回收无用的类对象使用关键字 free。 ( 0 ) 11、当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。( 1 ) 12、如果 f 是父类 Flower 的对象,而 r 是子类 Rose 的对象,则语句 f=r是正确的。( 1 ) 13、 Java 系统的标准输入对象是 System.in,标准输出对象有两个,分别是 System.out 和 System.err。 ( 1 ) 14、 final 类中的属性和方法都必须被 final 修饰符修饰。 ( 0) 15、子类可以定义与父
4、类同名的方法,称为方法的覆盖,方法覆盖要求子类的方法与父类的方法名字和参数都相同,但返回值类型可以不同。 ( 0 ) 二、单项选择题(每题 2 分,共 30 分) 1、 若在某一个类定义中定义有如下的方法: final void aFinalFunction( );则该方法属于( c )。 A、本地方法 B、解态方法 C、最终方法 D、抽象方法 2、 main 方法是 Java Application 程序执行的入口点,关于 main 方法的方法头以下哪项是合法的( b )。 A、 public static void main() B、 public static void main(Str
5、ing args) C、 public static int main(String args) D、 public void main(String arg ) 3、在 Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为( c )。 共 8 页,第 页 2 A、隐藏 B、覆盖 C、重载 D、 Java 不支持此特性 4、 在 Java applet 程序中,用户自定义的 Applet 子类常常覆盖父类的 ( c )方法来完成 applet界面的初始化工作。 A、 start( ) B、 stop( ) C、
6、 init( ) D、 paint( ) 5、 以下程序段执行后将有( b )个字节被写入到文件 afile.txt中。 try FileOutputStream fos=new FileOutputStream(“afile.txt”); DataOutputStream dos=new DataOutputStream(fos); dos.writeInt(3); dos.writeDouble(0.01); dos.close(); fos.close( ); catch(IOException e) A、 16 B、 12 C、 8 D、 2 6、以下代码段执行后的输出结果为( c )
7、。 int x=-3; float y=10.0f; System.out.println(y%x); A、不能成功编译 B、 -1.0 C、 1.0 D、 -1 7、编译并运行以下程序,以下描述哪个选项是正确的( a )。 1. class A 2. protected String toString()/tostring 只适用于对象的调用 3. return super.toString(); 4. A、行 2 出错,不能成功编译 B、编译通过但运行时出错 C、编译通过运行无异常 D、不能成功编译,行 3 出错 8、假设 Foo 类有如下定义,设 f 是 Foo 类的一个实例,下列语句调
8、用哪个是错误的?( A ) public class Foo int i; static String s; void imethod() static void smethod() A、 Foo.imethod(); B、 f.imethod(); C、 System.out.println(f.i); D、 Foo.smethod() 9、分析下面的程序代码,以下哪个说法是正确的。( B ) public class Test extends A public static void main(String args) Test t=new Test(); t.print(); class
9、 A String s; A(String s) this.s=s; public void print() System.out.println(s); A、因为 Test 没有构造方法 Test(),所以这段程序不能编译。 B、如果删除 A 类中的构造方法,这个程序可以编译。 共 8 页,第 页 3 C、这段程序可以通过编译,但由于方法名冲突,引起一个运行时错误。 D、编译成功,运行情况良好。 10、类 Test1 定义如下: 1 public class Test1 2 public float aMethod(float a, float b) 3 4 将以下哪种方法插入行 3 是不合
10、法的。( B ) A、 public float aMethod( float a, float b, float c) B、 public float aMethod( float c, float d) C、 public int aMethod( int a, int b) D、 private float aMethod( int a, int b, int c) 11、编译运行以下程序后,关于输出结果的说明正确的是 ( C ) public class Conditional public static void main(String args ) int x=1; System.
11、out.println(“value is “+ (x10) break Label1; System.out.print(“two,”); System.out.println(“three”); 共 8 页,第 页 5 4、阅读以下程序: import java.io.* ; public class Reverse public static void main(String args ) int i , n =5 ; int a = new int5; for ( i = 0 ; i = 0 ; i - ) System.out.print(ai+“ “); System.out.pr
12、intln( ); 若输入: 1 2 7 4 5 则以上程序段的输出结果为 54721 。 5、写出以下程序的功能。 显示输出文件 newfile.java 的内容 import java.io.*; class FileApp public static void main(String args) throws IOException int b; FileInputStream fileIn=new FileInputStream(“newfile.java”); while(b=fileIn.read()!=-1) System.out.print(char)b); 6、以下程序的输出
13、结果为 123 。 class Test static int num; int c; public Test( ) num+; public static void main(String args) System.out.print(x.num); Test x=new Test(); System.out.print(x.num); Test x=new Test(); System.out.println(x.num); 7、以下程序的输出结果为 Inside main() Mug(1) c1 initialized Mugs() 。 class Mug Mug(int marker)
14、 System.out.println(“Mug(“ + marker + “)“); void f(int marker) System.out.println(“f(“ + marker + “)“); 共 8 页,第 页 6 public class Mugs Mug c1; c1 = new Mug(1); System.out.println(“c1 initialized“); Mugs() System.out.println(“Mugs()“); public static void main(String args) System.out.println(“Inside ma
15、in()“); Mugs x = new Mugs(); 8、以下程序的输出结果为 AB 。 class A public A() System.out.print(“ A ”); public class B extends A public B() System.out.print(“ B ”); public static void main(String args) new B( ); 9、阅读以下程 序段,假定服务器端和客户端程序正常运行无异常发生,请回答以下问题: 描述程序功能。( 4 分) 假定在客户端输入 2.0,请写出服务器端的输出结果。( 4 分) /服务器端程序 impo
16、rt java.io.*; import .*; public class Server public static void main(String args) try ServerSocket serverSocket = new ServerSocket(8000); Socket connectToClient = serverSocket.accept(); DataInputStream isFromClient = new DataInputStream( connectToClient.getInputStream(); DataOutputStream osToClient
17、= new DataOutputStream( connectToClient.getOutputStream(); while (true) double value = isFromClient.readDouble(); System.out.println(“value received from client: “ +value); double result = value*value; osToClient.writeDouble(result); osToClient.flush(); System.out.println(“result: “ + result); catch
18、(IOException ex) System.err.println(ex); /客户端程序 import java.io.*; import .*; 共 8 页,第 页 7 public class Client public static void main(String args) try Socket connectToServer = new Socket(“localhost“, 8000); DataInputStream isFromServer = new DataInputStream( connectToServer.getInputStream(); DataOutp
19、utStream osToServer = new DataOutputStream(connectToServer.getOutputStream(); while (true) System.out.print(“Please enter a double value: “); double value=Double.parseDouble( new BufferedReader(new InputStreamReader(System.in),1).readLine(); osToServer.writeDouble(value); osToServer.flush(); double
20、result = isFromServer.readDouble(); System.out.println(“result received from the server is “+ result); catch (IOException ex) System.err.println(ex); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 C B C C B C A A B B C A A D D 1 程序发生异常,捕获异常后并输出: IO Exception 2 false,true 3 o
21、ne,three 4 5 4 7 2 1 5 显示输出文件 newfile.java 的内容 6 012 7 Inside main() Mug(1) c1 initialized Mugs() 8 A B 9 客户端发送一个实数,服务器端接收并计算该数的平方,然 后将求得的平方值发回至客户端显示。客户端可继续向服务器发送直至有一方退出。( 4 分) value received from client: 2.0 result found: 4.0( 4 分) 1、在 java 中如果声明一个类为 final,表示什么意思? 答 : final 是最终的意思, final 可用于定义变量、方法
22、和类但含义不同,声明为 final 的类不能被继承 。 2、父类的构造方法是否可以被子类覆盖(重写)? 答:父类的构造方法不可以被子类覆盖,因为父类和子类的类名是不可能一样的 。 共 8 页,第 页 8 3、请讲述 String 和 StringBuffer 的区别。 答: String 类所定义的对象是用于存放“长度固定”的字符串。 StringBuffer 类所定义的对象是用于存放“长度可变动”的字符串。 4、如果有两个类 A、 B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个 C 类呢? 答:因为类 A、 B 不是接口,所以是不可以直接继承的,但可以将 A、 B 类定
23、义成父子类,那么 C 类就能实现 A、 B 类的功能了。假如 A 为 B 的父类, B 为 C的父类,此时 C 就能实现 A、 B 的功能。 5、结合 Java 视频 Lesson5(多线程),分析 sleep()和 wait()方法的区别。 答: Sleeping 睡眠的意思 : sleep() 方法用来暂时中止执行的线程。在睡眠后,线程将进入就绪状态。 waiting 等待的意思 : 如果调用了 wait() 方法,线程将处于等待状态。用于在两个或多个线程并发运行时。 6、谈谈你对抽象类和接口的理解。 答 :定义抽象类的目的是提供可由其子类共享的一般形式、子类可以根据自身需要扩展抽象类、抽
24、象类不能实例化、抽象方法没有函数体、抽象方法必须在子类中给出具体实现。他使用 extends 来继承。 接口:一个接口允许一个类从几个接口 继承而来, Java 程序一次只能继承一个类但可以实现几个接口,接口不能有任何具体的方法,接口也可用来定义可由类使用的一组常量。其实现方式是 interface 来实现。 7. Java 的接口和 C+的虚类的相同和不同处。 由于 Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方
25、法和属性,并且接口里面的属性在默认状态下面都是 public static,所有方法默认情况下是 public.一个类可以实现多个接口。 8. 垃圾回收的优点和原理。并考虑 2 种回收机制。 Java 语言中一个显著的特点就是引入了垃圾回收机制,使 c+程序员最头疼的内存管理的问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要考共 8 页,第 页 9 虑内存管理。由于有个垃圾回收机制, Java 中的对象不再有 “作用域 ”的概念,只有对象的引用才有 “作用域 ”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情
26、况下对内存 堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 9.谈谈 final, finally, finalize 的区别。 Final修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final的。将变量或方法声明为 final,可以保证它们在使用中不被改变。被声明为 final的变量 必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 f
27、inal的方法也同样只能使用,不能重载。 Finally再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 Finalize方法名。 Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 finalize()方法是在垃圾收集器删除对象之
28、前对这个对象调用的。 10.数组有没有 length()这个方法? String 有没有 length()这个方法?举例说明使用方法? 数组没有 length()这个方法,有 length 的属性。 String 有有 length()这个方法。 11. Java 中的异常处理机制的简单原理和应用。 当 JAVA 程序违反了 JAVA 的语义规则 时, JAVA 虚拟机就会将发生的错误表示为一个异常。违反语义规则包括 2 种情况。一种是 JAVA 类库内置的语义检查。例如数组下标越界,会引发 IndexOutOfBoundsException;访问 null的对象时会引发 NullPointe
29、rException.另一种情况就是 JAVA 允许程序员扩展这种语义共 8 页,第 页 10 检查,程序员可以创建自己的异常,并自由选择在何时用 throw 关键字引发异常。所有的异常都是 java.lang.Thowable 的子类。 一、单选择题 (每小题 2分,共 10 分 ) 1、编译 Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为 ( B )。 A. .java B. .class C. .html D. .exe 2、设 x = 1 , y = 2 , z = 3,则表达式 y z / x 的值是 ( A )。 A. 3 B. 3.
30、5 C. 4 D. 5 3、在 Java Applet 程序用户自定义的 Applet 子类中,一般需要重载父类的( D )方法来完成一些画图操作。 A. start( ) B. stop( ) C. init( ) D. paint( ) 4、不允许作为类及类成员的访问控制符的是 ( C )。 A. public B. private C. static D. protected 5、为 AB 类的一个无形式参数无返回值的方法 method 书写方法头,使得使用类名 AB 作为前缀就可以调用它,该方法头的形式为 ( A )。 A. static void method( ) B. public void method( ) C. final void method( ) D. abstract void method( ) 二、填空题(每空格 1 分,共 20 分) 1、开发与运行 Java程序需要经过的三个主要步骤为 编辑源程序 、 编译生成 字节码 和 解释运行字节码 。 2、如果一个 Java Applet源程序文件只定义有一个类,该类的类名为 MyApplet,则类 MyApplet必须是 Applet 类的子类并且存储该源 程序文件的文件名为