1.D
2.A
private是私有变量,只能用于当前类中,题目中的main方法也位于当前类,所以可以正确输出
3.ACD
Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。
最重要的是,Java关键字 不能当作Java标识符。
4.C
效率:StringString(大姐,出生于JDK1.0时代) 不可变字符序列 <StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列 。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized 修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上。
5.AD
内部类其实和类的属性没什么区别,只是在声明的时候必须是Outer.Inner a,
就像int a 一样,至于静态内部类和非静态内部类new的时候有点区别,
Outer.Inner a=new Outer().new Inner()(非静态,先有Outer对象才能有属性)
Outer.Inner a=new Outer.Inner()要把Outer.Inner看成一部分,就像类变量一样
6.A
第一次String a="1234"时,会在常量池中创建一个常量1234,String b=1234时,常量池中已经有了该常量,
所以直接取,a和b的地址一样,所以地址值相等;String c = newString("1234")重新new了对象,
在堆内存中开辟了新的空间,所以地址值不想等,而equals方法比较的是值是否相等
7.A
join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。
也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。
8.B
复制的效率System.arraycopy>clone>Arrays.copyOf>for循环,这个有兴趣自己测试一下就知道了。这里面在System类源码中给出了arraycopy的方法,是native方法,也就是本地方法,肯定是最快的。而Arrays.copyOf(注意是Arrays类,不是Array)的实现,在源码中是调用System.copyOf的,多了一个步骤,肯定就不是最快的。
9.B
类的加载包括:加载,验证,准备,解析,初始化。
选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。
选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
选项C:这个会调用。可以用反射试验。
选项D:类方法解析发生在解析过程。
10.C
A 省略构造函数,编译器会自动生成。
D 构造函数可以重载
B 方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。