1.以下哪个方法用于定义线程的执行体?
A.start()
B.init()
C.run()
D.synchronized()
2.下面叙述错误的是 ( )
A.一个类可以有多个构造方法
B.最终类不能派生子类,最终方法不能被覆盖
C.如果一个类中没有定义构造方法,则Java在生成这个类的实例时不会调用构造方法。
D.数组一旦创建之后,就不能再改变其长度
3.构造方法用于创建类的实例对象,构造方法名应与类名相同,返回类型为void。
A.正确
B.错误
4.以下程序运行的结果为 ( )
public class Example extends Thread{
@Override
public void run(){
try {
Thread.sleep(1000);
} catch (InterruptedException e){
e.printStackTrace();
}
System. out .print( "run" );
}
public static void main(String[] args){
Example example= new Example();
example.run();
System. out .print( "main" );
}
}
5.我们在程序中经常使用“System.out.println()”来输出信息,语句中的System是包名,out是类名,println是方法名。
A.对
B.错
6.列关于异常处理的描述中,错误的是()。
A.程序运行时异常由Java虚拟机自动进行处理
B.使用try-catch-finally语句捕获异常
C.可使用throw语句抛出异常
D.捕获到的异常只能在当前方法中处理,不能在其他方法中处理
7.Which statement is true for the class java.util.ArrayList?
A.The elements in the collection are ordered.
B.The collection is guaranteed to be immutable.
C.The elements in the collection are guaranteed to be unique.
D.The elements in the collection are accessed using a unique key.
E.The elements in the collections are guaranteed to be synchronized.
8.下列叙述中,错误的是( )
A.File类能够存储文件属性
B.File类能够读写文件
C.File类能够建立文件
D.File类能够获取文件目录信息
9.给出下面的代码段:
public class Base{
int w, x, y ,z;
public Base(int a,int b)
{
x=a; y=b;
}
public Base(int a, int b, int c, int d)
{
// assignment x=a, y=b
w=d;z=c;
}}
在代码说明// assignment x=a, y=b处写入如下哪几个代码是正确的?()
A.Base(a,b);
B.x=a, y=b;
C.x=a; y=b;
D.this(a,b);
10.以下哪种方式实现的单例是线程安全的
A.枚举
B.静态内部类
C.双检锁模式
D.饿汉式
(1)C
run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。
而start()的作用是启动相应的线程。启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。
(2)本题选C
A.一个类可以有多个构造方法,实际上就是方法的重载,正确
B.用final修饰的类不能被继承,方法不能被覆盖,正确
C.如果没有构造方法,编译器会自动添加一个空参构造方法,错误
D.由源码可知,数组内部采用字符数组存储,该字符数组用final修饰,长度一旦确定不可再变,正确
(3)错
构造方法,方法名与类名相同,没有返回值,也不用书写void,分为无参(默认)、有参构造方法。
(4)run main
因为Example的run方法里面休眠了100ms,在当今电脑计算性能过剩的时代,如果是多线程启动,main方法肯定会打印出了main。
为啥是runmain而不是mainrun呢?
因为启动线程是调用start方法。
把线程的run方法当普通方法,就直接用实例.run()执行就好了。
没有看到start。所以是普通方法调用。
(5)错
System是java.lang中的一个类,out是System内的一个成员变量,这个变量是一个java.io.PrintStream类的对象,println呢就是一个方法了
(6)正确答案: D
编译时异常必须显示处理,运行时异常交给虚拟机。
运行时异常可以不处理。当出现这样的异常时,总是由虚拟机接管。比如我们从来没有人去处理过Null Pointer Exception异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往不对它处理罢了。也就是说,如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
(7)A
Serializable, Cloneable , Iterable , Collection , List , RandomAccess List接口是有序的,通常允许重复,因此可以确定A对,C错;ArrayList是实现List 接口的大小可变数组,所以B错;D是Map的特性,所以D错;查看手册: Note that this implementation is not synchronized. ArrayList的实现是不是线程同步的,所以E错。
(8)B
(9)CD
(10)ABCD都是线程安全的,懒汉式如果加了synchronized也是线程安全的