Java中反射的概述及瞭解ClassLoader

少年西西發表於2020-12-14

反射的概述

1.本章的主要內容

①、理解Class類並獲取Class例項
②、建立執行時類的物件
③、呼叫執行時類的指定結構
在這裡插入圖片描述

2.關於反射的理解

在這裡插入圖片描述
框架 = 反射 + 註解 + 設計模式

3.體會反射機制的“動態性”

是一類在執行時可以改變其結構的語言:例如新的函式、物件、甚至程式碼可以 被引進,已有的函式可以被刪除或是其他結構上的變化。通俗點說就是在執行時程式碼可以根據某些條件改變自身結構
舉例:

public Object getInstance(String classPath) throws Exception {
    Class clazz = Class.forName(classPath);

    return clazz.newInstance();
}
public void test2(){
    for (int i = 0; i < 50; i++) {
        int num = new Random().nextInt(3);//0 1 2

        String pathName = "";

        switch(num){
            case 0:
                pathName = "java.util.Date";
                break;
            case 1:
                pathName = "java.lang.Object";
                break;
            case 2:
                pathName = "loey.java.Person";
                break;
        }
        try {
            Object obj = getInstance(pathName);
            System.out.println(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4.反射機制能提供的功能

  • 在執行時判斷任意一個物件所屬的類
  • 在執行時構造任意一個類的物件
  • 在執行時判斷任意一個類所具有的成員變數和方法
  • 在執行時獲取泛型資訊
  • 在執行時呼叫任意一個物件的成員變數和方法
  • 在執行時處理註解
  • 生成動態代理

5.相關API

  • java.lang.Class:代表一個類
  • java.lang.reflect.Method:代表類的方法
  • java.lang.reflect.Field:代表類的成員變數
  • java.lang.reflect.Constructor:代表類的構造器
    … …

ClassLoader

1.類的載入過程----瞭解

在這裡插入圖片描述

2.類的載入器的作用

在這裡插入圖片描述

3.類的載入器的分類

在這裡插入圖片描述

4.Java類編譯、執行的執行的流程

在這裡插入圖片描述

5.使用Classloader載入src目錄下的配置檔案

        Properties pros = new Properties();

        //此時的檔案預設在當前的module下。
        //讀取配置檔案的方式一:
//        FileInputStream fis = new FileInputStream("jdbc.properties");
//        FileInputStream fis = new FileInputStream("src\\jdbc1.properties");
//        pros.load(fis);

        //讀取配置檔案的方式二:使用ClassLoader
        //配置檔案預設識別為:當前module的src下
// 關於類載入器的一個主要方法:getResourceAsStream(String str):獲取類路 徑下的指定檔案的輸入流
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("jdbc.properties");
        pros.load(is);

        String user = pros.getProperty("user");
        String password = pros.getProperty("password");
        System.out.println("user = " + user + ",password = " + password);

相關文章