溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在java中加載類

發(fā)布時間:2021-05-24 15:45:56 來源:億速云 閱讀:168 作者:Leah 欄目:開發(fā)技術

今天就跟大家聊聊有關如何在java中加載類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

類加載器

  • 類加載器作用

負責將.class文件(存儲的物理文件)加載到內存中

  • 類加載器過程

加載:通過全類名獲取這個類準備用流傳輸,加載進內存,加載完畢創(chuàng)建一個Class對象

鏈接

驗證:確保Class文件字節(jié)流中包含的信息符合當前虛擬機的要求,并且不會危害虛擬機自身安全

(文件中的信息是否符合虛擬機規(guī)范有沒有安全隱患)準備:負責為類的類變量(被static修飾的變量)分配內存,并設置默認初始化值

(初始化靜態(tài)變量)解析:將類的二進制數據流中的符號引用替換為直接引用
(本類中如果用到了其他類,此時就需要找到對應的類)

初始化:根據程序員通過程序制定的主觀計劃去初始化類變量和其他資源(也就是自己寫的構造函數初始化)
(靜態(tài)變量賦值以及初始化其他資源)

  • 類加載分類

Bootstrap class loader:虛擬機的內置類加載器,通常表示為null ,并且沒有父null

Platform class loader:平臺類加載器,負責加載JDK中一些特殊的模塊

System class loader:系統類加載器,負責加載用戶類路徑上所指定的類庫

類加載器繼承關系

System的父加載器為Platform

Platform的父加載器為Bootstrap

代碼示例

public class ClassLoaderDemo1 {
    public static void main(String[] args) {
        //獲取系統類加載器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

        //獲取系統類加載器的父加載器 --- 平臺類加載器
        ClassLoader classLoader1 = systemClassLoader.getParent();

        //獲取平臺類加載器的父加載器 --- 啟動類加載器
        ClassLoader classLoader2 = classLoader1.getParent();

        System.out.println("系統類加載器" + systemClassLoader);
        System.out.println("平臺類加載器" + classLoader1);
        System.out.println("啟動類加載器" + classLoader2);

    }
}

雙親委派模型

 如果一個類加載器收到了類加載請求,它并不會自己先去加載,而是把這個請求委托給父類的加載器去執(zhí)行,如果父類加載器還存在其父類加載器,則進一步向上委托,依次遞歸,請求最終將到達頂層的啟動類加載器,如果父類加載器可以完成類加載任務,就成功返回,倘若父類加載器無法完成此加載任務,子加載器才會嘗試自己去加載,這就是雙親委派模式(一句話意思就是加載類先讓父類的加載器去加載,如果父類加載不了就會重新向下讓子類加載器依次去加載知道找到加載的類加載器)

如何在java中加載類 

ClassLoader 中的兩個方法

方法介紹

方法名說明
public static ClassLoader getSystemClassLoader()獲取系統類加載器
public InputStream getResourceAsStream(String name)加載某一個資源文件
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Demo {

    public static void main(String[] args) throws IOException {
        //獲取系統類加載器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

        //利用加載器去加載一個指定的文件
        //參數:文件的路徑(放在src的根目錄下,默認去那里加載)
        //返回值:字節(jié)流。
        InputStream is = systemClassLoader.getResourceAsStream("prop.properties");

        Properties prop = new Properties();
        prop.load(is);
        System.out.println(prop.getProperty("name"));
        
        is.close();
    }

}

常用的java框架有哪些

1.SpringMVC,Spring Web MVC是一種基于Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架。2.Shiro,Apache Shiro是Java的一個安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。4.Dubbo,Dubbo是一個分布式服務框架。5.Maven,Maven是個項目管理和構建自動化工具。6.RabbitMQ,RabbitMQ是用Erlang實現的一個高并發(fā)高可靠AMQP消息隊列服務器。7.Ehcache,EhCache 是一個純Java的進程內緩存框架。

看完上述內容,你們對如何在java中加載類有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI