51.类注释必须放在import语句之后,直接放在class定义之前。方法注释必须紧靠着放在它所描述的方 法前面 。
52.在Java中任何继承都是共有继承。
53.如下代码
public class Employee{
private int salary;
....
public int getSalary(){
return salary;
}
.....
}
public class Manager extends Employee{
private int bonus;
....
public int getSalary(){
int basesalary;
basesalary=super.getSalary();//super关键字表示调用基类的函数。
return basesalary+bonus;
}
....
}
54.看下面的代码:
public class Test{
public static void main(String [] args){
data []aa;
aa=new data[3];
}
static
{System.out.println("124");}
{System.out.println("sadf");}
}
class data{
public int a;
data(){}
{System.out.println("sadf");}
static
{System.out.println("iuwe78789");}
}
在定义data对象时其里面的初始化块没有执行,为什么?
解答:Java语言是解释执行的,对于主类中的静态初始化块,程序一进入就会触发主类,所以 主类的静态块会被执行,但上面的代码中虽然用data定义了数组,同时也给数组分配了 三个存储空间,但没有触发其类,因为分配的存储空间不是类的对象,所以类中的静态 块类也就不执行。假如把data类中的public int a;改为public static int a;然后在 Test类中增加data.a=1;就会触发data类,从而data类中的静态块就会被执行。
55.在C++中也能够写出不允许被派生的类,问如何写这些类?(提示:使用虚基类)。
56.用instanceof 可以判断一个类对象是否属于一个类。
例如 if( staff instanceof Manager){}//Manager是定义的一个类,staff是一个对象
57.Java使用的类型转换语法来自于C语言"糟糕的旧时代",工作方式类似于C++的安全dynamic_cast操作 符。例如,Manager boss=(Manager)staff;//java
他等同于:Manager *boss=dynmic_cast<Manager *>(staff);//C++
在Java中,如果类型转换失败,不会生成一个null对象,而是抛出一个异常。在这个意义上, 它类似于C++中的引用类型转换。在C++中,你可以在一个操作里进行类型测试和类型转换:
Manager * boss=dynamic_cast<Manager*>(staff);//C++
if(boss!=NULL){....}
而在Java中,你需要把类型转换和instanceof操作符结合起来使用:
if(staff instanceof Manager){
Manager boss=(Manager)staff;
...
}
58.abstract关键字为抽象的意思,如果类用abstract关键字修饰则表示这个类为抽象类。一个方法用 abstract关键字修饰表示这个方法为抽象方法。抽象类不能够创建对象。
在C++中如果含有一个纯虚函数,那么这个类为虚类,那么在Java中是否一样呢?是否类含有 一个抽象的方法这个类就是一个抽象类?
抽象类可以定义变量,但那变量必须指向其子类为非抽象类的对象。
59.Java中protected保护的字段于C++中的protected保护的字段有较大的区别:
在Java中,protected保护的字段级可以被子类访问,还可以被同一包中的其他类访问。而在 C++中只能被子类访问。所以Java中的protected关键字的安全性要比C++中的弱。
60.关于Object类:
Object类是Java中所有类最终的祖先---每一个类都由它扩展而来。在不明确给出超类的情况下, Java会自动把Object作为要定义类的超类。
疑问:抽象类也由Object类派生而来?
解答:所有类都有Object类派生而来,其中当然也包含了抽象类
61.Object类中的equals方法用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两 个对象是否指向同一块内存区域。
62.Java语言规范要求equals方法具有一下特点:
1)自反性,对于任意非空引用x,x.equals(x)应返回true;
2)对称性,对于任意引用x,y,当且仅当y.equals(x)返回为true时,x.equals(y)返回为true;
3)传递性,对于任意引用x,y,z,如果x.equals(y)返回为true且y.equals(z)返回为true时, x.equals(z)返回为true;
4)一致性,如果x和y引用的对象没有改变,那么对x.equals(y)的重复调用应返回同一结果;
5)对任意非空引用x,x.equals(null)应返回false。
63.Java中的Class类和C++中的type_info类相似,而getClass方法等同于C++中的typeid操作符。不过 Java中的Class类要比C++中的tyep_info功能强大。C++的type_info只能展现一个类型的名字字 符串,却不能创建那个类型的对象。
疑问:C++中的type_info类和typeid操作符如何使用?
64.什么叫反射器?
能够分析类的能力的程序称为反射器。
65.以下编译错误说明了什么?
1.Test3.java:59: 类 Employee 是公共的,应在名为 Employee.java 的文件中声明
public class Employee extends Person{.... }
2.Test3.java:59: 此处不允许使用修饰符 private
private class Employee extends Person{...}
3.Test3.java:55:缺少方法主体或抽象声明
public String setName(String aa);//这是抽象类Person类中的成员函数
66.对于静态字段在定义时可以直接赋值,例如在类中写:static int i=1;
67. 在Java中接口不是类,不能用new操作符实例化接口,而是一组对类的要求,这些类要与接口一致。
68.接口中绝不能有实例字段,而且接口中也绝不会去实现方法。
69.要让类实现一个接口,需要下面两个步骤:
1.声明类想要实现指定的接口。
2.对接口中所有的方法进行定义。
声明类要实现的接口需要使用implement关键字。
70.如何让一段代码执行下面的功能
如果try中抛出了异常在catch中抓住了,就再一次进入try。按照这个思路我们设计一个循环实 现,具体代码如下:
while(true){
try{
String str;
str=JOptionPane.showInputDialog("请输入一个数字");
input=Integer.parseInt(str);
}
catch(NumberFormatException e){
continue;
}
break;
}
71.在Java中,每个异常都是一个对象,它是Throwable类或其子类的实例。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
72.接口没有构造器,也就不能创建对象的原因之一。
73.使用下面的步骤,可以得到屏幕大小。
调用ToolKit类的静态方法getDefaulToolKit得到一个ToolKit对象。(ToolKit类包含很多和本 地窗口系统打交道的方法)
然后调用getScreenSize方法把屏幕尺寸作为一个Dimension对象返回。
Dimension对象d使用共有的(!)实例变量width和height存储了宽度和高度。
下面为相关代码:
ToolKit kit=ToolKit.getDefaultToolKit();
Dimension screenSize=kit.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
74.如何自定义光标类型
我们可以使用ToolKit类的createCustomCursor方法定义自己的光标类型:
ToolKit tk=ToolKit.getDefaultToolKit();
Image img=tk.getImage("dynamite.gif");
Cursor dynamiteCursor=tk.createCustomCursor(img,new Point(10,10),"dynamite stick");
createCustomCursor方法中的第一个参数指向光标图像。第二个参数给出了光标的热点偏移。 第三个参数是描述光标的一个字符串。改字符串可以用于访问性支持,例如把此光标形状读取 给视力受损人士或者没有面对屏幕的用户。
75.如果局部内部类中的方法要访问外部方法中的变量,外部方法中的变量必须声明为final类型的变量。
76.假若byte的值为负数,加上 256 把它转换成无符号的整数值。
77.有一个函数名为:public String valueToString(Object value) throws ParseExcetption{
......
}
请问:函数名后面跟的 throws ParseExcetption 有什么作用?
78.在Swing中,文本区没有滚动条。如果你需要滚动条,你必须把文本插入到一个滚动窗格中。然后, 把该滚动窗格插入进内容窗格中。
testArea =new JTextArea(8,40);
JScrollPane scrollPane=new JScrollPane(textArea);
contentPane.add(scrollPane,BorderLayout.CENTER);
79.一般情况下在什么地方设置背景颜色?
80.如何在Swing中实现单选框按钮?
首先为按钮组构造一个ButtonGroup类型的对象。
接着,把JRadioButton类型的对象添加到该按钮组中。
ButtonGroup group=new ButtonGroup();
JRadioButton smallButton=new JRadioButton("Small",false);
JRadioButton mediumButton=new JRadioButton("Medium",true);
JRadioButton bigButton=new JRadioButton("Big",false);
groud.add(smallButton);
groud.add(mediumButton);
groud.add(bigButton);
81.为什么增加了按键消息却不相应?
82.throw 和throws的区别?
83.所有的applet将会扩展JApplet类,而JApplet类是所有基于Swing技术的applet的超类。
84.如果applet包含Swing组件就必须扩展JApplet类。在Applet类中Swing组件不会正确显示。
85.为什么applet不要main方法?
浏览器自己加载。
86.将应用程序转换成applet的详细步骤
1)创建一个HTML页面,它有合适的标记来装载applet代码。
2)创建一个JApplet的子类。将该类标记为public,否则applet代码。
3)删除应用程序中的main方法。因为应用程序会在浏览器中显示,因此不要构造框架窗口。
4)将所有的初始化代码从框架窗口的构造器中移到applet的init方法中。不需要显示地构造 applet对象---浏览器会实现实例化一个该对象并且调用init方法。
5)删除对setSize的调用。对于applet而言,大小通过HTML文件中width和height参数指定。
6)删除对setDefaultCloseOperation的调用。applet不能被用户关闭。当浏览器退出时applet 才会终止运行。
7)如果应用程序调用了setTitle方法,删除该调用。applet没有标题。
8)不要调用show方法。applet会自动显示。
87.applet提供的四个方法:init,start,stop,destory。
1)init:当初始化applet时就要使用该方法。它类似于构造器----当Java第一次运行applet时, 系统会自动调用该方法。在applet中,该方法的通常动作是对param参数进行处理以及增加用 户界面组件。applet可以有默认构造器,但是习惯上是在init方法中而不是在默认构造器中 进行全部的初始化工作。
2)start:当Java调用init方法后会自动调用该方法。而当用户从其他页面方法到包含applet的 页面时,该方法也被调用。这表示start方法会被多次调用,而init方法仅仅被调用一次。 start方法是applet中重新启动线程的地方。
3)stop:该方法在用户离开包含applet的页面时会被自动调用。对同一个applet,该方法会被多 次调用。
4)destory:仅仅在浏览器正常退出时,该方法才会被调用。因为applet仅仅生存在HTML页面中, 因此当用户不再浏览包含applet的页面时,applet不应该遗留资源在系统中。因此该通过覆 盖destort方法来回收这些资源。
88.关于start和stop方法的进一步讨论
经过测试,当网页显示的时候就会调用start放,当网页被隐藏时就会调用stop方法。
89.ActiveX的安全机制是如何工作的?
90.假设类A,派生出类B。在创建类B的对象时一定会调用类A的构造器,如果没有显示调用基类的构造器 默认调用基类的无参构造器。
如下代码:
class A{
A(int a){
}
}
class B extends A{
B(int a){
}//出现错误,因为基类中没有无参构造可调用
//如果加super(0);则没有错误。
//如果在基类中增加一个无参构造器则不出现错误
}
91.获取URL的常见方法是询问applet的来源,特别是1)当前调用它的页面的URL.2)当前applet自己的URL
要找到前者,需要使用getDocumentBase方法;而后者要用getCodeBase方法。getDocumentBase 方法实际上是返回包含applet标记的HTML文件的URL,而API文档声称其仅仅返回该目录的URL。 getCodeBase方法实际上是返回包含applet的目录,而API文档声称其返回applet的URL。
92.有了JAR文件后,需要在applet 标记中引用它,如下例子:
<applet code="calculatorApplet.class" archive="calculatorClass.jar" width="100" height="100">
code属性告诉浏览器applet名字。archive属性仅仅指明了applet和其他文件可能存放的位置。 每次需要类文件、图像或者声音文件时,浏览器首先在archive属性中指定的JAR文件中寻找。 当文件不在这些JAR文件时,才会到Web服务器上去取。
93.如果期望一个applet在终端用户机器上长时间驻留,则可以使用cache_option,cache_archive,cache_version这几个关键字。
94.TCP/IP协议的层次结构
应用层:Telnet FTP SMTP HTTP
传输层: TCP UDP
网际层: IP
网络接口层:以太网 FDDI X.25 ATM