首页 > 编程 > Java > 正文

Java类的加载

2019-11-06 06:48:32
字体:
来源:转载
供稿:网友

无父类

加载顺序

为静态变量开辟空间(默认初始化),然后显示初始化静态代码块静态方法new语句明确首地址,在堆内存中为对象开辟相应大小的空间(默认初始化),此时有了this这一概念成员变量的显示初始化。构造代码块构造函数

代码

public class Main { public static void main(String args[]) { /*1*/ Demo a=new Demo(); /*堆*/// /*2*/// Demo.funtion2();// /*3*/// Demo b=new Demo();// b.funtion1();// /*4*/// Demo c=new Demo();// System.out.PRintln(c.dNum1);// /*5*/// Demo d=new Demo();// System.out.println(d.dNum2);// /*6*/// System.out.println(Demo.dNum3);// /*7*/// System.out.println(Demo.dNum4); }}class Demo{ int dNum1=5; /*堆*/ final int dNum2=10; /*堆*/ static int dNum3=15; /*堆->方法区->静态方法区*/ final static int dNum4=20; /*堆->方法区->常量池*/ { /*堆->方法区*/ System.out.println("构造代码块 " + dNum1 + " " + dNum2 + " " + dNum3 + " " + dNum4); } static /*堆->方法区->静态方法区*/ { System.out.println("静态代码块 " +dNum3 +" "+ dNum4); } Demo() /*堆->方法区*/ { System.out.println("默认构造函数 " + dNum1 + " " + dNum2 + " " + dNum3 + " " + dNum4); } void funtion1() /*堆->方法区*/ { System.out.println("普通成员方法 "+ dNum1 + " " + dNum2 + " " + dNum3 + " " + dNum4); } static void funtion2() /*堆->方法区->静态方法区*/ { System.out.println("静态方法 " + dNum3 + " " + dNum4); }}

输出

/* 1 */

静态代码块 15 20 构造代码块 5 10 15 20 默认构造函数 5 10 15 20

/* 2 */

静态代码块 15 20 静态方法 15 20

/* 3 */

静态代码块 15 20 构造代码块 5 10 15 20 默认构造函数 5 10 15 20 普通成员方法 5 10 15 20

/* 4 */

静态代码块 15 20 构造代码块 5 10 15 20 默认构造函数 5 10 15 20 5

/* 5 */

静态代码块 15 20 构造代码块 5 10 15 20 默认构造函数 5 10 15 20 10

/* 6 */

静态代码块 15 20 15

/* 7 */

20


final关键字 引用

额外:final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 答:http://blog.csdn.net/u012110719/article/details/46334413


有父类

加载顺序

父类加载,为父类的静态变量开辟空间(默认初始化),然后显示初始化父类的静态代码块父类的静态方法子类的静态变量开辟空间(默认初始化),然后显示初始化子类的静态代码块子类的静态方法父类super这一概念父类成员变量的显示初始化。父类的构造代码块父类的构造函数子类new语句明确首地址,在堆内存中为对象开辟相应大小的空间(默认初始化),此时有了this这一概念子类成员变量的显示初始化。子类构造代码块子类构造函数

代码

public class Main { public static void main(String args[]) { /*1*/ Demo a=new Demo();// /*2*/// Demo.funtion2();// /*3*/// Demo b=new Demo();// b.funtion1();// /*4*/// Demo c=new Demo();// System.out.println(c.dNum1);// /*5*/// Demo d=new Demo();// System.out.println(d.dNum2);// /*6*/// System.out.println(Demo.dNum3);// /*7*/// System.out.println(Demo.dNum4);// /*8*/// Demo d=new Demo();// System.out.println(d.fNum2);// /*9*/// System.out.println(Demo.fNum3);// /*10*/// System.out.println(Demo.fNum4); }}class Demo extends Father{ int dNum1=5; /*堆*/ final int dNum2=10; /*堆*/ static int dNum3=15; /*静态方法区*/ final static int dNum4=20; /*常量池*/ { System.out.println("子类的 构造代码块 " + dNum1 + " " + dNum2 + " " + dNum3 + " " + dNum4); } static { System.out.println("子类的 静态代码块 " +dNum3 +" "+ dNum4); } Demo() { System.out.println("子类的 默认构造函数 " + dNum1 + " " + dNum2 + " " + dNum3 + " " + dNum4); } void funtion1() { System.out.println("子类的 普通成员方法 "+ dNum1 + " " + dNum2 + " " + dNum3 + " " + dNum4); } static void funtion2() { System.out.println("子类的 静态方法 " + dNum3 + " " + dNum4); }}class Father{ int fNum1=-5; /*堆*/ final int fNum2=-10; /*堆*/ static int fNum3=-15; /*静态方法区*/ final static int fNum4=-20; /*常量池*/ { System.out.println("父类的 构造代码块 " + fNum1 + " " + fNum2 + " " + fNum3 + " " + fNum4); } static { System.out.println("父类的 静态代码块 " +fNum3 +" "+ fNum4); } Father() { System.out.println("父类的 默认构造函数 " + fNum1 + " " + fNum2 + " " + fNum3 + " " + fNum4); } void funtion1() { System.out.println("父类的 普通成员方法 "+ fNum1 + " " + fNum2 + " " + fNum3 + " " + fNum4); } static void funtion2() { System.out.println("父类的 静态方法 " + fNum3 + " " + fNum4); }}

输出

/* 1 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 父类的 构造代码块 -5 -10 -15 -20 父类的 默认构造函数 -5 -10 -15 -20 子类的 构造代码块 5 10 15 20 子类的 默认构造函数 5 10 15 20

/* 2 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 子类的 静态方法 15 20

/* 3 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 父类的 构造代码块 -5 -10 -15 -20 父类的 默认构造函数 -5 -10 -15 -20 子类的 构造代码块 5 10 15 20 子类的 默认构造函数 5 10 15 20 子类的 普通成员方法 5 10 15 20

/* 4 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 父类的 构造代码块 -5 -10 -15 -20 父类的 默认构造函数 -5 -10 -15 -20 子类的 构造代码块 5 10 15 20 子类的 默认构造函数 5 10 15 20 5

/* 5 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 父类的 构造代码块 -5 -10 -15 -20 父类的 默认构造函数 -5 -10 -15 -20 子类的 构造代码块 5 10 15 20 子类的 默认构造函数 5 10 15 20 10

/* 6 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 15

/* 7 */

20

/* 8 */

父类的 静态代码块 -15 -20 子类的 静态代码块 15 20 父类的 构造代码块 -5 -10 -15 -20 父类的 默认构造函数 -5 -10 -15 -20 子类的 构造代码块 5 10 15 20 子类的 默认构造函数 5 10 15 20 -10

/* 9 */

父类的 静态代码块 -15 -20 -15

/* 10 */

-20


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表