类与对象课后作业

1.查询“你已经创建了多少个对象?

源代码:

 1 public class How {
 2      public static void main(String[] args) {
 3          a1 b1 = new a1();
 4          a1 b2 = new a1();
 5          a1 b3 = new a1();
 6         //我已经创建了3个对象,接下来调用a1类的静态变量查询创建了多少对象
 7          System.out.println("我已经创建的对象个数为: "+a1.value);
 8      }
 9 }
10 class a1 { 
11    public static int value=0; 
12     a1() { 
13        //构造函数,每创建一个实例value就增加1 
14        value=value+1; 
15      }
16 }

结果截图:

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

 

解释:

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

 

2、使用上页幻灯片中定义的类,以下代码输出结果是什么?

 

总结:

1)执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

2)类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

4、请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

代码:

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

结果截图:

 

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

 

 

 

posted @ 2016-11-09 18:22  暮光之城管  阅读(223)  评论(0编辑  收藏  举报