zoukankan      html  css  js  c++  java
  • java类在何时被加载?

    我们接着上一章的代码继续来了解一下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生命周期中每个类如果存在,则不会重复加载。
    • 在加载子类的时候会优先加载其父类。
    • 类被加载的时候,其中的静态代码块、静态方法及静态变量也会被加载。
    • 在初始化某个类时,如果这个类的静态代码块、静态方法或静态变量引用到了另一个类,则这个类也会被加载。


    原文链接:https://www.cnblogs.com/zhixie/p/11766080.html

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/Tony100/p/14406261.html
Copyright © 2011-2022 走看看