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

相关内容

热门资讯

怎么查看安卓双系统,轻松识别与... 你有没有想过,你的安卓手机里可能藏着两个小秘密呢?没错,就是双系统!听起来是不是有点神秘?别急,今天...
超精简安卓系统5.0,流畅体验... 你有没有发现,手机里的安卓系统越来越像是个“小胖子”,臃肿的界面、复杂的设置,让人眼花缭乱。不过别担...
安卓和ios系统特点,系统特性... 你有没有想过,为什么你的手机里装的是安卓还是iOS系统呢?这两种系统就像两个性格迥异的好朋友,各有各...
安卓系统桌面软件拖动,安卓系统... 你有没有发现,你的安卓手机桌面就像一个五彩斑斓的游乐场?各种软件图标就像小丑们,排着队等着你把它们摆...
安卓系统要看凤凰电视,尽享精彩... 你有没有想过,用手机看凤凰卫视的直播,是不是有点小单调呢?别急,今天就来给你揭秘,如何让电脑也来一场...
安卓系统不建议更新,揭秘潜在风... 亲爱的手机控们,你们是不是也经常被手机里那个小红点给“勾引”,迫不及待地想要升级最新的安卓系统呢?别...
crm客户管理系统安卓,企业移... 手机里的CRM,你的客户管理小助手在这个信息爆炸的时代,客户管理对企业来说至关重要。而随着智能手机的...
1 5安卓系统,安卓系统中的... 你知道吗?最近手机界可是炸开了锅,因为安卓系统又来了一次大升级——安卓15!这可不是一个小打小闹的更...
安卓7.0系统需要内存,安卓7... 你有没有发现,现在手机里的应用越来越“能吃”了?这不,咱们聊聊安卓7.0系统,它对内存的需求可真不低...
安卓仿苹果内部系统,打造极致用... 亲爱的读者们,你是否曾在某个瞬间,幻想过自己的安卓手机也能拥有苹果iOS系统的流畅与优雅?别急,今天...
安卓系统服务和进程,安卓系统服... 亲爱的读者们,你是否曾好奇过,你的手机里那些看似默默无闻的服务和进程,究竟是如何协同工作,让我们的手...
安卓4.3系统内存占用,安卓4... 亲爱的手机用户们,你们是不是也遇到过这样的烦恼:手机用着用着,突然感觉卡顿了,打开个应用都慢吞吞的,...
高通安装安卓系统,高通芯片驱动... 你有没有想过,那些性能爆表的高通处理器,除了在手机里呼风唤雨,还能干些什么呢?今天,就让我带你一探究...
魔趣系统安卓10.0,探索全新... 亲爱的手机控们,今天我要给大家带来一个超级酷的话题——魔趣系统安卓10.0!是的,你没听错,就是那个...
安卓系统打印机系统安装,轻松实... 你有没有想过,家里的安卓手机和打印机竟然能如此默契地合作呢?没错,就是那个你每天打印作业、照片或者重...
安卓系统芒果桌面下载,安卓系统... 亲爱的读者们,你是否也和我一样,对安卓系统中的芒果桌面情有独钟呢?这款桌面软件以其独特的风格和丰富的...
安卓系统找回删除视频,轻松找回... 手机里的视频不小心删掉了,是不是瞬间感觉心情down到谷底?别担心,今天就来给你支招,教你如何轻松找...
目前安卓系统的手机,引领移动科... 你有没有发现,最近手机圈里可是热闹非凡呢!各种新机发布,功能升级,让人眼花缭乱。今天,咱们就来聊聊目...
iphone越狱和安卓系统,探... 亲爱的果粉们,今天咱们来聊聊一个让iPhone用户既兴奋又纠结的话题——越狱和安卓系统。你有没有想过...
安卓系统的收费模式,市场策略与... 你知道吗?最近安卓系统要收费了,这可是个让人大跌眼镜的消息呢!咱们一起来聊聊这个话题,看看安卓系统收...