码迷,mamicode.com
首页 > 编程语言 > 详细

Java类与对象——几个课堂例子的总结及作业

时间:2015-10-17 23:47:29      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:

作业:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

源代码:

 1 import java.util.Scanner;
 2 
 3 class sss123 {
 4     //将用来计次的变量times给初始值为0
 5     public static int times=0;
 6     sss123() {
 7         //构造函数,每创建一个实例times就增加1
 8         times=times+1;
 9     }
10 }
11 
12 public class StaticValue {
13     public static void main(String[] args) {
14         sss123 s1 = new sss123();
15         sss123 s2 = new sss123();
16         sss123 s3 = new sss123();
17         //可以看到当前我们已经手动创建了3个对象,接下来调用sss123类的静态变量查询创建了多少对象
18         System.out.println("当前创建的对象个数为 "+sss123.times);
19     }
20 }
21 
22 //public class StaticValue {
23 //    public static void main(String[] args) {
24 //        String YorN=new String();
25 //        YorN="Y";
26 //        int i=0;
27 //        Scanner sc = new Scanner(System.in);
28 //        while(YorN.equals("Y"))
29 //        {
30 //            System.out.println("正在创建一个对象");
31 //            //我希望每循环一次就创建一个对象,但是不知道怎么表达
32 //            sss123 s = new sss123();
33 //            System.out.println("创建对象完成");
34 //            System.out.println("当前共创建对象个数为 "+sss123.times);
35 //            System.out.println("是否要继续创建对象?是(Y)/否(N)");
36 //            YorN=sc.nextLine();
37 //        }
38 //    }
39 //}

课堂例子:
1、对TestStaticInitializeBlock.java的总结:

源代码:

 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 }


运行结果:技术分享

由此可见,静态初始化块的执行顺序为:先执行父类的静态初始化块,再执行子类的静态初始化块,然后在执行父类的普通初始化块和构造函数,最后执行子类的普通初始化块和构造函数

Java字段初始化的规律:先执行静态初始化快,再执行普通初始化快,在执行构造函数,再执行字段的初始值。 

技术分享

这个错的地方在于构造函数中要求传入一个整形变量,但是在主函数中使用的时候并没有传入整形变量,导致出错

技术分享技术分享

Java类与对象——几个课堂例子的总结及作业

标签:

原文地址:http://www.cnblogs.com/yychnbt/p/4888573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!