摘要:本文承接上一篇樂字節發射之二實例化對象接口與父類修飾符和屬性繼續講述反射之三方法數組類加載器一方法獲取所有方法包括父類或接口,使用即可。當沒有任何引用指向對象時就會被卸載,結束類的生命周期。
本文承接上一篇:樂字節Java發射之二:實例化對象、接口與父類、修飾符和屬性
繼續講述Java反射之三:方法、數組、類加載器
一、方法獲取所有方法(包括父類或接口),使用Method即可。
public static void test() throws Exception { Class> clz = Class.forName("com.shsxt.ref.simple.User "); //獲取屬性 System.out.println("===============本類方法==============="); // 取得全部公共方法 Method[] methods =clz.getMethods(); for(Method m:methods){ //1、權限 int mod=m.getModifiers(); System.out.print(Modifier.toString(mod)+" "); //2、返回類型 Class> returnType=m.getReturnType(); System.out.print(returnType.getName()+" "); //3、名字 String name =m.getName(); System.out.print(name +"("); //4、參數 Class>[] para=m.getParameterTypes(); for(int i=0;ip =para[i]; System.out.print(p.getName() +" arg"+i); if(i!=para.length-1){ System.out.print(","); } } //異常 Class>[] exce=m.getExceptionTypes(); if(exce.length>0){ System.out.print(") throws "); for(int k=0;k 二、 數組 操作數組需要借助Array類。
//1、創建數組 Object obj =Array.newInstance(int.class, 5); //2、獲取大小 if(obj.getClass().isArray()){ //3、判斷是否為數組 System.out.println(Array.getLength(obj)); //4、設置值 Array.set(obj,0, 100); //5、獲取值 System.out.println(Array.get(obj,0)); }三、 類加載器在java中有三種類類加載器:
⑴Bootstrap ClassLoader 此加載器采用c++編寫,一般開發中很少見。
⑵Extension ClassLoader 用來進行擴展類的加載,一般對應的是jrelibext目錄中的類
⑶AppClassLoader 加載classpath指定的類,是最常用的加載器。同時也是java中默認的加載器。 了解即可。
public static void main(String[] args) throws Exception { System.out.println("類加載器 "+ClassLoader.class.getClassLoader().getClass().getName()); }四、類的生命周期在一個類編譯完成之后,下一步就需要開始使用類,如果要使用一個類,肯定離不開JVM。在程序執行中JVM通過裝載,鏈接,初始化這3個步驟完成。
類的裝載是通過類加載器完成的,加載器將.class文件的二進制文件裝入JVM的方法區,并且在堆區創建描述這個類的java.lang.Class對象。用來封裝數據。 但是同一個類只會被類裝載器裝載一次。
鏈接就是把二進制數據組裝為可以運行的狀態。鏈接分為校驗,準備,解析這3個階段
1、校驗一般用來確認此二進制文件是否適合當前的JVM(版本),
2、準備就是為靜態成員分配內存空間。并設置默認值
3、解析指的是轉換常量池中的代碼作為直接引用的過程,直到所有的符號引用都可以被運行程序使用(建立完整的對應關系)
完成之后,類型也就完成了初始化,初始化之后類的對象就可以正常使用了,直到一個對象不再使用之后,將被垃圾回收。釋放空間。當沒有任何引用指向Class對象時就會被卸載,結束類的生命周期。
樂字節原創,歡迎繼續關注 樂字節
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75245.html
摘要:大家好,樂字節小樂繼續為初學者講述基礎知識。上次說到樂字節反射之三方法數組類加載器,這次是反射之四反射相關操作操作屬性獲取對象獲取對象設置屬性打開權限獲取此屬性調用方法調用方法,都是直接對象方法實參反射之后,動態調用方法需要使用即可。 大家好,樂字節小樂繼續為Java初學者講述Java基礎知識。上次說到樂字節Java反射之三:方法、數組、類加載器,這次是Java反射之四:反射相關操作 ...
摘要:一多個類的初始化在進入正文前首先根據上面的例子試圖猜測為了類中的函數能夠運行需要做哪些前置工作呢這些工作是以什么順序展開的呢為了更好的描述多個類的情形可以先試圖描述一個更簡單的例子把行和行和行注釋掉二類從到一句話把類從介質中復制到方法區通過 一)Example: 多個類的初始化 package me; class A { static int a = 1; static...
摘要:新生代又被劃分為三個區域和兩個幸存區。這樣劃分的目的是為了使能夠更好地管理堆內存中的對象,包括內存的分配及回收。新生代主要存儲新創建的對象和尚未進入老年代的對象。 在Java中主要有以下三種類加載器: 引導類加載器(bootstrap class loader) --用來加載java的核心庫(Strin...
閱讀 914·2021-11-22 13:54
閱讀 2843·2021-09-28 09:36
閱讀 2980·2019-08-30 15:55
閱讀 1952·2019-08-30 15:44
閱讀 544·2019-08-29 12:31
閱讀 2564·2019-08-28 18:18
閱讀 1199·2019-08-26 13:58
閱讀 1383·2019-08-26 13:44