成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

樂字節(jié)Java反射之三:方法、數(shù)組、類加載器和類的生命周期

ChanceWong / 697人閱讀

摘要:本文承接上一篇樂字節(jié)發(fā)射之二實(shí)例化對(duì)象接口與父類修飾符和屬性繼續(xù)講述反射之三方法數(shù)組類加載器一方法獲取所有方法包括父類或接口,使用即可。當(dāng)沒有任何引用指向?qū)ο髸r(shí)就會(huì)被卸載,結(jié)束類的生命周期。

本文承接上一篇:樂字節(jié)Java發(fā)射之二:實(shí)例化對(duì)象、接口與父類、修飾符和屬性

繼續(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;i p =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 用來進(jìn)行擴(kuò)展類的加載,一般對(duì)應(yīng)的是jrelibext目錄中的類

⑶AppClassLoader 加載classpath指定的類,是最常用的加載器。同時(shí)也是java中默認(rèn)的加載器。 了解即可。

public static void main(String[] args) throws Exception {
         System.out.println("類加載器  "+ClassLoader.class.getClassLoader().getClass().getName());
    }

四、類的生命周期

在一個(gè)類編譯完成之后,下一步就需要開始使用類,如果要使用一個(gè)類,肯定離不開JVM。在程序執(zhí)行中JVM通過裝載,鏈接,初始化這3個(gè)步驟完成。

類的裝載是通過類加載器完成的,加載器將.class文件的二進(jìn)制文件裝入JVM的方法區(qū),并且在堆區(qū)創(chuàng)建描述這個(gè)類的java.lang.Class對(duì)象。用來封裝數(shù)據(jù)。 但是同一個(gè)類只會(huì)被類裝載器裝載一次。

鏈接就是把二進(jìn)制數(shù)據(jù)組裝為可以運(yùn)行的狀態(tài)。鏈接分為校驗(yàn),準(zhǔn)備,解析這3個(gè)階段

1、校驗(yàn)一般用來確認(rèn)此二進(jìn)制文件是否適合當(dāng)前的JVM(版本),

2、準(zhǔn)備就是為靜態(tài)成員分配內(nèi)存空間。并設(shè)置默認(rèn)值

3、解析指的是轉(zhuǎn)換常量池中的代碼作為直接引用的過程,直到所有的符號(hào)引用都可以被運(yùn)行程序使用(建立完整的對(duì)應(yīng)關(guān)系)

完成之后,類型也就完成了初始化,初始化之后類的對(duì)象就可以正常使用了,直到一個(gè)對(duì)象不再使用之后,將被垃圾回收。釋放空間。當(dāng)沒有任何引用指向Class對(duì)象時(shí)就會(huì)被卸載,結(jié)束類的生命周期。

樂字節(jié)原創(chuàng),歡迎繼續(xù)關(guān)注 樂字節(jié)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75245.html

相關(guān)文章

  • 字節(jié)Java反射之四:反射相關(guān)操作

    摘要:大家好,樂字節(jié)小樂繼續(xù)為初學(xué)者講述基礎(chǔ)知識(shí)。上次說到樂字節(jié)反射之三方法數(shù)組類加載器,這次是反射之四反射相關(guān)操作操作屬性獲取對(duì)象獲取對(duì)象設(shè)置屬性打開權(quán)限獲取此屬性調(diào)用方法調(diào)用方法,都是直接對(duì)象方法實(shí)參反射之后,動(dòng)態(tài)調(diào)用方法需要使用即可。 大家好,樂字節(jié)小樂繼續(xù)為Java初學(xué)者講述Java基礎(chǔ)知識(shí)。上次說到樂字節(jié)Java反射之三:方法、數(shù)組、類加載器,這次是Java反射之四:反射相關(guān)操作 ...

    DevYK 評(píng)論0 收藏0
  • Java生命周期簡(jiǎn)述

    摘要:一多個(gè)類的初始化在進(jìn)入正文前首先根據(jù)上面的例子試圖猜測(cè)為了類中的函數(shù)能夠運(yùn)行需要做哪些前置工作呢這些工作是以什么順序展開的呢為了更好的描述多個(gè)類的情形可以先試圖描述一個(gè)更簡(jiǎn)單的例子把行和行和行注釋掉二類從到一句話把類從介質(zhì)中復(fù)制到方法區(qū)通過 一)Example: 多個(gè)類的初始化 package me; class A { static int a = 1; static...

    qpwoeiru96 評(píng)論0 收藏0
  • java加載機(jī)制

    摘要:在加載階段,虛擬機(jī)要完成件事情通過一個(gè)類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流。前面的階段中,除了加載的時(shí)候,可以由用戶指定自定義類加載器之外,別的都是由虛擬機(jī)主導(dǎo)控制。 java類加載機(jī)制 代碼編譯的結(jié)果從本地機(jī)器碼轉(zhuǎn)變?yōu)樽止?jié)碼,是存儲(chǔ)格式發(fā)展的一小步,確實(shí)編程語言發(fā)展的一大步 虛擬機(jī)把描述類的數(shù)據(jù)從class文件加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)、轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直...

    garfileo 評(píng)論0 收藏0
  • 虛擬機(jī)加載機(jī)制

    摘要:加載階段在類的加載階段,虛擬機(jī)需要完成以下件事情通過一個(gè)類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流。驗(yàn)證階段驗(yàn)證是連接階段的第一步,這一階段的目的是為了確保文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)自身的安全。 注:本篇文章中的內(nèi)容是根據(jù)《深入理解Java虛擬機(jī)--JVM高級(jí)特性與最佳實(shí)踐》而總結(jié)的,如有理解錯(cuò)誤,歡迎大家指正! 虛擬機(jī)把描述類的數(shù)據(jù)從Class文件...

    k00baa 評(píng)論0 收藏0
  • JVM 知識(shí)點(diǎn) 01

    摘要:新生代又被劃分為三個(gè)區(qū)域和兩個(gè)幸存區(qū)。這樣劃分的目的是為了使能夠更好地管理堆內(nèi)存中的對(duì)象,包括內(nèi)存的分配及回收。新生代主要存儲(chǔ)新創(chuàng)建的對(duì)象和尚未進(jìn)入老年代的對(duì)象。 在Java中主要有以下三種類加載器: 引導(dǎo)類加載器(bootstrap class loader) --用來加載java的核心庫(kù)(Strin...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<