作业:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
源代码:
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字段初始化的规律:先执行静态初始化快,再执行普通初始化快,在执行构造函数,再执行字段的初始值。
这个错的地方在于构造函数中要求传入一个整形变量,但是在主函数中使用的时候并没有传入整形变量,导致出错
时间: 2024-10-26 00:50:15