03-类与对象 课程作业02 验证课件上的代码,并将所有的动手动脑或要求发表博客作业部分整理成一篇博客

 1 public class InitializeBlockClass 
 2 {
 3     {
 4         field=200;
 5     }
 6     public int field = 100;
 7     public InitializeBlockClass(int value)
 8     {
 9         this.field=value;
10     }
11     
12     public InitializeBlockClass()
13     {
14             
15     }
16     
17     public static void main(String[] args)
18     {
19         InitializeBlockClass obj=new InitializeBlockClass();
20         System.out.println(obj.field);
21         
22         obj=new InitializeBlockClass(300);
23         System.out.println(obj.field);
24     }
25 }

1、Java 初始化字段方式和顺序:

  1. 类加载时直接初始化静态字段;

  2. 类加载时调用静态方法初始化静态字段;

  3. 实例化对象时,在调用构造函数之前代码块中初始化字段;

  4. 实例化对象时,在调用构造函数之时初始化字段;

 

 

2、如何在静态方法中访问类的实例成员

 1 public class Test 
 2 {
 3     int a=1;
 4     static int b=2;
 5     
 6     public static void main(String[] args)
 7     {
 8         System.out.println("实例变量a = "+new Test().a);
 9         System.out.println("静态变量b = "+b);
10     }
11         
12 }

 

 

3、以下代码为何无法通过编译?哪儿出错了?

如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

4、

 1 class Root
 2 {
 3     static{
 4         System.out.println("Root的静态初始化块");
 5     }
 6     {
 7         System.out.println("Root的普通初始化块");
 8     }
 9     public Root()
10     {
11         System.out.println("Root的无参数的构造器");
12     }
13 }
14 class Mid extends Root
15 {
16     static{
17         System.out.println("Mid的静态初始化块");
18     }
19     {
20         System.out.println("Mid的普通初始化块");
21     }
22     public Mid()
23     {
24         System.out.println("Mid的无参数的构造器");
25     }
26     public Mid(String msg)
27     {
28         //通过this调用同一类中重载的构造器
29         this();
30         System.out.println("Mid的带参数构造器,其参数值:" + msg);
31     }
32 }
33 class Leaf extends Mid
34 {
35     static{
36         System.out.println("Leaf的静态初始化块");
37     }
38     {
39         System.out.println("Leaf的普通初始化块");
40     }    
41     public Leaf()
42     {
43         //通过super调用父类中有一个字符串参数的构造器
44         super("Java初始化顺序演示");
45         System.out.println("执行Leaf的构造器");
46     }
47 
48 }
49 
50 public class TestStaticInitializeBlock
51 {
52     public static void main(String[] args) 
53     {
54         new Leaf();
55         
56 
57     }
58 }

静态初始化块只执行一次, 创建子类型的对象时,也会导致父类型的静态初始化块的执行。

 

posted @ 2017-10-20 10:46  野生小码农  阅读(116)  评论(0编辑  收藏  举报