第一道题是构造时没有初始化.Question 86
Given: 
1. public class Boxer1 { 
2. Integer i; 
3. intx; 
4. public Boxer1(int y) { 
5.x=i+y; 
6. System.out.println(x); 
7. } 
8. public static void main(String[] args) { 
9. new Boxer1(new Integer(4)); 
10. } 
11. } 
What is the result? 
A. The value !°4!± is printed at the command line
B. Compilation fails because of an error in line 
5. 
C. Compilation fails because of an error in line 9. 
D. A NullPointerException occurs at runtime. 
E. A NumberFormatException occurs at runtime. 
F. An IllegalStateException occurs at runtime. 
Answer: D 
第二道题却是构造时有初始化的:
Question 151
Click the Exhibit button. 
1. public class SimpleCalc { 
2. public int value; 
3. public void calculate() { value += 7; } 
4. } 
And: 
1. public class MultiCalc extends SimpleCalc {
2. public void calculate() { value -= 3; } 
3. public void calculate(int multiplier) { 
4. calculate(); 
5. super.calculate(); 
6. value *=multiplier; 
7. } 
8. public static void main(String[] args) { 
9. MultiCalc calculator = new MultiCalc(); 
10. calculator.calculate(2); 
11. System.out.println("Value is: "+ calculator.value)
12. } 
13. } 
What is the result? 
A. Value is: 8 
B. Compilation fails. 
C. Valueis: 12 
D. Value is: -12 
E. The code runs with no output. 
F. An exception is thrown at runtime. 
Answer: A 
不明白为什么会有这两种情况,应该怎么区分什么时候构造时,类的变量会默认地初始化,什么时候不会呢???

解决方案 »

  1.   

    楼主请主排下版。。这样,根本就看不清。。而且intx都出来了。
      

  2.   

    楼主我教你怎么贴代码:
    1、将代码作良好的格式化,以方便阅读。
    2、在发帖文本框的上方单击“#”按钮,选择 Java
    3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello {    // 程序入口
        public static void main(String[] args) {
            System.out.println("Hello!");
        }
    }
      

  3.   

    因为第一题中,Integer i;是一个对象,默认是null,第二题是 int value,默认值是0两者不一样
      

  4.   

    Question 86:
    2. Integer i;   //i是一个对象,默认为nullo
    3. int x;       //x是一个整型变量,默认值为0
    4. public Boxer1(int y) { 
    5.    x=i+y;           //x=null+整型变量,怎么加啊,抛出异常(null)
    6.    System.out.println(x);    //上一句发生异常,此句为不可达语句
    7. } 
      

  5.   

    Question 151 
    Click the Exhibit button. 
    1. public class SimpleCalc { 
    2.    public int value; 
    3.    public void calculate() { value += 7; } 
    4. } And: 
    1. public class MultiCalc extends SimpleCalc { 
    2.   public void calculate() { value -= 3; } 
    3.   public void calculate(int multiplier) { 
    4.     calculate(); 
    5.     super.calculate(); 
    6.     value *=multiplier; 
    7.   } 
    8.   public static void main(String[] args) { 
    9.     MultiCalc calculator = new MultiCalc(); 
    10.     calculator.calculate(2); 
    11.     System.out.println("Value is: "+ calculator.value) 
    12.   } 
    13. } 
    还要排版。乱七八糟的结果为8!具体步骤:
    1、MultiCalc calculator = new MultiCalc();  先调用父类SimpleCalc的构造函数,然后再调用MultiCalc的构造函数,所以,value初始为0
    2、 calculator.calculate(2); 
        3.   public void calculate(int multiplier) { 
        4.     calculate(); 
        5.     super.calculate(); 
        6.     value *=multiplier; 
        7.   } 
        首先调用第4行calculate(); 因为子类覆盖了父类的同名,所以该方法调用的是calculator.calculate
        (),value -= 3,此时value值为0-3=-3
    3、然后在调用父类super.calculate(); 
       public void calculate() { value += 7; } ,此时value值为-3+7=4,
    4、调用第5行value *=multiplier; 
       此时value值为4*2=8,
      

  6.   

    Intger的初始值是null
    int的初始值是0
    你知道这两点就明白你的题目区别在哪了