作业
使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?
package zuoye;
public class lei {
private static int n = 0;
public lei() {
n = n + 1;
}
public static int getNum() {
return n;
}
public static void main(String[] args) {
lei o1 = new lei();
lei o2 = new lei();
lei o3 = new lei();
lei o4 = new lei();
System.out.println("已生成对象个数为:" + lei.getNum());
}
}
结果显示:
以下代码为何无法通过编译?哪儿出错了?
Java程序会自动添加默认构造函数当且仅当用户没有定义任何构造函数的情况下。
以下代码输出结果是什么?
结果
Java字段初始化规律系统会按顺序对Java字段进行初始化,如果有好几个方法都对同一个变量进行了初始化。Java会将最后一次的初始化结果赋给该变量
请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
程序执行结果为:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:Java初始化顺序演示
Leaf的普通初始化块
执行Leaf的构造器
结论:
静态初始化块会在其他所有代码执行之前执行,且只执行一次。
静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
package zuoye;
public class Test {
String name="The name";
long salary=7;
short employee_id=4;
static int total_employees;
static void clear(){
total_employees=20173672;
System.out.println(total_employees);
System.out.println(new Test().salary);
}
public static void main(String [] args)
{
Test.clear();
}
}
结果显示:
20173672
7