在网上看到没有这个main方法也可以执行的代码时,为了弄清代码在java中执行优先级的原因,我写了以下两个测试代码。
公共类测试静态{
/*静态代码块*
静态{
System.out.println ('我的静态代码很快,已执行!' );
系统. exit (0; //结束程序
}
/*静态方法*
公共静态语音方法
System.out.println ('我是静态方法,已被调用并执行!' );
}
//结构方法/
公共测试静态(
System.out.println ('我是构建方法。 已执行!' );
}
/*普通方法*
公共void fc () {
System.out.println ('我是按普通方式,我被调用运行的!' );
}
publicstaticvoidmain (字符串[ ] args ) {
测试静态d=new测试静态(;
TestStatic.method (;
d.fc (;
}
}
程序输出:我静态代码快,执行了!
公共类测试静态{
/*静态代码块*
静态{
System.out.println ('我的静态代码很快,已执行!' );
}
/*静态方法*
公共静态语音方法
System.out.println ('我是静态方法,已被调用并执行!' );
}
//结构方法/
公共测试静态(
System.out.println ('我是构建方法。 已执行!' );
}
/*普通方法*
公共void fc () {
System.out.println ('我是按普通方式,我被调用运行的!' );
}
publicstaticvoidmain (字符串[ ] args ) {
测试静态d=new测试静态(;
TestStatic.method (;
d.fc (;
}
}
程序输出:
我静态代码快,执行了!
我用构造方法,我被执行了!
我用静态的方法,我被呼叫执行了!
我用普通的方法,被呼叫执行了!
比较两个代码的输出结果,第一行先输出了类的静态代码快速中的内容。 “我的静态代码很快,因为第一个程序的静态代码块中有一个语句叫system.exit(0)。 已执行! 程序结束。 第二个代码没有输出main方法的内容。 静态代码块可以在执行main方法之前执行,第二个代码可以在执行静态代码块之后开始执行main方法,调用方法实例对象,然后调用实例方法。 静态方法和实例方法是被动的,必须调用。 所以,谁先调用谁先执行,唯一的区别是静态方法在类加载时存在,而实例方法是在new时生成的,所以在实例对象之前用类名调用静态方法,就会将方法
【注】根据测试结果,第一个执行的是静态代码块,静态方法可以在实例方法之前或之后执行,也可以在构造方法之前或之后执行,但构造方法必须在实例方法之前