一 JVM
1 下面给出的Java中ClassLoader中的描述,哪些描述是正确的?
A ClassLoader没有层次关系
B 所有类中的ClassLoader都是AppClassLoader
C 通过Class.forName(String className),能够动态加载一个类
D 不同的ClassLoader加载同一个Class文件,所得的类是相同的
参考答案:C
解析:
A ClassLoader是有层次关系的
B ClassLoader不止一种
D 不同的类加载器分别创建的同一个类的字节码数据属于完全不同的对象,没有任何关联
2 JVM使用哪种字符表示?
A ASCII characters
B Unicode characters
C Cp1252
D UTF-8
参考答案:B
解析:
在Java中字符只以一种形式存在,那就是Unicode(不选择任意特定的编码,直接使用它们的字符集中的编号,这是统一的唯一方法)
3 下列程序输出的结果为?
import java.util.*;
public class Test{
public static void main(String [] args){
int j = 0;
for ( int i = 0 ; i<100 ; i++) {
j=j++;
}
System.out.println(j);
}
}
A 0
B 99
C 100
D 101
参考答案:A
解析:
Java用了中间缓存变量的机制 j = j++ 相当于:
temp = j;
j = j + 1;
j = temp;
所以最终结果还是j的初始值 0
4 什么时候用assert?
参考答案:可以在预计正常情况下不会达到的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在私有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
5 下列程序的输出结果是:
import java.util.*
public class Test{
public static void main (String [ ] args){
boolean b = true?false:true == true ?false:true;
System.out.println(b);
}
}
A true
B false
C null
D 以上答案都不对
参考答案: B
解析:
三目运算符是有右结合性的:
boolean b = true?false: ((true == true) ?false:true);
6 谈谈final finally finalize的区别?
1 final:
如果一个类被声明为final,意味着这个类不能够被继承;
如果一个方法声明为fianl,意味着这个方法不能被重写;
如果一个变量被说明为fianl.意味着这个变量初始化后不能够被修改。
2 finally
在异常处理时提供finally快来执行任何操作。如果抛出一个异常,那么相匹配的catch
字句就会被执行,然后控制就会进入finally快。
3 finalize
finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
7 什么是反射?其他语言有这种特点吗?
参考答案:java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,
无需组件之间进行连接。反射运行在编写与运行时,是程序代码能够接入装载到JVM中的类的内部信息,
而不是源代码中选定的类协作的代码中。
没有