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;
}
}
运行结果: