关于java中类成员的加载顺序
目录
一、单个类的加载顺序
二、代码
三、输出结果
三、对输出结果的解释
四、类加载的内存图:
一、单个类的加载顺序
1、加载是类
2、产生自己的静态空间 静态属性 静态方法 静态块
执行静态块
3、在堆内存中开辟对象空间
4、加载类的非静态成员 普通属性 普通方法 普通块
执行普通块 执行构造方法
5、将对象空间的地址引用交给 变量来存储
二、代码
public class Demo {private String demo = "普通属性";private static String demoStatic = "静态属性";public Demo() {System.out.println("这是Demo无参构造方法");}{this.test();System.out.println("这是Demo普通的块");}static {testStatic();System.out.println("这是Demo的静态块");}public static void testStatic() {System.out.println(getDemoStatic());System.out.println("这是Demo的静态方法");}public void test() {System.out.println(getDemo());System.out.println("这是Demo的普通方法");}public String getDemo() {return demo;}public static String getDemoStatic() {return demoStatic;}}
public class TestMain {public static void main(String[] args){Demo p = new Demo();}
}
三、输出结果
三、对输出结果的解释
在静态方法中调用了静态属性,在静态块中调用了静态方法
都能如愿以偿的输出说明了在静态方法之前就加载了属性
在加载静态方法之前就加载了静态属性------->静态属性产生的比静态方法早
在加载静态块之前就加载了静态方法------>静态方法的产生比静态块早
得出结论:
早------>晚
静态属性 静态方法 静态块
在普通方法中调用了普通属性,在普通块中调用了普通方法
都能如愿以偿的输出说明了在普通方法之前就加载了属性
在加载普通方法之前就加载了普通属性------->普通属性产生的比普通方法早
在加载普通块之前就加载了普通方法------>普通方法的产生比普通块早
最后输出了默认的构造方法
得出结论:
早------>晚
普通属性 普通方法 普通块 默认的构造方法
四、类加载的内存图:
对象的创建是在堆内存中
变量是在栈内存中,Demo d = new Demo();
Demo d = 的意思是将对象空间的地址引用交给 变量来存储
关于java中类成员的加载顺序相关推荐
- Java static作用及加载顺序
在java中,static可以修饰成员变量.成员方法.代码块.内部类. static修饰成员变量,可以达到全局变量的效果(Java没有全局变量的概念),当一个类定义了static变量,其实就是申请一个 ...
- 类的加载顺序和对象的实例化
直接就在JDK8中用代码来验证吧. import lombok.extern.slf4j.Slf4j;@Slf4j public class Printer {private String s;pub ...
- java枚举加载顺序_java 中类的加载顺序(转)
1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始 ...
- Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)
目录 1. 类的属性的默认值问题 2. 构造方法(Constructor) 3. 类的成员 3.1 类的成员之一:属性 3.2 UML类图 4. static关键字 5. 类的成员加载(运行)顺序 6 ...
- java静态方法加载顺序_java中类以及方法的加载顺序
先看下面的代码: public class Test { public static int a =0 ; static { a = 10; System.out.println("静态代码 ...
- java类验证和装载顺序_java中类的加载顺序介绍(ClassLoader)
转自:http://blog.csdn.net/eff666/article/details/52203406 1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.l ...
- java中类的加载顺序
java中类加载顺序: 1)静态代码块只执行一次:静态代码块首先被初始化 2)构造代码块在每次创建对象都会执行:构造函数都是最后执行的. 3)按照父子类继承关系进行初始化,先执行父类的初始化: 4)程 ...
- java中类的加载顺序介绍(ClassLoader)
1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题.对于这个异常,它实质涉 ...
- java类加载器顺序_java中类的加载顺序介绍(ClassLoader)
1.ClassNotFoundExcetpion 我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题.对于这个异常,它实质涉 ...
最新文章
- linux shell合并文件命令paste
- R-error: 错误: nul character not allowed (line 1)
- Lightoj1014【基础题】
- 正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询
- python hex 补0_Python保留前导零的二进制到十六进制转换
- 支付宝不止怀有“社交梦”,社区金融才是它的野心所在
- 电脑运行adb闪退_adb命令调试工具
- 洛谷P1014 [NOIP1999 普及组] Cantor 表
- Confluence 6 workbox 通知包含了什么
- Linux系统中源码包tomcat的管理
- 中国计算机类研究生学校排名,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...
- linux与电脑ping通配置方法
- uniapp苹果无法上架_uniapp无法上架IOS包怎么办
- 怎么用计算机管理员删除文件,管理员权限删除,教您如何删除需要管理员权限的文件夹...
- 什么是CI/CD,以及我所熟知的CI/CD工具都是有哪些?
- m3u8 java_m3u8Download java 下载 m3u8 视频,解密并合并 ts java download m3u8 vide @codeKK Android开源站...
- 我的测试工程师之路--测试人员不看后悔
- 错误模块名称: KERNELBASE.dll 问题记录
- 天视通支持海康威视摄像头吗_海康威视突然做电脑,到底有胜算吗?
- 解决Chrome播放视频闪屏黑屏无法播放