博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 类装载和初始化顺序
阅读量:5060 次
发布时间:2019-06-12

本文共 1738 字,大约阅读时间需要 5 分钟。

1、在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入) 2、在装载类时,先装载父类A,再装载子类B 3、装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化) 4、装载子类B后,完成静态动作
类装载完成,开始进行实例化 1、在实例化子类B时,先要实例化父类A 2、实例化父类A时,先成员实例化(非静态代码) 3、父类A的构造方法 4、子类B的成员实例化(非静态代码) 5、子类B的构造方法 先初始化父类的静态代码--->初始化子类的静态代码-->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

测试代码:

  1. abstract class base
  2. {        
  3.     public int age=getNumber(100);       
  4.     static{        
  5.         System.out.println("base static block");      
  6.     }
  7.     {         
  8.         System.out.println("base nonstatic block");       
  9.     }  
  10.     static int sage=getNumber(50);  
  11.     base(){      
  12.         System.out.println(age);      
  13.         System.out.println("base start");
  14.         draw();//会调用子类覆盖后的方法,这儿是0!     
  15.         System.out.println("base end");          
  16.     }  
  17.     static int getNumber(int base){      
  18.         System.out.println("base.getNumber int" base);
  19.         return base;  
  20.     }  
  21.     public  void draw(){      
  22.         System.out.println("base.draw");  
  23.         }
  24. }
  25. public class initializeOrder extends base{  
  26.     public int age=getNumber(1001);  
  27.     private int _radius=getNumber(10);  
  28.     static int sage=getNumber(250);  
  29.     static{      
  30.         System.out.println("subclass static block");  
  31.     }  
  32.     {      
  33.         System.out.println("subclass nonstatic block");
  34.     }
  35.     initializeOrder(int radius){      
  36.         _radius=radius;      
  37.         System.out.println(age);
  38.         draw();//这儿是1000
  39.         System.out.println("initializeOrder initialized");  
  40.     }  
  41.     public void draw(){
  42.         System.out.println("initializeOrder.draw " _radius);  
  43.         }    
  44.     public static void main(String[] args) {        // TODO Auto-generated method stub     
  45.         new initializeOrder(1000);  
  46.     }
  47. }
  48. 输出为:
  49. base static block
  50. base.getNumber int50
  51. base.getNumber int250
  52. subclass static block
  53. base.getNumber int100
  54. base nonstatic block
  55. 100
  56. base start
  57. initializeOrder.draw 0
  58. base end
  59. base.getNumber int1001
  60. base.getNumber int10
  61. subclass nonstatic block
  62. 1001
  63. initializeOrder.draw 1000
  64. initializeOrder initialized

转载于:https://www.cnblogs.com/fightingYY/archive/2013/04/22/3035968.html

你可能感兴趣的文章
android访问链接时候报java.net.MalformedURLException: Protocol not found
查看>>
dwz ie10一直提示数据加载中
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Windows Phone Marketplace 发布软件全攻略
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
语义web基础知识学习
查看>>
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
关于WPF的2000件事 02--WPF界面是如何渲染的?
查看>>
单元测试、、、
查看>>
SVN使用教程总结
查看>>
JS 浏览器对象
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>