标签:RequestMapping java String 子类 何时 Children public 加载
我们接着上一章的代码继续来了解一下java类是在什么时候加载的。在开始验证之前,我们现在IDEA做如下配置。
-XX:+TraceClassLoading 监控类的加载
我们新建了一个TestController 来测试类的加载时机,代码如下:
@RestController public class TestController { @RequestMapping("/newInstance") public String newInstance(){ Father father = new Father(); return ""; } @RequestMapping("/newChildrenInstance") public String childrenInstance(){ Children children = new Children(); return ""; } @RequestMapping("/staticField") public String staticField(){ String staticValue = Children.staticValue; return ""; } @RequestMapping("staticMethod") public String staticMethod(){ String bed = Children.bed(); return ""; } @RequestMapping("classForName") public String classForName() throws Exception { Class.forName("com.zhixie.jvmclassload.demo.Children"); return ""; } }
一、定义了main的类,启动main方法时该类会被加载
本次验证采用的是springboot 2.2.0版本。当运行启动类的时候,我们可以看到只有启动类被加载了。
二、创建类的实例,即new对象的时候
1、创建父类的实例
此时被加载的类有Father及Field类,我们重启服务,然后去访问创建子类的实例。为什么要重启呢?因为每个类在虚拟机生命周期中如果存在,则不会重复加载。不重启的话,看不到我们想要的效果。
2、创建子类的实例
在创建子类实例的时候,在加载子类之前会优先加载其父类。
三、访问类的静态方法
四、访问类的静态变量
五、反射 Class.forName()
总结
- java类在以上五种情况下会被加载。
- 在jvm生命周期中每个类如果存在,则不会重复加载。
- 在加载子类的时候会优先加载其父类。
- 类被加载的时候,其中的静态代码块、静态方法及静态变量也会被加载。
- 在初始化某个类时,如果这个类的静态代码块、静态方法或静态变量引用到了另一个类,则这个类也会被加载。
标签:RequestMapping,java,String,子类,何时,Children,public,加载 来源: https://blog.51cto.com/u_14820531/2847673
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。