package ijava.oop;public class Customer extends Person{ static Name name = new Name("Tom");
static{
Screen.print("2", "Customer static init block!");
}
{
Screen.print("3", "Customer instance init block!");
}
Customer(){
Screen.print("4", "Customer instance constructor!");
}
public static void main(String[] args){
Screen.print("1", "Customer Initial Test!");
Person p = new Customer();
}
}
class Person{
private Name name = new Name();
static{
Screen.print("5", "Person static init block!");
}
Person(){
Screen.print("6", "Person instance constructor!");
}
{
Screen.print("7", "Person instance init block!");
}
}
class Name{
Name(){
Screen.print("8", "Name instance constructor!");
}
Name(String value){
Screen.print("9", "Name instance constructor with: " + value);
}
static{
Screen.print("10","Name static init block");
}
}class Screen{
static void print(String sn, String msg){
System.out.println("P["+sn+"] - " + msg);
}
}不借助计算机调试,能正确得出答案的你就理解了,提示,第一个打印的是5
另外,哪位大大告诉我在类里如下,应该怎么叫?术语叫什么?
{
Screen.print("7", "Person instance init block!");
}
解决方案 »
- 关于int和byte的问题
- 如何生成按指定概率密度的随机对象序列?
- 如果我当前的浏览器运行不了Java Applet,应该如何解决:1.是不是要下载安装Java虚拟机;2.安装JVM后是否还要设置类路径;3.不同的操作系统(X
- 2003月07月06日升星,散分500!--分五天结贴之第二帖。(次日凌晨零点结分)
- 帮忙改程序!!!在线等待,急用!!!
- 我用JBUILDER生成的*.class文件怎么在JDK环境下运行?
- 哪里有SUN公司出的JDK的软件包,
- 如何让rmi方法返回Resultset,什么是序列化,能给个简单例子吗?
- java中的static函数
- JAVA新手求助String的问题
- 三问JNA
- 请高手诊断我的聊天室程序
Screen.print("7", "Person instance init block!");
}
真不知道这个是什么,我猜是不是和
static {
Screen.print("7", "Person instance init block!");
}等价?
P[10] - Name static init block
P[9] - Name instance constructor with: Tom
P[2] - Customer static init block!
P[1] - Customer Initial Test!
P[8] - Name instance constructor!
P[7] - Person instance init block!
就只能搞出这么多了
Screen.print("7", "Person instance init block!");
}
叫初始化块static{
Screen.print("2", "Customer static init block!");
}
叫静态初始化块5 10 9 2 1 8 7 6 3 4 类加载优先级顺序为:
static区(static初始化块和类static实例变量) > 类的非static初始化区(非static初始化块和类实例变量) > 类构造函数static区在第一次遇到该类时就被加载,非static区和构造函数在创建对象(既new)时加载。同一个类的多个static区之间按代码出现的先后顺序加载,非static区亦然。static只加载一次,为类所有,不是为类对象所有。该程序中:
1.进入Customer类,检查发现有extends,存在父类Person。
2.进入Person类,检查Person无父类存在,但有static区,执行输出"5"。因Person没被创建,所以非static区和Person构造函数不被加载。
3.进入Customer类程序体,发现有多个static区。
第一个为static Name name = new Name("Tom")。创建Name,进入Name类,加载Name静态初始化快,输出"10"。无非static区,则加载相应构造函数,输出"9"。
第二个出现的static是"2",输出
4.进入main线程,运行第一行输出"1"
5.创建一个无参Customer()对象。因为Person类是其父类,创建子类时,系统必自动创建一个父类对象。
再次进入Person类,按顺序先创建Name对象。进入Name类,其static区已被加载,不需要再加载。没有非static区。调用相应构造函数,输出"8",退出name类。加载Person类第二个非static区,输出"7",然后加载其构造函数输出"6",退出Person。
进入Customer类,加载初始化块输出"3",然后是构造函数输出"4"
6.退出main线程