java----类的加载与其初始化
创始人
2024-04-23 13:16:36
0

java内存分析:

在这里插入图片描述

类加载的过程:

在这里插入图片描述

类的加载与ClassLoader的理解:

在这里插入图片描述

类的初始化:

package Collections;
public class text1 {
public static void main(String[]args){A a=new A();System.out.println(A.m);
}
}
class A{static {System.out.println("A类静态代码块初始化");m=300;}static int m=100;public A(){System.out.println("A类的无参构造初始化");}
}

输出:

A类静态代码块初始化
A类的无参构造初始化
100

为什么最终输出的m值为100呢?

分析如下:

首先类进行加载和链接,如下所示:

在这里插入图片描述
注:在链接阶段的准备工作时,编译器会为类变量赋默认值为0,即此时的m为0

链接完毕后进行类的初始化,这一过程将会执行类构造器()方法,将类中所有类变量的赋值语句以及静态代码块中的语句收集和合并:

 () {System.out.println("A类静态代码块初始化");m=300;m=100;}

第二条m的赋值语句,覆盖了第一条的300,因此最终输出为100

会发生类的初始化的场景:

类的主动引用(一定会发生类的初始化)

在这里插入图片描述

类的主动引用:
package Collections;import static Collections.Son.m;public class text1 {static {System.out.println("Main类被加载");}
public static void main(String[]args) throws ClassNotFoundException {Son son=new Son();
}
}
class Father{static int a=10;static{System.out.println("Father类被加载");}
}
class Son extends Father{
static {System.out.println("子类被加载");m= 300;
}static int m =100;static final int M = 1;
}

输出:

Main类被加载
Father类被加载
子类被加载
反射也会产生主动引用:
package Collections;import static Collections.Son.m;public class text1 {static {System.out.println("Main类被加载");}
public static void main(String[]args) throws ClassNotFoundException {Class.forName("Collections.Son");
}
}
class Father{static int a=10;static{System.out.println("Father类被加载");}
}
class Son extends Father{
static {System.out.println("子类被加载");m= 300;
}static int m =100;static final int M = 1;
}

输出:

Main类被加载
Father类被加载
子类被加载

类的被动引用(不会发生类的初始化):

当访问一个静态域时,只有真正声明这个域的类才会被初始化,如:当通过子类引用父类的静态变量,不会导致子类初始化。

举例:

package Collections;import static Collections.Son.m;public class text1 {static {System.out.println("Main类被加载");}
public static void main(String[]args) throws ClassNotFoundException {System.out.println(Son.a);
}
}
class Father{static int a=10;static{System.out.println("Father类被加载");}
}
class Son extends Father{
static {System.out.println("子类被加载");m= 300;
}static int m =100;static final int M = 1;
}

输出:

Main类被加载
Father类被加载
10

通过数组定义类引用,不会触发此类的初始化:

举例:

package Collections;import static Collections.Son.m;public class text1 {static {System.out.println("Main类被加载");}
public static void main(String[]args) throws ClassNotFoundException {Son[] arry=new Son[5];
}
}
class Father{static int a=10;static{System.out.println("Father类被加载");}
}
class Son extends Father{
static {System.out.println("子类被加载");m= 300;
}static int m =100;static final int M = 1;
}

输出:

Main类被加载

引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)

举例:

package Collections;import static Collections.Son.m;public class text1 {static {System.out.println("Main类被加载");}
public static void main(String[]args) throws ClassNotFoundException {System.out.println(Son.M);
}
}
class Father{static int a=10;static{System.out.println("Father类被加载");}
}
class Son extends Father{
static {System.out.println("子类被加载");m= 300;
}static int m =100;static final int M = 1;
}

输出:

Main类被加载
1

相关内容

热门资讯

gps测量设备-GPS 测量设... 嘿,大家好!今天我要跟你们聊聊我的宝贝——GPS测量设备,这小家伙可是我探险旅程中的超级英雄!每次我...
身份证号码验证软件:私人侦探般... 哎呀,说到这个身份证号码验证软件,我可真是爱死了!你知道吗,每次我看到那些乱七八糟的号码,我头都大了...
新视通会议的时候放ppt,图像... 哎呀,说到这个新视通会议,真是让我头疼!每次开会,那PPT一放出来,整个屏幕都被占满了,想看看别的东...
windows ce 怎么用-... 哎呀,说到这WindowsCE啊,真是个让人又爱又恨的小妖精!你可能听过它的大名,但真要上手用起来,...
上海蓝带西点学校:梦想开始的地... 哎呀,说到上海蓝带西点学校,我的心就忍不住扑通扑通跳!这可不是一般的学校,这是甜品的王国,是烘焙的梦...
身份证号码验证算法 c-身份证... 大家好,我是你们的老朋友,一个对数字和代码有着莫名热情的小程序员。今天,我要带你们走进一个看似枯燥但...
数据恢复 注册码-电脑文件丢失... 哎呀!真是急死人了,电脑突然抽风,辛辛苦苦做的文件就这么不见了!这时候,心里那个慌啊,就像热锅上的蚂...
新视通电子:从创业团队到市场明... 哎呀,说到新视通电子,这可不就是咱们的心头好吗?这家伙,从一个小小的创业团队,一路摸爬滚打,到现在成...
操作系统vista-Vista... 哎呀,说到Vista,我就忍不住要感叹一番。记得那会儿,它可是微软的宠儿,带着满满的期待和光环出现在...
easyrecovery破解版... 哎呀,看到“EasyRecovery破解版百度云”这个话题,我真是气不打一处来!你们这些小年轻,总是...
孕后期感冒咳嗽怎么办?医生建议... 哎呀,真是倒霉透顶了!孕后期本来就够辛苦的了,现在还来个感冒咳嗽,这不是要我命嘛!每天晚上咳得睡不着...
cad2024cass转换-C... 大家好,我是一个对设计软件充满了无限热情的小设计师。今天,我要跟大家聊聊CAD2024和CASS之间...
洛阳中医治疗胃溃疡医院-洛阳中... 嘿,朋友们,今天咱们聊聊在洛阳这个古老城市里,那些神秘而又温暖的中医治疗胃溃疡的故事。你是不是也和我...
法院能通过手机号码查身份证号吗... 哎呀,这个问题真是让人又好奇又紧张!法院到底能不能通过手机号码查到我们的身份证号码呢?这事儿听起来既...
最好的偷电方法图片-偷电小伎俩... 嘿,朋友们,今天咱们聊聊那些让人又气又笑的偷电小伎俩。说到偷电,你可能会想到那些黑灯瞎火、偷偷摸摸的...
末日黎明破解版:是游戏还是道德... 大家好,我是一个热爱游戏的普通玩家。今天,我要跟大家聊聊那个让人又爱又恨的话题——《末日黎明破解版》...
windows7操作系统是一个... 哎呀,说到Windows7,真是让人怀念呢!那可是我青春岁月里的一个重要角色,就像那些年我们一起追过...
win7旗舰版系统下载-Win... 哎呀,说到Win7旗舰版,我这心里就激动得不得了!这系统啊,就像是我电脑的老朋友,陪伴了我多少个日夜...
杭州绿云售后电话热线:温暖的阳... 在这个快节奏的世界里,我们每个人都是一颗忙碌的螺丝钉,不停地旋转,直到有一天,我们的小宇宙出现了故障...
火车站身份证明有效期引热议,如... 哎呀,说到火车站的身份证明有效期,我这心里就五味杂陈啊!每次拎着大包小包,急匆匆地赶到车站,心里总想...