1. 程式人生 > 其它 >反射機制:ClassLoader類載入器 和 reflect中的array使用

反射機制:ClassLoader類載入器 和 reflect中的array使用

技術標籤:2020Java程式

ClassLoader

載入、連線、初始化原理

載入以JVM程序為基本單位
1) 每個程式(public class方法都會開闢一個新的JVM程序;
故不同程式的記憶體不會共享(哪怕是靜態方法));
2)載入二進位制資料,來源有class檔案,jar包總class檔案,網路方法,java原始檔動態編譯 4種載入方法;

在這裡插入圖片描述
在這裡插入圖片描述

note:final修飾的類變數相對於“巨集變數”,java編碼器編譯時候已經替換完畢,不會有初始化問題(載入時候已經沒這個變量了)

3) boot的專業意思是開機、靴子; reboot重啟;重開啟;
bootstrap 開機繫結的(類),根xx; 比如java的bootstrap CL根類載入器;

這樣ClassLoader類載入器,一開始就載入了類似 lib/rt.jar 執行時的核心類庫(包括 String,System等);

類載入器種類


在這裡插入圖片描述
擴充套件、系統載入器都是 classLoader的子類;

根類載入器不是java實現的,但它其實也是擴充套件載入器的父類;

reflect總建立的array

/*通過java.lang.reflect下面的Array類,建立任意型別陣列、設定、獲取他們元素的值*/

import java.lang.reflect.Array;

public class P0107ReflectArray {
    public static void main
(String[] args) { //1D string array Object arr = Array.newInstance(String.class, 10); Array.set(arr, 3, "pengfei"); Array.set(arr, 4,"Dengh"); Array.set(arr, 2, "zhirui"); System.out.println(Array.get(arr, 2) + " "
+ Array.get(arr,3) + " " + Array.get(arr, 4)); //3D string array Object arr_3d = Array.newInstance(String.class, 2,3,4); Object obtain_2d = Array.get(arr_3d, 1);// 3x4 array Array.set(obtain_2d, 2, new String[] { "fei", "rui","hui" }); // 1x4 array [1][2][:] Object obtain_1d = Array.get(obtain_2d, 0); // array[4] Array.set(obtain_1d, 2, "We Are Family"); //[1][0][2] String[][][] str_3d = (String [][][]) arr_3d; //3loop output for (String[][] s2: str_3d){ for (String[] s1: s2){ for (String s: s1) { if (s != null) { System.out.println(s + " "); } } } } //index output System.out.println(str_3d[1][0][2]); System.out.println(str_3d[1][2][0] + " " + str_3d[1][2][1] + " " + str_3d[1][2][2]); } }

output

zhirui pengfei Dengh
We Are Family
fei
rui
hui
We Are Family
fei rui hui

Process finished with exit code 0