动手动脑及课后作业03
1.动手动脑一
答:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
2.课后试验一
运行结果:
初始化规律:按照顺序初始化,如果有多个方法对字段初始化,将按照最后一次初始化输出。
3.动手动脑二:请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
结果:
静态初始化块的执行顺序:1.静态初始化块只执行一次。 2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。
4.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)? 请编写代码验证你的想法。
代码:
package demo; //2016.10.20 胡建峰 //静态方法中引用实例数据 public class Staticnum { public static void main(String[] args) { A.output(); } } class A { int x = 1;//实例数据 static int y = 0;//静态数据 int getx() { return x; } static void output() { System.out.println("实例数据x=" + new A().x);//类的实例化后访问实例数据 System.out.println("实例数据x=" + new A().getx());//类的实例化后访问实例方法 System.out.println("静态数据y=" + y);//直接访问静态数据 } }
运行结果:
5.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
代码:
package demo; //2016.10.20 胡建峰 //查询创造对象数 public class Newnum { public static void main(String[] args) { C one = new C();//在其中添加双斜线或去掉验证 C two = new C(); //C three = new C(); System.out.println("已创建了" + one.get() + "个对象"); } } class C { static int shu = 0;//计数 C() { shu ++; } int get() { return shu; } }
运行结果: