ClassLoad

作者: Finlay_Li | 来源:发表于2020-09-01 15:02 被阅读0次

    类的加载过程:类的加载—>类的连接—>类的初始化

    ①类的加载:将类的 .class文件读入内存,并为之创建一个java.lang.Class对象。
    
               此过程由类加载器完成
    
    ②类的链接:将类的二进制数据合并到JRE中
    
               加载类的静态内容
    
    ③类的初始化:JVM负责对类进行初始化
    
               对类静态内容初始化
    

    类加载器ClassLoader

    JVM 定义了两种类型的类加载器:
    ① 启动类加载器(bootstrap)
    ②用户自定义加载器(user-defined class loader)

    JVM在运行时会产生3个启动类加载器

            ①引导类加载器:
    
                用C++编写的,是JVM自带的类装载器。
    
                负责Java平台核心库,用来装载核心类库。该加载器无法获取,尝试获取。返回null
    
            ②扩展类加载器:
    
               负责jre/lib/ext目录下的jar包或 –D java.ext.dirs 指定目录下的jar包装入工作库
    
            ③系统类加载器:
    
                负责java –classpath 或 –D java.class.path所指的目录下的类与jar包装入工作
    
                是最常用的加载器
    

    使用类加载器加载属性文件

        public class ClassLoaderTest {
    
            @Test
    
            public void test1() throws IOException{
    
                //1 创建属性文件实例
    
                Properties props=new Properties();
    
                //2 加载(获取)属性文件
    
                        ①:本地属性文件:当前项目、C盘*/
    
                //props.load(new FileInputStream("./jdbc.properties"));
    
                        ②:远程属性文件:包名+属性文件名(bin中与.class文件同路径)
    
                ClassLoader cl = this.getClass().getClassLoader();
    
                InputStream in=cl.getResourceAsStream("ClassLoader/jdbc.properties");
    
                props.load(in);
    
                //3 获取属性文件内容
    
                String userName=props.getProperty("userName");
    
                String passWord=props.getProperty("passWord");
    
                //4 使用获取
    
                System.out.println(userName);
    
                System.out.println(passWord);
    
            }
    
        }
    

    Class.getResource和ClassLoader.getResource的路径问题

    https://www.cnblogs.com/yejg1212/p/3270152.html

    相关文章

      网友评论

          本文标题:ClassLoad

          本文链接:https://www.haomeiwen.com/subject/uijvsktx.html