7.若有c=28,则表达式(c>10?
1:
c<25?
2:
c<35?
3:
4)的值多少?
8.类Test1定义如下:
1.publicclassTest1{
2.publicfloataMethod(floata,floatb){}
3.
4.}
将publicfloataMethod(floatc,floatd){}插入第3行是不合法的。
9.下面的类定义中,Shpe可以编译,而Square不能通过编译。
abstractclassShape{
abstractvoiddraw();}
classSquareextendsShape{}
(注:
编译信息:
Square不是抽象的,并且未覆盖Shape中的抽象方法draw())
10.下面的Java程序可以通过编译,但运行时出现”Mainmethodnotpublic”的提示信息。
classH{
staticvoidmain(Stringargs[]){
System.out.println(“Hello!
”);}}
11.下面的Java程序可以通过编译,但运行时出现“无法从静态上下文中引用非静态变量a”的提示信息。
classH{
inta=1;
publicstaticvoidmain(Stringargs[]){
System.out.println(a);}}
12.使用默认修饰符修饰的成员变量可以被声明它的类及同一包中的类所访问,不包括其它包中派生的类。
13.使用protected修饰符修饰的成员变量可以被声明它的类、派生的子类及同一包中的类所访问。
14.使用public修饰符修饰的成员变量可以被任何包中的任何类所访问。
15.使用private修饰符修饰的成员变量只能被声明它的类所使用。
16.抽象方法(abstract)是一种仅有方法头,没有具体方法体的方法,该方法必须在抽象类中定义。
17.非抽象子类必须覆盖父类的抽象方法
18.final方法是不能被当前类的子类重新定义的。
19.接口中定义的常量都是publicstaticfinal类型。
20.类定义classMyStringextendsString{…}无法编译,因为String是final类。
21.如果被覆盖的方法是用public修饰的,覆盖方法也必须用public修饰。
因为覆盖方法的修饰符不能变得更加私有。
22.Java的垃圾回收器只在heap空间紧张时才投入工作,如果heap空间非常多,可能永远不工作。
因此正确的程序写法是不能依赖垃圾回收的时间或顺序,即不能显式地用垃圾回收器释放对象占有的内存。
23.在子类的构造器中可以使用super()调用父类的另一个构造器,使用this()调用本类的另一个构造器。
super()与this()不能同时使用,因为它们都要求放在可执行语句的第1条。
23.如果不清楚将产生异常的具体类型,catch的参数应写成Exceptione。
25.设有Strings="中华人民共和国",则s.length()返回7。
26.设有char[]c={'W','e','l','c','o','m','e'},语句Strings=newString(c,3,4)的功能是构造串s="come"。
27.设有StringBuffersb=newStringBuffer("Hello!
areyou"),执行语句sb.insert(7,"How")后sb为”Hello!
Howareyou.”。
28.下述代码段输出什么?
classH{
publicstaticvoidmain(String[]s){
inta=1,b=0,c=1;
try{a=a/b;c=2;}
catch(ArithmeticExceptione){System.out.print("A");}
System.out.print(c);}}
29.下述代码段,不能通过编译。
因为发生IO错时会抛出异常IOException,因此编程时一定要用throws子句或把System.in.read();放在try内。
classH{
publicstaticvoidmain(String[]s){
inta=System.in.read();
System.out.println("a="+a);}}
(注:
正确写法publicstaticvoidmain(String[]s)throwsjava.io.IOException{…})
30.定义包时,应先建立一个与包同名的文件夹,再设置环境变量ClassPath。
包定义必须放在最前面,包定义之前不可以有空格或注释语句。
31.在JavaApplet程序用户自定义的Applet子类中,一般需要重载父类的init()方法来完成主类实例的初始化工作。
32.在JavaApplet程序中,panit()方法在下述情况下被自动调用。
1)首次运行,显示浏览器窗口时。
2)浏览器窗口大小发生变化或浏览器窗口移动时。
3)有其它窗口挡住Applet画布时。
33.基于二进制字节的输入输出流的基类是InputStream和OutputStream,它们都是抽象类,因此不能实例化。
34.基于Unicode字符的输入输出流的基类是Reader和Writer,它们都是抽象类,因此不能实例化。
35.类BufferedInputStream配备了一个缓冲区(定义一个数组),一次完成一个内存块的传送。
36.BufferedReader类的readLine()方法的功能是一次读取一行字符。
37.DataOutputStream类的write(b,i,j)方法的作用是把指定字节数组b中从偏移量i开始的j个字节写入基础输出流。
38.类RandomAccessFile已经实现了DataInput和DataOutput接口,既可读也可写。
39.java.lang中有两个字符串类String和StringBuffer,String处理定长字符串,StringBuffer处理变长字符串。
40.Strings=newString("Hello!
")的作用是构造定长字符串s,s的值为"Hello!
"。
41.StringBuffers=newStringBuffer("Hello!
")的作用是构造变长字符串s,s的初值为"Hello!
"。
42.容器Panel和Applet的默认布局管理器是FlowLayout。
43.容器Frame和Dialog的默认布局管理器是BorderLayout。
44.使用BorderLayout布局管理器时,容器中最多可放置5个组件。
45.用setLayout(newGridLayout(2,3))设置网格布局(2行3列共6个网格)。
46.Choice类中实现返回被选中选项文本的方法是publicStringgetSelectItem()。
47.List类中返回被选中多个选项序号的方法是int[]getSelectedIndexs()。
48.Checkboxone=newCheckbox(“北京”,true)创建一个复选框one,标题为“北京”,初始状态被选中。
49.ListList1=newList(10,true)创建一个列表框List1,其中10为列表框选项个数,true支持多选(false支持单选)。
50.为实现java的事件处理,应导入importjava.awt.event包。
51.列表框List类的方法getSelectedItem()的作用是返回被选中的文本。
52.单选框CheckboxGroup类的方法getState()的作用是返回单选框是否被选中的逻辑值。
53.选项框Choice类的方法getSelectIndex()的作用是返回当前选定项的索引。
54.Buttonbutton1=newButton("OK")创建一个显示标题为"OK"的按钮对象button1。
55.使用窗口适配器WindowAdapter时,必须创建它的子类,且只需重写所用的方法。
56.Java的图形界面开发中的Swing开发包是AWT的功能扩展和功能加强,Swing不能完全取代AWT。
57.在Java中为处理单击事件,必须实现接口事件ActionListener的actionPerformed(ActionEvente)方法。
58..在容器JApplet中加入构件,应使用Containerpane;pane=getContentPane();pane.add();方法。
59.在Java中定义线程时,应重写run()方法,因此从某种意义上讲run()方法就是线程的执行体。
60.用于启动线程执行的方法是start()。
61.线程创建时继承了父类的优先级,创建后可在任何时候用setPriority(intm)设定优先级。
(其中m取1~10,10最高、1最低。
MAX_PRIORITY代表10,MIN_PRIORITY代表1,默认为NORM_PRIORITY代表5。
)
62.线程的静态方法sleep(longmillis)使当前运行的线程休眠millis毫秒(为一正整数),休眠时间到继续运行。
63.线程的方法stop()是停止一个线程运行,但该线程仍然存在,只是处于死亡状态,而destroy()是消灭一个线程。
64.在Java多线程机制中,可以使用关键字synchronized锁定一段代码或一个对象或一个方法,创建一个临界区。
65.在Applet应用程序中为了在Applet界面上显示文字、图形等,应重载paint()方法,其参数类型是Graphics。
66.方法fillRoundRect()绘制的图形是具有填充色的圆角矩形。
67.方法fillRect()绘制的图形是具有填充色的矩形。
68.类.URL的成员方法openStream可以打开到当前URL的连接并返回输入流。
69.类.Socket的成员方法getInputStream可用来获取Socket的输入流。
70.类.InetAddress的静态方法getByName可以根据主机名创建该类的实例对象。
三、问答题
1.简述Java语言的主要特点。
答:
简单性、面向对象、网络适用性、健壮性、安全性、平台无关性、可移植性、解释性、高性能、多线程、动态性、丰富的类库、嵌入浏览器运行。
2.简述Java程序的类型、区别、用途和跨操作系统平台运行的原理.。
答:
类型:
①Java应用程序(JavaApplication)②Java小应用程序(JavaApplet)
区别:
①Java应用程序(JavaApplication)是完整的程序,需要独立的解释器来运行。
②Java小应用程序(JavaApplet)是嵌入在HTML中编写的Web页面中的非独立程序,由Web浏览器内部包含的Java解释器来解释执行。
用途:
①JavaApplication的用途:
是面向对象的独立运行的程序语言,具有与其它语言相同的特性。
同时还具有自己独立的特性。
②JavaApplet的用途:
可代替如JavaScript等脚本语言,不仅使Web页具有与用户交互能力,
且更加安全可靠。
跨平台运行原理:
因为它是一种解释型语言,编译后的代码为字节代码,到了运行时,才由Java虚拟机解释为可执行的机器码。
由于Java虚拟机屏蔽了一些与平台相关的内容,所以编译后的Java程序能跨操作系统平台运行。
3.简述Java程序的框架结构。
答:
Java程序由一个或多个类组成,但其中必须有一个公有类即主类,而且源代码文件(.java文件)必须与这个公有类
同名。
Java的类可以由一个或多个方法组成。
JavaApplication中,主类必须包含main()方法,它是程序的入口。
JjavaApplet中,其主类是系统类Applet的子类。
4.简述Java虚拟机的执行过程,说明编译后的Java程序为什么不能直接运行。
答:
执行过程:
①代码的载入,指载入字节码.class文件。
②代码的校验,指安全性与可靠性校验。
③代码的执行,指由虚拟机解释执行字节码.class文件。
编译后的Java程序不是可执行的二进制代码,而是一种字节码,需要Java虚拟机解释执行,因此
编译后的Java程序不能直接运行。
5.简述抽象类、抽象方法的概念及特点。
答:
abstract声明的类和方法叫抽象类和抽象方法。
抽象类不能实例化一个对象,它只能被继承。
一个抽象类中可以含有抽象方法。
抽象方法是没有方法体的方法,是不能实现的方法,因此抽象方法只能出现在抽象类中。
一个抽象类中不一定含有抽象方法,但含有抽象方法的类一定是抽象类。
6.简述Java中字符串类的概念。
答:
Java中的字符串是作为一种类来处理的。
java.lang有两个字符串类String和StringBuffer。
String类用于处理创建后不再改变的字符串,而StringBuffer类用于处理变长字符串。
String和StringBuffer类都是final类,安全可靠。
String和StringBuffer类都可自动捕获异常,提高了程序的健壮性。
Java把字符串定义为类的好处
①在任何系统平台上都能保证字符串操作的一致性,特别适用于网络环境。
②String和StringBuffer都是最终类,安全可靠
③可自动捕获异常,提高了程序的健壮性
7.简述Java中构造方法的概念及特点。
答:
构造方法:
构造方法是一种特殊的方法,用于初始化对象。
特点:
①构造方法与类同名,可以有参数,也可无参数。
②构造方法没有返回值,在方法前也不需要写void。
③创建对象时,系统自动调用构造方法。
④用户在程序中不能直接调用构造方法,只能通过new操作符调用。
⑤一个类可以有多个同名构造方法,但参数必须不同。
所谓参数不同是指:
⑥类中可以不定义构造方法,此时Java提供一个默认的无参数构造方法
8.简述Java中包的概念,Java系统提供了哪些常用包及使用包的方法。
答:
包是Java提供的一种区别类名空间的机制,是类的组织方式,一个包对应Windows中的一个文件夹,包中还可以有包,称为包的等级。
包可以使创建的类按层次和规律分门别类存放,便于查找和使用。
Java系统提供的常用包有:
java.lang、java.util、java.io、、java.awt、java.applet等。
包的使用有三种方式:
①在要引用的类名前带上包名作为修饰符
②在文件开头使用import引用包中的类
③在文件前使用import引用整个包
9.简述Java中接口的概念及接口的性质?
答:
Java语言规定,类只能实现单继承,但接口可以实现多重继承。
接口中定义的方法都是抽象方法,定义的所有域都是常量。
因此接口可以看作是没有实现的方法和常量的集合。
使用接口主要是解决Java语言不支持多重继承的问题。
性质:
①接口不提供代码重用性。
因为接口中的方法都是没有实现的方法,因此所有的方法体都要自己编写。
②接口可以通过多继承进行扩展。
③接口不能升级,即提供给用户的接口不能再改变。
10.简述Java中异常的概念,自定义异常类的方法及如何抛出自定义异常。
答:
Java程序在运行中遇到非致命性错误时,通过某种修改可以继续运行,称这类错误为异常。
当异常发生时,Java语言可通过异常处理机制使程序继续运行。
创建一个自定义异常类:
<自定义异常类名>{…}
可使用三种方法抛出自定义异常:
①使用try-catch-finally语句,try子句中使用thrownew抛出异常并捕获异常,在catch和finally子句中
给出异常处理代码。
②使用throw语句在声明方法的同时声明抛出异常的类型。
③使用thrownew语句直接抛出异常。
11.简述JavaApplet的工作原理及生命周期的划分。
答:
Applet是一种特殊的Java程序,经过编译后被嵌入到HTML中并由Web浏览器内置的Java解释器执行。
程序从运行到结束的过程称为程序的生命周期,Applet的生命周期与浏览器相关,共有四个阶段:
①初始化阶段,此时使用init方法初始化Applet对象。
②开始运行阶段,此时使用start方法启动Applet线程运行。
③停止运行阶段,此时使用stop方法停止Applet线程运行。
④清除阶段,在浏览器关闭页面窗口时,使用destroy方法销毁Applet对象。
12.简述Java虚拟机中垃圾回收器(GC)的工作方式。
答:
垃圾回收器在后台运行,负责释放不用对象。
1)GC周期性工作,因此垃圾(超出作用域的对象)可能存在很长时间,我们无法知道对象何时被清除。
2)GC只在heap空间紧张时才投入工作,如果heap空间非常多,GC可能永远不工作。
这是因为GC作为一个线程,要有系统消耗,只有heap空间紧张时才投入工作,可以提高系统效率。
13.简述Java多态性的概念,隐藏、覆盖和重载的概念及使用时应注意的问题。
答:
多态性:
在一个类中可以定义多个同名方法,有静态多态性和动态多态性。
隐藏:
子类重新定义了父类中的同名成员变量。
被隐藏的父类成员变量在子类中仍然占有存储空间。
覆盖:
子类重新定义了父类的同名成员方法,要求方法名、参数和返回类型都相同。
与隐藏不同,此时子类方法将替换掉同名的父类方法,清除父类方法在子类中占有的空间。
重载:
在同一个类中定义多个同名但参数不同的方法,参数不同是指个数、类型或顺序不同。
注意事项:
不能覆盖父类的static方法和final方法。
可以隐藏父类的static方法,即在子类中声明同名static方法。
非Static方法不能隐藏,只能覆盖。
子类必须覆盖父类的abstract方法。
14.简述Java线程的状态。
答:
①创建(new)状态:
又称新生态,当用new操作符创建一个Thread类或其子类对象时,线程处于创建状态,此时线程对象已被实例化。
系统已为它分配内存空间等资源,但没有获得CPU时间片。
②可运行(Runnable)状态:
又称就绪态,新创建的线程调用start()方法将线程转换为可运行状态,插入到就绪线程队列。
③运行中(Running)状态:
又称执行态,处于可运行状态的线程一旦获得CPU即进入运行状态。
当线程对象被调度执行时自动调用run()方法。
④挂起(NotRunnable)状态:
又称阻塞态、等待态,一个正在执行的线程在某些情况下,被人为挂起或需要执行时间很长的I/O操作时,线程让出CPU进入挂起状态,当引起阻塞的原因消除时才转为就绪态,进入线程就绪队列。
⑤死亡(Dead)状态:
又称消亡态,线程运行结束,释放资源。
15.什么是事件、事件源和事件监听器?
简述使用事件监听器进行事件处理的过程。
答:
事件:
对界面的某种操作,如按键、单击鼠标、鼠标移动等。
事件源:
事件的产生者,通常是某一组件,如按钮等。
事件监听器:
是某些事件的接口,其中定义了被监听的事件发生时系统要调用的方法。
事件处理过程由下面3步组成:
①为类声明需要的事件监听器接口。
②给事件源注册一个事件监听器。
③实现接口声明中事件处理方法。
16.什么是流?
如何确定I/O流的方向?
简述Java中I/O流类的组成。
答:
流:
流是流动的数据缓冲区。
I/O流的方向:
流的传送是串行的。
数据流从外设流向CPU(内存)为输入,数据从CPU(内存)流向外设为输出。
I/O流类的组成:
Java.io包中的I/O流类主要包括4大类,字节流、字符流、文件流和对象流。
1)字节输入输出流处理类一次处理一个8位字节。
基于二进制字节的输入输出流的基类是InputStream和OutputStream,它们都是抽象类,因此不能实例化。
2)字符输入输出流处理类,一次处理一个16位标准字符。
基于Unicode字符的输入输出流的基类是Reader和Writer,它们都是抽象类,因此不能实例化。
四、程序阅读与分析
(一)写出下面程序的运行结果或完成的功能
1.publicclassH{
publicstaticvoidmain(Stringargs[]){
inti=20;
while(true){
if(i-->10)
break;}
System.out.println(i);//输出:
19
}}
2.publicclassH{
publicstaticvoidmain(Stringargs[]){
doublesum=0.0;
for(inti=1;i<=100;i++)
sum+=1.0/(double)i;
System.out.println("sum="+sum);
}}//功能:
计算sum=1/1+1/2+1/3+…+1/100
3.publicclassH{
publicstaticvoidmain(Stringargs[]){
inti=1,x=1;
switch(x){