摘要:本文承接上一篇樂字節(jié)發(fā)射之二實例化對象接口與父類修飾符和屬性繼續(xù)講述反射之三方法數(shù)組類加載器一方法獲取所有方法包括父類或接口,使用即可。當(dāng)沒有任何引用指向?qū)ο髸r就會被卸載,結(jié)束類的生命周期。
本文承接上一篇:樂字節(jié)Java發(fā)射之二:實例化對象、接口與父類、修飾符和屬性
繼續(xù)講述Java反射之三:方法、數(shù)組、類加載器
一、方法獲取所有方法(包括父類或接口),使用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、權(quán)限 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、參數(shù) 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 二、 數(shù)組 操作數(shù)組需要借助Array類。
//1、創(chuàng)建數(shù)組 Object obj =Array.newInstance(int.class, 5); //2、獲取大小 if(obj.getClass().isArray()){ //3、判斷是否為數(shù)組 System.out.println(Array.getLength(obj)); //4、設(shè)置值 Array.set(obj,0, 100); //5、獲取值 System.out.println(Array.get(obj,0)); }三、 類加載器在java中有三種類類加載器:
⑴Bootstrap ClassLoader 此加載器采用c++編寫,一般開發(fā)中很少見。
⑵Extension ClassLoader 用來進行擴展類的加載,一般對應(yīng)的是jrelibext目錄中的類
⑶AppClassLoader 加載classpath指定的類,是最常用的加載器。同時也是java中默認(rèn)的加載器。 了解即可。
public static void main(String[] args) throws Exception { System.out.println("類加載器 "+ClassLoader.class.getClassLoader().getClass().getName()); }四、類的生命周期在一個類編譯完成之后,下一步就需要開始使用類,如果要使用一個類,肯定離不開JVM。在程序執(zhí)行中JVM通過裝載,鏈接,初始化這3個步驟完成。
類的裝載是通過類加載器完成的,加載器將.class文件的二進制文件裝入JVM的方法區(qū),并且在堆區(qū)創(chuàng)建描述這個類的java.lang.Class對象。用來封裝數(shù)據(jù)。 但是同一個類只會被類裝載器裝載一次。
鏈接就是把二進制數(shù)據(jù)組裝為可以運行的狀態(tài)。鏈接分為校驗,準(zhǔn)備,解析這3個階段
1、校驗一般用來確認(rèn)此二進制文件是否適合當(dāng)前的JVM(版本),
2、準(zhǔn)備就是為靜態(tài)成員分配內(nèi)存空間。并設(shè)置默認(rèn)值
3、解析指的是轉(zhuǎn)換常量池中的代碼作為直接引用的過程,直到所有的符號引用都可以被運行程序使用(建立完整的對應(yīng)關(guān)系)
完成之后,類型也就完成了初始化,初始化之后類的對象就可以正常使用了,直到一個對象不再使用之后,將被垃圾回收。釋放空間。當(dāng)沒有任何引用指向Class對象時就會被卸載,結(jié)束類的生命周期。
樂字節(jié)原創(chuàng),歡迎繼續(xù)關(guān)注 樂字節(jié)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/75245.html
摘要:大家好,樂字節(jié)小樂繼續(xù)為初學(xué)者講述基礎(chǔ)知識。上次說到樂字節(jié)反射之三方法數(shù)組類加載器,這次是反射之四反射相關(guān)操作操作屬性獲取對象獲取對象設(shè)置屬性打開權(quán)限獲取此屬性調(diào)用方法調(diào)用方法,都是直接對象方法實參反射之后,動態(tài)調(diào)用方法需要使用即可。 大家好,樂字節(jié)小樂繼續(xù)為Java初學(xué)者講述Java基礎(chǔ)知識。上次說到樂字節(jié)Java反射之三:方法、數(shù)組、類加載器,這次是Java反射之四:反射相關(guān)操作 ...
摘要:一多個類的初始化在進入正文前首先根據(jù)上面的例子試圖猜測為了類中的函數(shù)能夠運行需要做哪些前置工作呢這些工作是以什么順序展開的呢為了更好的描述多個類的情形可以先試圖描述一個更簡單的例子把行和行和行注釋掉二類從到一句話把類從介質(zhì)中復(fù)制到方法區(qū)通過 一)Example: 多個類的初始化 package me; class A { static int a = 1; static...
摘要:新生代又被劃分為三個區(qū)域和兩個幸存區(qū)。這樣劃分的目的是為了使能夠更好地管理堆內(nèi)存中的對象,包括內(nèi)存的分配及回收。新生代主要存儲新創(chuàng)建的對象和尚未進入老年代的對象。 在Java中主要有以下三種類加載器: 引導(dǎo)類加載器(bootstrap class loader) --用來加載java的核心庫(Strin...
閱讀 988·2021-11-22 13:54
閱讀 2937·2021-09-28 09:36
閱讀 3037·2019-08-30 15:55
閱讀 2005·2019-08-30 15:44
閱讀 596·2019-08-29 12:31
閱讀 2616·2019-08-28 18:18
閱讀 1266·2019-08-26 13:58
閱讀 1498·2019-08-26 13:44