初識java反射

1虫溜、首先一個問題雹姊,什么是類,類是不是對象衡楞?

我們總是說我們new一個對象出來

那么我們還沒有new的時候吱雏,建造的那個java類是不是對象呢?

類是對象瘾境,類是java.lang.Class類的實例對象

對于反射歧杏,我們需要了解Class類(自行百度)

任何一個類都是Class的實例對象,這個實例對象有三種表達方式
第一種表達方式:實際在告訴我們?nèi)魏我粋€類都有一個隱含的靜態(tài)的靜態(tài)成員變量class
Class c1=foo.class;

第二種表達方式:已經(jīng)知道該類的對象通過getClass方式
Class c2=foo1.getClass();

第三種表達方式:
Class c3=null;
可以通過類的類類型創(chuàng)建該類的對象實例

c3=Class.forName("類的地址");
//必須有無參的構造方法
Foo foo=(Foo)c1.newInstance();

c1,c2,c3表示了Foo類的類類型(class type)
需要知道的是類的類類型是一樣的迷守,都指的是一個犬绒,所以c1,c2,c3都是一樣的。都是相等的兑凿。

package reflect;

public class Reflect
{
    public static void main(String[] args) 
    {
        Foo foo=new Foo();
        //第一種表示方式--->實際在告訴我們?nèi)魏我粋€類都有一個隱含的靜態(tài)成員變量class
        Class c1=Foo.class;
        //第二中表達方式  已經(jīng)知道該類的對象通過getClass方法
        Class c2=foo.getClass();
        //第三種
        Class c3=null;
        try 
        {
            c3=Class.forName("reflect.Foo");
        } 
        catch (ClassNotFoundException e)
        {   
            e.printStackTrace();
        }
            
        try 
        {
            
            System.out.println(c2==c3);
            System.out.println(c1==c2);
            System.out.println(c1==c3);
            //需要有無參數(shù)的構造方法
            foo=(Foo) c1.newInstance();
            foo.pint();
            foo.print("hello world");
        } 
        catch (Exception e)
        {
            
            e.printStackTrace();
        } 
    }

}
class Foo
{
    public void pint()
    {
        System.out.println("反射");
    }
    public void print(String a)
    {
        System.out.println(a);
    }
}

方法反射的操作

要獲取反射對象的方法凯力,首先獲取類的信息,獲取類的類類型
獲取方法 名稱和參數(shù)列表來決定
getMethod獲取為public的方法
getDelcaredMethod獲取自己聲明的方法

package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MethodDemo01 
{

    
    public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException 
    {
        //要獲取print(int n,int m)的方法礼华,首先獲取類的信息咐鹤,獲取類的類類型
        A a=new A();
        Class c=a.getClass();

            /**
             * 獲取方法 名稱和參數(shù)列表來決定 
             * getMethod獲取為public的方法
             * getDelcaredMethod獲取自己聲明的方法
             */
            Method m=c.getMethod("print", int.class,int.class);
            Method m1=c.getMethod("print", String.class,String.class);
            Method m2=c.getMethod("print", new Class[]{});
            Method m3=c.getMethod("print",int.class);
            
                //invoke方法的反射操作,如果有值就返回圣絮,如果沒有值就是null類型
                Object o=m.invoke(a, 10,20);
                o=m1.invoke(a, "hello","world");
                o=m2.invoke(a);
                Object w=(Integer) m3.invoke(a, 50);
                System.out.println(w);
    }

}
class A
{
    public void print()
    {
        System.out.println("反射機制");
    }
    
    public void print(int n,int m)
    {
        System.out.println(n+m);
    }
    public void print(String a,String b)
    {
        System.out.println(a+" "+b);
    }
    public Object print(int a)
    {
        return a;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祈惶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扮匠,更是在濱河造成了極大的恐慌捧请,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棒搜,死亡現(xiàn)場離奇詭異血久,居然都是意外死亡,警方通過查閱死者的電腦和手機帮非,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門氧吐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人末盔,你說我怎么就攤上這事筑舅。” “怎么了陨舱?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵翠拣,是天一觀的道長。 經(jīng)常有香客問我游盲,道長误墓,這世上最難降的妖魔是什么蛮粮? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮谜慌,結果婚禮上然想,老公的妹妹穿的比我還像新娘。我一直安慰自己欣范,他們只是感情好变泄,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恼琼,像睡著了一般妨蛹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晴竞,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天蛙卤,我揣著相機與錄音,去河邊找鬼噩死。 笑死表窘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的甜滨。 我是一名探鬼主播乐严,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衣摩!你這毒婦竟也來了昂验?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艾扮,失蹤者是張志新(化名)和其女友劉穎既琴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泡嘴,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡甫恩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年酌予,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抛虫。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖建椰,靈堂內(nèi)的尸體忽然破棺而出雕欺,到底是詐尸還是另有隱情,我是刑警寧澤屠列,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站笛洛,受9級特大地震影響,放射性物質發(fā)生泄漏撞蜂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一蝌诡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枫吧,春花似錦浦旱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至例隆,卻和暖如春甥捺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镀层。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工镰禾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唱逢。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓吴侦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坞古。 傳聞我的和親對象是個殘疾皇子备韧,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法痪枫,內(nèi)部類的語法织堂,繼承相關的語法,異常的語法奶陈,線程的語...
    子非魚_t_閱讀 31,645評論 18 399
  • 前言捧挺,本來只是想研究一下注解的,不過發(fā)現(xiàn)尿瞭,要懂注解先得懂反射闽烙,別問我為什么,你可以自己試試 JAVA反射 主要是指...
    justCode_閱讀 1,225評論 2 9
  • 反射的概念 Java反射是Java被視為動態(tài)(或準動態(tài))語言的一個關鍵性質。這個機制允許程序在運行時透過Refle...
    少冰三hun甜閱讀 332評論 0 0
  • 整體Retrofit內(nèi)容如下: 1黑竞、Retrofit解析1之前哨站——理解RESTful 2捕发、Retrofit解析...
    隔壁老李頭閱讀 4,584評論 2 12
  • 前兩天出差返回深圳扎酷,我在廣州南站轉車到深圳北站,由于前面這趟到廣州南的動車因為路線信號故障的原因遏匆,晚點了90多分鐘...
    一盧同行閱讀 1,201評論 1 2