J2SE综合:高手帮你全面理解初始化顺序
上一篇 /
下一篇 2007-12-28 09:13:00
/ 个人分类:JAVA
例子:
- class A{
- public String context=test();
- public static int num=getNum();
- {
- System.out.print("A3");
- }
- static{
- System.out.print("A1,");
- }
- public A(){
- System.out.print("A2,");
- }
- public String test()
- {
- String str="A.test(),";
- System.out.print(str);
- return str;
- }
- public static int getNum()//它只属于A
- {
- System.out.print("A.getNum(),");
- return 11;
- }
- }
- class B extends A{
- {
- System.out.print("c");
- }
- static{
- System.out.print("a,");
- }
- public B(){
- System.out.print("b,");
- }
- public String test()//覆盖
- {
- String str="B.test(),";
- System.out.print(str);
- return str;
- }
- public static int getNum()//它只属于B,不能覆盖
- {
- System.out.print("B.getNum(),");
- return 21;
- }
- }
- public class InitTest{
- public static void main(String[] ars){
- new B(); //执行到此处,结果: A.getNum(),A1,a,B.test(),A3A2,cb,
- System.out.println();
- new B(); //执行到此处,结果: B.test(),A3A2,cb,
- }
- }
首先在加载类时初始化static变量,同时按定义的顺序执行static{}块;
然后初始化按定义的顺序初始化非static变量;
最后执行构造函数;
以上的每个步骤都是先执行父类部分,再执行子类部分;
导入论坛
引用链接
收藏
分享给好友
管理
举报
TAG: