1、下?字段声明中哪?个在interface主体内是合法的?
A. private final static int answer = 42;
B. public static int answer = 42;
C. final static answer = 42;
D. int answer;
答案:B
接口只能定义常量,常量必须赋初始值,且定义都要为 public static final,假如没有写,那么系统会默认为该变量加上public static final修饰符,正因为会默认修饰,所有在定义时可以省略。 以上默认修饰符也包括对方法的修饰。
2、
在类设计中,类的成员变量要求仅仅能够被同?package下的类访问,请问应该使?下列哪个修饰词 (
)
A. protected
B. public
C. private
D. 不需要任何修饰词
答案D
权限修饰符
自己类中: public protected default private
同包(没有关系的类): public protected default(只在同包下,同时他是默认的,所以可以不加)
父子类(不同包):public protected
所有类(既不是同包,也没有父子类关系):public
3、下列Java代码中的变量a、b、c分别在内存的存储区存放。
class A {
private String a = "aa";
public boolean methodB() {
String b = "bb";
final String c = "cc";
}
}
A. 堆区、堆区、堆区
B. 堆区、栈区、堆区
C. 堆区、栈区、栈区
D. 堆区、堆区、栈区
E. 静态区、栈区、堆区
答案B
直接赋值的String值存放在堆内的常量池内。
a属于类(成员变量)所以在堆中。b、c属于方法(是局部变量),局部变量不属于任何类或者实例,因此它总是保存在其所在方法的栈内存中!
4、(非错题)
以下程序执行的结果是:
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
A、ZYXX
B、ZYXY
C、YXYZ
D、XYZX
答案C
初始化过程: 1. 初始化父类中的静态成员变量和静态代码块 ; 2. 初始化子类中的静态成员变量和静态代码块 ;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法; 4.初始化子类的普通成员变量和代码块,再执行子类的构造方法; (1)初始化父类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y (2)再执行父类的构造方法;输出X (3)
初始化子类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y (4)再执行子类的构造方法;输出Z 所以输出YXYZ
5、尝试编译一下程序会产生怎么样的结果?
public class MyClass {
long var;
public void MyClass(long param) {
var = param;
}//(1)
public static void main(String[] args) {
MyClass a, b;
a = new MyClass();//(2)
b = new MyClass(5);//(3)
}
}
cs分析:编译错误将在(3)出发生,因为该类没有int型的构造方法
代码中 public void MyClass(long param){}方法并非构造方法,因此JVM会提供一个默认的无惨构造方法,因此(2)处不会报错,但是该类不存在一个接收int型的构造方法,(3)处报错