第一套
1.JVM内存不包含如下哪个部分( )
正确答案: D 你的答案: B (错误)
Stacks
PC寄存器
Heap
Heap Frame
java好像只有栈帧 没有堆帧 pc寄存器 就是 程序计数器
程序计数器是一个以线程私有的一块较小的内存空间,用于记录所属线程所执行的字节码的行号指示器;字节码解释器工作时,通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳准、异常处理、线程恢复等基础功能都需要依赖程序计数器来完成
2.java中 String str = "hello world"下列语句错误的是?
正确答案: A B C 你的答案: C (错误)
str+=’ a’
int strlen = str.length
str=100
str=str+100
ABC在java中会报错,D可以正常运行, 所以答案是ABC.
A. ‘a’是字符,’ a’这个是空格和a,必须要用" a"才可以;
B.String有length()方法
C.int 无法直接转成String类型
D.尾部添加字符串”100“
3.下面哪个语句是创建数组的正确语句?( )
正确答案: A B D E 你的答案: A C D (错误)
float f[][] = new float[6][6];
float []f[] = new float[6][6];
float f[][] = new float[][6];
float [][]f = new float[6][6];
float [][]f = new float[6][];
ABDE都可以。也就是说数组命名时名称与[]可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。
数组声明,必须要明确行数,列数随意
第二套
1.设有下面两个赋值语句:
a = Integer.parseInt(“1024”);
b = Integer.valueOf(“1024”).intValue();
下述说法正确的是()
正确答案: D 你的答案: A (错误)
a是整数类型变量,b是整数类对象。
a是整数类对象,b是整数类型变量。
a和b都是整数类对象并且它们的值相等。
a和b都是整数类型变量并且它们的值相等。
intValue()是把Integer对象类型变成int的基础数据类型;
parseInt()是把String 变成int的基础数据类型;
Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)
本题:parseInt得到的是基础数据类型int,valueof得到的是装箱数据类型Integer,然后再通过valueInt转换成int,所以选择D
2.对于abstract声明的类,下面说法正确的是
正确答案: E 你的答案: D (错误)
可以实例化
不可以被继承
子类为abstract
只能被继承
可以被抽象类继承
答案:E
A,抽象类不能实例化,因为有抽象方法未实现
B,可以被继承。派生类可以实现抽象方法
C,子类可以是抽象的,也可以非抽象的
D,只能被继承说法太肯定,不正确
E,可以被抽象类继承,也可以被非抽象类继承
3.以下哪个事件会导致线程销毁?()
正确答案: D 你的答案: C (错误)
调用方法sleep()
调用方法wait()
start()方法的执行结束
run()方法的执行结束
A. 调用sleep()方***让线程进入睡眠状态---睡眠指定的时间后再次执行;
B. 调用wait()方***让线程进入等待状态 ----等待别的线程执行notify()或notifyAll()唤醒后继续执行;
C.调用start()方***让线程进入就绪状态---得到CPU时间就执行线程;
D.run()方法是线程的具体逻辑方法,执行完,线程就结束。
第三套
1.下列代码编译和运行的结果是:()
public class Threads4{
public static void main(String[] args){
new Threads4().go();
}
public void go(){
Runnable r=new Runnable(){
public void run(){
System.out.print("foo");
}
};
Thread t=new Thread(r);
t.start();
}
}
正确答案: C 你的答案: C (正确)
编译错误
抛出运行时异常
输出:foo
代码正常运行,但是无输出
在java多线程中实现多线程的方式有两种①extends Thread ②implements Runnable。这两种情况是我们最常见的,还有一种是由第二种变形而来的直接new Runnable(){},我们都知道java的接口是不可以实例化的,但代码中的new Runnable(){xxx}确是实例化了,为什么? 接口和抽象类不可以实例化是对的,这个是java语法规范来的,**而new Runnable(){}其实不是实例化Runnable接口来的,实际上一种内部类的一种简写** 在这里:
①首先构造了一个”implements Runnable “的无名local内部类(方法内的内部类)
②然后构造了这个无名local内部类的一个实例
③然后用Runnable来表示这个无名local内部类的type(OO多态)。 例如上面这段代码编译后你会看到其实是编译了两个类来的,如下:
其中Text2$1就是无名local内部内类,这个也就很好地解释了为什么在main()方法中new Runnable(){xxx}里面的调用main()方法中的变量的时候要用final关键字来修饰
2.在java7中,下列哪个说法是正确的:
正确答案: D 你的答案: A (错误)
ConcurrentHashMap使用synchronized关键字保证线程安全
HashMap实现了Collection接口
Arrays.asList方法返回java.util.ArrayList对象
SimpleDateFormat对象是线程不安全的
hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全