1.指出下列程序运行的结果()
public class Example{
String str = new String("good");
char[ ] ch = { 'a' , 'b' , 'c' };
public static void main(String args[]){
Example ex = new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[ ]){
str = "test ok";
ch[0] = 'g';
}
}
正确答案: B
A:good and abc
B:good and gbc
C:test ok and abc
D:test ok and gbc
解析:直接赋值而不是使用new关键字给字符串初始化,在编译期的时候就将String放入了字符串常量池中;
使用new关键字初始化字符串时,是在推栈区存放变量名和内容;字符串在拼接的过程在运行时,才在堆里创建对象;
一般可以认为可以认为使用"=="比较的是引用,equals比较的是内容。
题二
2.JDK中提供的java、javac、jar等开发工具也是用Java编写的。
A:对
B:错
正确答案: A
除了jre中的JVM不是用java实现的,jdk的开发工具包应该都是用java写的
#### 题三
3.下面程序输出结果为():
public class Demo{
public static void main (String [] args) {
String lx = “LeXin”;
String nb = lx;
lx = “Fenqile”;
System.out.println(nb);
}
}
正确答案: B C
A:程序异常,编译不通过
B:程序编写正常,可正常运行
C:程序输出值为“LeXin”
D:程序输出值为“Fenqile”
解析:
首先将Lx指向“LeXin”的应用赋给了nb,然后Lx又指向了“Fenqile”,
最后输出nb所指向的内容,所以输出“LeXin”。
题四
4.以下关于final关键字说法错误的是()
A:final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B:final修饰的类肯定不能被继承
C:final修饰的方法不能被重载
D:final修饰的变量不允许被再次赋值
正确答案: A C
解析:
1.final修饰变量,则等同于常量
2.final修饰方法中的参数,称为最终参数。
3.final修饰类,则类不能被继承
4.final修饰方法,则方法不能被重写。
5.final 不能修饰抽象类
6.final修饰的方法可以被重载 但不能被重写
题五
5.下面哪种流可以用于字符输入:
A:java.io.inputStream
B:java.io.outputStream
C:java.io.inputStreamReader
D:java.io.outputStreamReader
正确答案: C
解析:A是字节输入流
B是字节输出流
D是字符输出流
题六
6.下列说法正确的是()?
A:我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程
B:一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源
C:synchronized可以解决可见性问题,volatile可以解决原子性问题
D:ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的
正确答案: B D
解析:
A 可以直接调用run方法 但是不会启动线程
volatile与synchronized的区别:
volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.
volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.
volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.
volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.
volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.
题七
7.关于java集合下列说法不正确的有哪些()
A:HashSet 它是线程安全的,不允许存储相同的对象
B:ConcurrentHashMap 它是线程安全的,其中存储的键对象可以重复,值对象不能重复
C:Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用
D:ArrayList线程安全的,允许存放重复对象
正确答案: A B D
解析:
A:HashSet它不是线程安全的,属于Set接口,实现类的特征是无序 不可重复性
B:ConcurrentHashMap 它是线程安全的,其中存储的键对象是不能重复的,值对象是可以重复的
D:ArrayList不是线程安全的,属于List接口,实现类的特征是有序,可重复
题八
8.关于Java的一些概念,下面哪些描述是正确的:( )
A:所有的Java异常和错误的基类都是java.lang.Exception, 包括java.lang.RuntimeException
B:通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行
C:java中所有的数据都是对象
D:Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行
E:Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行
F:Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的
正确答案: B F
解析:
a 所有的错误的基类都是Throwable
c java中的基本数据类型就不是对象
d.垃圾回收器并不总是工作,只有当内存资源告急时,垃圾回收器才会工作;即使垃圾回收器工作,finalize方法也不一定得到执行,
这是由于程序中的其他线程的优先级远远高于执行finalize()函数线程的优先级。
e:低版本的无法运行高版本的