ClassLoad

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

①类的加载:将类的 .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)