资源描述
Java考试题
1. 前面的题答在WORD文档中, 编程题需要单独提交源文件, 不要答在WORD文档中.
2. 注意时间分配, 编程题中的第三题较难.
一、(共15分)
简要解释下列关键字的含义,并说明其在编程中的特点;
static , final , protected , abstract , interface .
Static:静态的意思,修饰的变量,叫静态变量,修饰的方法叫静态方法。
静态变量在类被载入的时候创建,只要类存在,static变量就存在。被各实例变量所共享类似于全局变量。局部变量(函数内部的变量)不可以是静态的。在使用的时候可以和非静态变量一样被对象访问。也可以直接用类名来访问。类名.静态成员变量。对象名.静态成员变量
静态方法在类被载入的时候创建,可以用类名访问,也可以用实例访问。各实例共享,在静态方法中只能直接调用同类中其他静态成员(方法,变量)。不可以直接访问类中的非静态成员。因为,非静态的成员需要创建对象后才能用,而静态成员则不需要。静态方法不可以使用this和super关键字。Main方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main方法中,不能直接访问该类的非静态成员。必须创建该类的一个实例对象后,才能通过这个对象去访问。
静态代码:不包含在任何方法体中
当类被载入时,执行该代码有且只执行一次,一般用来初始化成员
Final:最终的意思。
用来修饰类,则类不可以被继承
用来修饰方法,则方法不可以被重写
用来修饰变量,则变量成为常量,不可以赋值
方法中定义的内部类
内部类同样可以定义在方法中
在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当与是一个常量,其生命周期超出方法运行的生命周期
Protected:保护的意思,用于设置访问权限,可以修饰类、成员变量、成员方法。
用来修饰类,变量,方法都可以被继承。
访问权限顺序是public、protected、友好的(缺省的)、private
用 Protected 关键字声明的结构具有受保护的访问权限 。
Abstract:抽象的意思。可以修改类、成员方法。
类用abstract修饰,方法也用abstract修饰,不能实例化,抽象方法只需声明,不需实现,抽象方法只能存在于抽象类中或接口中,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则,子类还属于抽象类,抽象类中可以存在非抽象方法。
Interface:定义接口的关键字。
首先接口实现了JAVA中的多继承机制。
类要实现某个接口用implements关键字,在类的定义中给出接口中所有所定义方法的实际实现。接口中的方法和变量都是(自动)public的。对于变量,自动(且只能)为static final成员变量,即常量。一个类可以实现多个接口。
二、简答题(共35分)
1.JAVA中的垃圾回收机制相当于C++的析构方法。主要有finalize()方法和System.gc()方法实现。当一个对象变成垃圾,他所引用的其他对象在没有别的有效的句柄引用的话,也就会变成垃圾。这个时候不需要程序员去释放对象所占的内存空间,系统会自动调用finalize()方法。但有的时候,需要清理垃圾的,而finalize()方法没有被自动调用,我们引入System.gc()方法,他可以人为的强制去清理垃圾,这样使我们更加方便。
所谓同名现象是指两个或多个变量同时指向同一内存地址。同名现象清理垃圾时要等到所有变量都释放指到的这一内存地址,才可以回收该内存空间。可以使用System.gc()方法实现。
2.Value类的equals是继承Object类的方法,该方法默认是比较两个地址,所以
System.out.println(n1.equals(n2))的结果是false。只有在Value类重写equals方法。class Value{ int i;
public boolean equals(Value v)
{
return v.i==i;
}
}
3.(1)首先将Find类、NewFind类的public修饰符去掉。
(2)public void f(){System.out.println("Find.f()")};该方法的结束没有“;”应该把“;”放到“}”前边。如: public void f(){System.out.println("Find.f()");}
(3)public void f(long i){this.i=i;}方法中的i变量继承于Find类的i变量,而Find类的i变量是private,所以不能继承。而且类型是int型,当前传来的参数i是long型,类型也不匹配。首先把Find类的i变量的修饰副改为除了private以外都可以,把public void f(long i){this.i=i;}中形参i的类型改成int.
(4)public class FindErrors extends Find{
public void f2(Find ff){
if(ff instanceof NewFind){
ff.f1(); ff.f();
}
}
上面的f2方法,不能写ff.f1();因为ff句柄得到是其子类的实例,只能调用他们两个所共有的方法。而f1方法是子类NewFind自己独有的。把ff.f1()去掉就可以了。
正确代码如下:
class Find{
public int i;
public void f(){System.out.println("Find.f()");}
}
class NewFind extends Find{
public void f(){System.out.println("NewFind.f()");}
public void f1(){System.out.println("NewFind.f1()");}
public void f(long i){this.i=(int)i;}
}
public class FindErrors extends Find{
public void f2(Find ff){
if(ff instanceof NewFind){
ff.f();
}
}
public void main(String args) {
NewFind nf=new NewFind(); f2(nf);
}
}
二、简答题(共35分)
1. 什么是内存垃圾收集机制,在同名现象中内存垃圾收集机制是如何参与的?(10分)
2.有一段代码,如下所示。程序运行的结果为什么为false?如何通过override修改Value类,使结果为true?(15分)
//Equals2.java
class Value{ int i; }
public class Equals2 {
public static void main(String[] args) {
Value n1=new Value();
Value n2=new Value();
n1.i=100;
n2.i=100;
System.out.println(n1.equals(n2));
}
}
3.改错:在FindErrors.java文件的代码如下。请改错。(10分)
public class Find{
private int i;
public void f(){System.out.println("Find.f()")};
}
public class NewFind extends Find{
public void f(){System.out.println("NewFind.f()");}
public void f1(){System.out.println("NewFind.f1()");}
public void f(long i){this.i=i;}
}
public class FindErrors extends Find{
public void f2(Find ff){
if(ff instanceof NewFind){
ff.f1(); ff.f();
}
}
public void main(String args) {
NewFind nf=new NewFind(); f2(nf);
}
}
三、编程题(共50分)
要求:1. 提交单独的源文件, 不要答在word文档中.
2. 能够运行, 得分高; 能够完全实现功能,得满分.
3. 注意时间分配, 第三题较难
1.用程序实现三角形的输出。要求:(1) 能从命令行参数读取三角形的高度。(15分)
例子:java example 5 (2) 实现自定义的例外
* (3) 能进行例外处理。
***
*****
*******
*********
2.用程序实现仿记事本的程序。要求:能使用菜单读取用户选定的文本文件并显示到文本区域,支持文本文件的保存和另存(save as)。(15分)
3. 实现一个多线程socket服务器,至少能接受两个client的连接。(20分)
展开阅读全文