Java试题:
1、设计一个矩形类,计算某一给定矩形的面积。(10分)
2、设有计算阶乘的函数f(n)=n!,试设计一个计算阶乘的方法和相应的类,并利用这个类计算f(5)和f(17)的值。(10分)
3、简述对象间的通信(消息)与实例方法的调用?(10分)
4、定义一个代表学生的类Student,创建该类的3个对象放在一数组中,试将数组的元素依次输出。Student类的属性包括“学号”、“姓名”和“成绩”;方法包括“构造方法”、“获取学号”、“获取姓名”、“获取成绩”。(10分)
5、编程判断当前目录下是否存在文件file1.txt和file2.txt,如果都存在则将file1.txt的内容写到文件file2.txt中去。(10分)
6、简述Applet类的主要方法?(10分)
7、编写一能接收参数的小应用程序,参数值为字符串“新年快乐”,并写出该小应用程序编译执行的过程。(10分)
8、编程计算从10到20的平方值,并将结果保存在一个数组中。(10分)
9、设有计算阶乘的函数f(n)=n!,试设计一个计算阶乘的方法和相应的类,并利用这个类计算f(5)和f(17)的值。(10分)
10、怎么样理解循环语言,并一实例来说明?(10分)
第一,谈谈final, finally, finalize的区别。
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
第四,&和&&的区别。
第五,HashMap和Hashtable的区别。
第六,Collection 和 Collections的区别。
第七,什么时候用assert。
第八,GC是什么? 为什么要有GC?
第九,String s = new String("xyz");创建了几个String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
第十二,sleep() 和 wait() 有什么区别?
第十三,Java有没有goto?
习题1 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
习题2 Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。
静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
习题3 &和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
习题4 HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
习题5 Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
习题6 GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
习题7 String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
习题8 Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
习题9 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
习题10 sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。、
习题11 Java有没有goto?
Goto?java中的保留字,现在没有在java中使用。
习题12 数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
习题13 Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
习题14 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
习题15 error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
习题16 List, Set, Map是否继承自Collection接口?
List,Set是
Map不是
习题17 abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
习题18 abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
习题19 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
习题20 启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
习题21 构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
习题22 是否可以继承String类?
String类是final类故不可以继承。
1.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的 ?
A ArrayList myList=new Object();
B List myList=new ArrayList(); B
C ArrayList myList=new List();
D List myList=new List();
2.paint()方法使用哪种类型的参数?
A Graphics
B Graphics2D
C String
D Color
5.运行下列程序, 会产生什么结果
public class X extends Thread implements Runable{
public void run(){
System.out.println("this is run()");
}
public static void main(String args[])
{
Thread t=new Thread(new X()); A
t.start();
}
}
A 第一行会产生编译错误
B 第六行会产生编译错误
C 第六行会产生运行错误
D 程序会运行和启动
7.容器被重新设置大小后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变?
A CardLayout
B FlowLayout
C BorderLayout C
D GridLayout
8.给出下面代码:
public class Person{
static int arr[] = new int[10];
public static void main(String a[])
{
System.out.println(arr[1]);
}
}
那个语句是正确的?
A 编译时将产生错误;
B 编译时正确,运行时将产生错误;
C 输出零;
D 输出空。
4.哪个布局管理器使用的是组件的最佳尺寸( preferred size)
A FlowLayout
B BorderLayout
C GridLayout
D CardLayout AE
E.GridBagLayout
5.下列哪个方法可用于创建一个可运行的类? AE
A public class X implements Runable{ public void run(){ ......} }
B public class X implements Thread{ public void run(){ ......} }
C public class X implements Thread{ public int run(){ ......} }
D public class X implements Runable{ protected void run(){ ......} }
E.public class X implements Thread{ public void run(){ ......} }
6.下面哪个方法可以在任何时候被任何线程调用? DEF
A notify()
B wait()
C notifyAll()
D sleep()
E.yield()
F.synchronized(this)
7.构造BufferedInputStream的合适参数是哪个? AC
A BufferedInputStream
B BufferedOutputStream
C FileInputStream
D FileOuterStream
E. File
8.下列说法正确的是 BC
A java.lang.Clonable是类
B java.lang.Runnable是接口
C Double对象在java.lang包中
D Double a=1.0是正确的java语句
12.如果下列的方法能够正常运行,在控制台上将显示什么? ACD
public void example(){
try{
unsafe();
System.out.println("Test1");
}
catch(SafeException e)
{System.out.println("Test 2");}
finally{System.out.println("Test 3");}
System.out.println("Test 4");
}
A Test 1
B Test 2
C Test 3
D Test 4
13.下列哪些情况可以终止当前线程的运行?ABD
A 抛出一个例外时。
B 当该线程调用sleep()方法时。
C 当创建一个新线程时。
D 当一个优先级高的线程进入就绪状态时。
21、当浏览器返回到新URL的包含applet 的页面时调用以下哪个函数?
A、 init()
B、start()
C、stop()
D、destroy()
答:B
22、以下哪个方法用于定义线程的执行体?
A、 start()
B、init()
C、run()
D、main()
E、synchronized()
答:C
33、当Frame改变大小时,放在其中的按钮大小不变,则使用如下哪个layout?
A、 FlowLayout(位置变)
B、CardLayout
C、North and South of BorderLayout
D、East and West of BorderLayout
E、GridLayout
答:D
34、当Frame改变大小时,放在其中的按钮大小不变,则使用如下哪个layout?
A、 FlowLayout
B、CardLayout
C、North and South of BorderLayout
D、East and West of BorderLayout
E、GridLayout(位置不变化)
答:A
35、如下哪个方法可以从WindowEvent获取事件源?
A、 getFrame()
B、getID()
C、getSource()
D、getWindow()
答:C,D
36、以下哪个有关事件监听器的语句是正确的?
A、 Multiple listeners can be attached to one component.
B、Only one listener can be attached to one component.
C、One listener can receive and process the events from multiple components.
D、One listener can receive and process the events from only one component.
答:A,C
37、监听器接口的方法返回值是什么?
A、 int
B、String
C、void
D、Object
E、AWTEvent
答:C
38、下面哪个事件监听器在Java中有事件适配器?
A、 MouseListener
B、KeyListener
C、ActionListener
D、ItemListener
E、WindowListener
答:A,B,E
39、下面哪个方法与applet的显示无关?
A、 update()
B、draw()
C、repaint()
D、paint()
答:B
40、已知如下说明:
TextArea ta = new TextArea ("Hello", 5, 5);
请问哪个语句是正确的?
A、 The maximum number of characters in a line is 5.
B、The displayed height is 5 lines otherwise constrain.
C、The displayed string can use multiple fonts.
D、The displayed strings are editable.
答:B,D
41、请问如下哪个方法可以将MenuBar加入Frame中?
A、 setMenu()
B、setMenuBar()
C、add()
D、addMenuBar()
答:B
42、下面哪个不是Java中的容器?
A、 ScrollPane
B、Canvas
C、Scrollbar
D、Applet
E、Dialog
答:B,C
43、下面哪个方法可用于定义新线程类?
A、 implement the Runnable interface
B、add a run() method in the class
C、create an instance of Thread
D、extend the Thread class
答:A,D
44、下面哪个stream是node流?
A、 FileInputStream
B、BufferedInputStream
C、PushbackInputStream
D、ByteArrayInputStream
答:A,D
45、哪个类可用于处理Unicode?
A、 InputStreamReader
B、BufferedReader
C、Writer
D、PipedInputStream
答:A,B
16. Which keyword should be used to enable interaction with the lock of an
object? The flag allows exclusive access to that object.
A. transient
B. synchronized
C. serialize
D. static
翻译
下面的哪些关键字通常用来对对象的加锁,该标记使得对对象的访问是排他的
答案 B
解析 由于java是多线程的语言,多个线程可以”同时”访问同一数据区,而在处理某些数据时不希望其它的线程修改那些数据的值或者某些操作是不可打断的,要做到这个,可以使用synchronized关键字声明这一点。
19. Given the following expression about TextField which use a proportional
pitch font.
TextField t = new TextField("they are good",40);
Which statement is true?
A. The displayed string can use multiple fonts.
B. The maximum number of characters in a line will be 40.
C. The displayed width is exactly 40 characters.
D. The user can edit the characters.
翻译
给出以下关于一个使用适当的字符间距的字体的TextField的表达式。
…
哪些叙述是对的?
A. 被显示的字符串可以使用多种字体。
B. 一行中最大的字符数是40
C. 显示的宽度正好是40个字符宽。
D. 用户可以编辑字符。
答案 D
解析 对于TextField的该种形式的构造函数来说,前一个参数是文本域中初始的字符串的显示值,而后一个是推荐的显示宽度,以列数表示,在构造文本域的时候会将这个大小设置为最佳大小,如果容器的限制使得文本域不能显示这么多也没有办法,一般来说是比这个大小大的,而且即使宽度很小,你也可以在文本域的一行中输入很长的字符串,只有你不使用回车,在超过显示宽度后文本域会自动出现水平滚动条(没有被设置为关闭,缺省是不关闭的),而文本域的缺省编辑方式是可编辑的,一个文本域只能使用一种字体,这个字体可以在运行的过程中动态的改变,但是文本域中的所有字符串都将使用这个字体显示。
24、public void test() {
try { oneMethod();
System.out.println("condition 1");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("condition 2");
} catch(Exception e) {
System.out.println("condition 3");
} finally {
System.out.println("finally");
}
} Which will display if oneMethod run normally?
A. condition 1
B. condition 2
C. condition 3
D. finally
(ad)
题目:在oneMethod()方法运行正常的情况下将显示什么?
如果try块中的语句在执行时发生异常,则执行从该处中断而进入catch块,根据异常的类型进行匹配,最前面的优先进行匹配比较,只要该异常是catch中指定的异常的子类就匹配成功进而执行相应的catch中的内容,而finally块中的内容无论是否发生异常都将被执行。
58、Which statements about thread are true?
A. Once a thread is created, it can star running immediately.
B. To use the start() method makes a thread runnable, but it does not necessarily start immediately.
C. When a thread stops running because of pre-emptive, it is placed at the front end of the runnable queue.
D. A thread may cease to be ready for a variety of reasons.
(bd)
题目:有关线程的哪些叙述是对的。
A. 一旦一个线程被创建,它就立即开始运行。
B. 使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。
C. 当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。
D. 一个线程可能因为不同的原因停止(cease)并进入就绪状态。
一个新创建的线程并不是自动的开始运行的,必须调用它的start()方法使之将线程放入可运行态(runnable state),这只是意味着该线程可为JVM的线程调度程序调度而不是意味着它可以立即运行。线程的调度是抢先式的,而不是分时间片式的。具有比当前运行线程高优先级的线程可以使当前线程停止运行而进入就绪状态,不同优先级的线程间是抢先式的,而同级线程间是轮转式的。一个线程停止运行可以是因为不同原因,可能是因为更高优先级线程的抢占,也可能是因为调用sleep()方法,而即使是因为抢先而停止也不一定就进入可运行队列的前面,因为同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。
59、The method resume() is responsible for resuming which thread's execution?
A. The thread which is stopped by calling method stop()
B. The thread which is stopped by calling method sleep()
C. The thread which is stopped by calling method wait()
D. The thread which is stopped by calling method suspend()
(d)
题目:方法resume()负责恢复哪些线程的执行。
A. 通过调用stop()方法而停止的线程。
B. 通过调用sleep()方法而停止运行的线程。
C. 通过调用wait()方法而停止运行的线程。
D. 通过调用suspend()方法而停止运行的线程。
Thread的API文档中的说明是该方法恢复被挂起的(suspended)线程。该方法首先调用该线程的无参的checkAccess() 方法,这可能在当前线程上抛出SecurityException 异常,如果该线程是活着的(alive)但是被挂起(suspend),它被恢复并继续它的执行进程。
60、Given the following code:
1) public class Test {
2} int m, n;
3} public Test() {}
4} public Test(int a) { m=a; }
5} public static void main(String arg[]) {
6} Test t1,t2;
7} int j,k;
8} j=0; k=0;
9} t1=new Test();
10} t2=new Test(j,k);
11} }
12} }
Which line would cause one error during compilation?
A. line 3
B. line 5
C. line 6
D. line 10
(d)
题目:给出下面的代码:
…
在编译时哪行将导致一个错误。
第10行的声明调用一个带两个参数的Test的构造方法,而该类没有这样的构造方法。
51、Which is not a method of the class InputStream?
A. int read(byte[])
B. void flush()
C. void close()
D. int available()
(b)
题目:下面哪个不是InputStream类中的方法
这个题目没有什么好说的,要求熟悉java API中的一些基本类,题目中的InputStream是所有输入流的父类,所有要很熟悉,参看JDK的API文档。方法void flush()是缓冲输出流的基本方法,作用是强制将流缓冲区中的当前内容强制输出。
52、Which class is not subclass of FilterInputStream?
A. DataInputStream
B. BufferedInputStream
C. PushbackInputStream
D. FileInputStream
(d)
题目:
哪个不是FilterInputStream的子类。
此题也是要求熟悉API基础类。Java基础API中的FilterInputStream 的已知子类有:BufferedInputStream, CheckedInputStream, CipherInputStream, DataInputStream, DigestInputStream, InflaterInputStream, LineNumberInputStream, ProgressMonitorInputStream, PushbackInputStream 。
53、Which classes can be used as the argument of the constructor of the class
FileInputStream?
A. InputStream
B. File
C. FileOutputStream
D. String
(bd)
题目:哪些类可以作为FileInputStream类的构造方法的参数。
此题同样是要求熟悉基础API,FileInputStream类的构造方法有三个,可接受的参数分别是:File、FileDescriptor、String类的一个对象。
54、Which classes can be used as the argument of the constructor of the class FilterInputStream?
A. FilterOutputStream
B. File
C. InputStream
D. RandomAccessFile
(c)
题目:哪些类可以作为FilterInputStream类的构造方法的参数。
FilterInputStream的构造方法只有一个,其参数是一个InputStream对象。 55、Given the following code fragment:
1) switch(m)
2) { case 0: System.out.println("case 0");
3) case 1: System.out.println("case 1"); break;
4) case 2:
5) default: System.out.println("default");
6) }
Which value of m would cause "default" to be the output?
A. 0
B. 1
C. 2
D. 3
(cd)
题目:给出下面的代码片断:
…
m为哪些值将导致"default"输出。
此题考察switch语句的用法,switch的判断的条件必须是一个int型值,也可以是byte、short、char型的值,case中需要注意的是一个case后面一般要接一个break语句才能结束判断,否则将继续执行其它case而不进行任何判断,如果没有任何值符合case列出的判断,则执行default的语句,default是可选的,可以没有,如果没有default而又没有任何值匹配case中列出的值则switch不执行任何语句
49、Given the following expression about List.
List l = new List(6,true);
Which statements are ture?
A. The visible rows of the list is 6 unless otherwise constrained.
B. The maximum number of characters in a line will be 6.
C. The list allows users to make multiple selections
D. The list can be selected only one item.
(ac)
题目:给出下面有关List的表达式:
…
哪些叙述是对的。
A. 在没有其它的约束的条件下该列表将有6行可见。
B. 一行的最大字符数是6
C. 列表将允许用户多选。
D. 列表只能有一项被选中。
List组件的该构造方法的第一个参数的意思是它的初始显式行数,如果该值为0则显示4行,第二个参数是指定该组件是否可以多选,如果值为true则是可以多选,如果不指定则缺省是不能多选。
50、Given the following code:
class Person {
String name,department;
public void printValue(){
System.out.println("name is "+name);
System.out.println("department is "+department);
}
}
public class Teacher extends Person {
int salary;
public void printValue(){
// doing the same as in the parent method printValue()
// including print the value of name and department.
System.out.println("salary is "+salary);
}
}
Which expression can be added at the "doing the same as..." part of the method printValue()?
A. printValue();
B. this.printValue();
C. person.printValue();
D. super.printValue().
(d)
题目:给出下面的代码:
…
下面的哪些表达式可以加入printValue()方法的"doing the same as..."部分。
子类可以重写父类的方法,在子类的对应方法或其它方法中要调用被重写的方法需要在该方法前面加上”super.”进行调用,如果调用的是没有被重写的方法,则不需要加上super.进行调用,而直接写方法就可以。这里要指出的是java支持方法的递归调用,因此答案a和b在语法上是没有错误的,但是不符合题目代码中说明处的要求:即做和父类的方法中相同的事情??打印名字和部门,严格来说也可以选a和b。 转
44、A Button is positioned in a Frame. Only height of the Button is affected by the Frame while the width is not. Which layout manager should be used?
A. FlowLayout
B. CardLayout
C. North and South of BorderLayout
D. East and West of BorderLayout
E. GridLayout
(d)
题目:一个按钮放在一个框架中,在框架改变时只影响按钮的高度而宽度不受影响,应该使用哪个布局管理器?
这个还是布局管理器的问题,流布局管理器(FlowLayout)将根据框架的大小随时调整它里面的组件的大小,包括高度和宽度,这个管理器不会约束组件的大小,而是允许他们获得自己的最佳大小,一行满了以后将在下一行放置组件;卡片管理器(CardLayout)一次显式一个加入的组件(根据加入时的关键字);网格管理器(GridLayout)将容器划分为固定的网格,容器大小的改变将影响所有组件的大小,每个组件的大小都会同等地变化;边界管理器(BorderLayout)将容器划分为五个区域,分为东南西北和中间,东西区域的宽度为该区域里面组件的最佳宽度,高度为容器的高度减去南北区域的高度,这是一个可能变化的值,而南北区域的宽度为容器的整个宽度,高度为组件的最佳高度,中间区域的高度为容器的高度减去南北区域的高度,宽度为容器的宽度减去东西区域的宽度。
45、Given the following code:
1) class Parent {
2) private String name;
3) public Parent(){}
4) }
5) public class Child extends Parent {
6) private String department;
7) public Child() {}
8) public String getValue(){ return name; }
9) public static void main(String arg[]) {
10) Parent p = new Parent();
11) }
12) }
Which line will cause error?
A. line 3
B. line 6
C. line 7
D. line 8
E. line 10
(d)
题目:给出下面的代码:
…
哪些行将导致错误。
第8行的getValue()试图访问父类的私有变量,错误,参看前面有关变量类型及其作用域的叙述
46、The variable "result" is boolean. Which expressions are legal?
A. result = true;
B. if ( result ) { // do something... }
C. if ( result!= 0 ) { // so something... }
D. result = 1
(ab)
题目:变量"result"是一个boolean型的值,下面的哪些表达式是合法的。 Java的boolean不同于c或者c++中的布尔值,在java中boolean值就是boolean值,不能将其它类型的值当作boolean处理。
47、Class Teacher and Student are subclass of class Person.
Person p;
Teacher t;
Student s;
p, t and s are all non-null.
if(t instanceof Person) { s = (Student)t; }
What is the result of this sentence?
A. It will construct a Student object.
B. The expression is legal.
C. It is illegal at compilation.
D. It is legal at compilation but possible illegal at runtime.
(c)
题目:类Teacher和Student都是类Person的子类
…
p,t和s都是非空值
…
这个语句导致的结果是什么
A. 将构造一个Student对象。
B. 表达式合法。
C. 编译时非法。
D. 编译时合法而在运行时可能非法。
instanceof操作符的作用是判断一个变量是否是右操作数指出的类的一个对象,由于java语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象,这时就可以使用instanceof了。当左操作数是右操作数指出的类的实例或者是子类的实例时都返回真,如果是将一个子类的实例赋值给一个父类的变量,用instanceof判断该变量是否是子类的一个实例时也将返回真。此题中的if语句的判断没有问题,而且将返回真,但是后面的类型转换是非法的,因为t是一个Teacher对象,它不能被强制转换为一个Student对象,即使这两个类有共同的父类。如果是将t转换为一个Person对象则可以,而且不需要强制转换。这个错误在编译时就可以发现,因此编译不能通过。
四、简答
1、sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
2、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
3、启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
4、是否可以继承String类?
String类是final类故不可以继承。
5、类成员有_____种可访问形式?
答:this.;new Class().Method;