当前位置 博文首页 > 墨辰柒的博客:错题集01

    墨辰柒的博客:错题集01

    作者:[db:作者] 时间:2021-08-02 21:38

    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)
    	}
    }
    

    分析:编译错误将在(3)出发生,因为该类没有int型的构造方法    
    代码中 public void MyClass(long param){}方法并非构造方法,因此JVM会提供一个默认的无惨构造方法,因此(2)处不会报错,但是该类不存在一个接收int型的构造方法,(3)处报错

    cs
    下一篇:没有了