第一道题是构造时没有初始化.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
不明白为什么会有这两种情况,应该怎么区分什么时候构造时,类的变量会默认地初始化,什么时候不会呢???
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、将代码作良好的格式化,以方便阅读。
2、在发帖文本框的上方单击“#”按钮,选择 Java
3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello { // 程序入口
public static void main(String[] args) {
System.out.println("Hello!");
}
}
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. }
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,
int的初始值是0
你知道这两点就明白你的题目区别在哪了