Java基础18(类加载、反射和动态代理)
生活随笔
收集整理的這篇文章主要介紹了
Java基础18(类加载、反射和动态代理)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 類是如何從.class文件到JVM可以使用
- 1.1 JVM
- 1.2 JVM加載類
- 1.2.1 JVM什么時候加載某個類
- 1.2.2 類加載器加載類
- 1.2.3 連接
- 1.2.4 類的初始化
- 2. 反射
- 2.1 獲得類的Class對象
- 2.2 從Class對象中獲取信息
1 類是如何從.class文件到JVM可以使用
1.1 JVM
當我們啟動某個Java程序時,將會在系統中啟動一條Java虛擬機進程,不管該Java程序有多復雜,它們都處于這個Java虛擬機中。
JVM進程終止的情況:
- 程序正常結束。
- 程序運行到System.exit()或者Runtime.getRuntime().exit()代碼結束。
- 程序運行過程中遇到未被捕獲的異常或者錯誤,程序結束。
- JVM運行的平臺強制結束了JVM進程。比如linux下用kill命令強制結束某個進程。
1.2 JVM加載類
當JVM主動使用某個類,且該類還未被加載到內存中,系統就會通過加載、連接、初始化三步來把該類加載到內存。
1.2.1 JVM什么時候加載某個類
當程序通過以下六種方式來使用某個類或者接口時,JVM主動加載該類或者接口:
1.2.2 類加載器加載類
類的加載由類加載器完成。
類加載器加載二進制數據來源:
- 本地文件系統來加載class文件
- 從jar包中加載class文件。通常是我們使用非jdk提供的類,比如使用JDBC要用到的mysql驅動。
- 通過網絡加載(我用的比較少)
- 把一個Java源文件動態編譯、并加載
類加載器加載類的時機:看JVM的設置
1.2.3 連接
連接負責將類的二進制數據合并到jre中。整個過程分為三步:
1.2.4 類的初始化
2. 反射
2.1 獲得類的Class對象
每個類被加載后,系統會為該類生成一個對應的Class對象。獲取Class對象的方式有:
2.2 從Class對象中獲取信息
獲取構造器:
總結
以上是生活随笔為你收集整理的Java基础18(类加载、反射和动态代理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux学习-防火墙
- 下一篇: Java基础-内部类