Lab02

Question 01

  1. m未被初始化;

  2. m需要被初始化才能使用,x成员变量,具有默认值,m局部变量没有默认值;

Question 02

**d.**类有两个构造方法,类中已经定义了两个有参构造方法,此时无参构造方法需要显示定义。

Question 03

输出
  1. initialize A1
  2. initialize A2
  3. initialize A3
  4. initialize A4
  5. initialize A5
  6. initialize A6
  7. copy from A6
  8. initialize B1
  9. initialize A8
  10. main begins
  11. initialize A9
  12. initialize A6
  13. copy from A6
  14. initialize B2
  15. initialize A8
  16. main ends
分析
  • 静态变量和静态代码块按声明顺序初始化;
  • 实例变量在构造函数之前初始化;
  • main方法中的局部变量按顺序初始化;

Question 04

  1. 可以,因为每次创建B类型对象都是先输出的initialize A6copy from A6再输出的initialize A8
  2. 可以,每次创建B类型对象都是先输出的initialize A6再输出copy from A6

Question 05

静态属性初始化方式
  • 在属性定义处显示初始化(如本例中的a1);
  • 在静态代码块中初始化(如本例中的a4);
静态属性初始化顺序
  • 按照声明的顺序初始化;

Question 06

  1. 不可以说明,在static A a1 = new A(1);static A a1 = new A(1);后添加;
1
2
3
static {
System.out.println("Class A is loaded");
}
    • 带有static关键字的方法、变量、代码块:其他带有static关键字的方法、变量、代码块;
    • 不带有static关键字的方法、变量、代码块:都可以 ;

Question 07

不可以

Question 08

  • 其构造函数被private修饰,外部类无法直接通过new来创建;
  • static修饰uniqueInstance在内存中只有一份;
  • final修饰初始化之后uniqueInstance的指向不变;
  • 在该类被加载的时候创建;

Question 09

1
2
3
4
5
6
public class test {
public static void main(String[] args) {
Singleton SingletonInstance = Singleton.getInstance();
SingletonInstance.foo();
}
}

Question 10

相关代码见\solution\Question10

Question 11

相关代码见\solution\Question11