国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

反射機(jī)制個(gè)人筆記

2019-11-14 15:38:10
字體:
供稿:網(wǎng)友

一個(gè)類有多個(gè)組成部分,例如:成員變量,方法,構(gòu)造方法等。
反射就是加載類,并解剖出類的各個(gè)組成部分

反射:加載類獲得類的直接碼(3種方法)

    1.Class clazz =Class.forName("cn.itcast.reflect.person");
    2.Class clazz1=new Person().getClass();
    3.Class clazz2=person.class;

反射構(gòu)造函數(shù),創(chuàng)建類的對(duì)象

    帶String參數(shù)的構(gòu)造函數(shù)
    Class clazz =Class.forname("cn.itcast.reflect.person");//加載類
    Constructor c=clazz.getConstructor(String.class); //創(chuàng)建構(gòu)造函數(shù)
    Person p=(person) c.newInstance("xxxx");  //創(chuàng)建實(shí)例并傳參

    帶String int的構(gòu)造函數(shù)函數(shù)
    Class clazz =Class.forname("cn.itcast.reflect.person");//加載類
    Constructor c=clazz.getConstructor(String.class,int.class); //創(chuàng)建構(gòu)造函數(shù)
    Person p=(person) c.newInstance("xxxx",12);  //創(chuàng)建實(shí)例并傳參
    
    私有構(gòu)造函數(shù)
    Class clazz =Class.forname("cn.itcast.reflect.person");//加載類
    Constructor c=clazz.getDeclareConstructor(List.class); //創(chuàng)建構(gòu)造函數(shù)
    c.setaccessible(ture);//暴力反射,可以反射私有構(gòu)造函數(shù),實(shí)現(xiàn)訪問私有
    Person p=(person) c.newInstance(new ArrayList());  //創(chuàng)建實(shí)例并傳參
    
創(chuàng)建對(duì)象的另外一種途徑
    Class clazz =Class.forname("cn.itcast.reflect.person");//加載類
    person p=(Person) clazz.newInstance();
    不用反射構(gòu)造函數(shù),實(shí)際上他反射的是這個(gè)類的無參構(gòu)造函數(shù)。想要這個(gè)方法正常
    工作,意味著這個(gè)類里面必須要有一個(gè)無參構(gòu)造函數(shù)
    這個(gè)方法等效于
    Class clazz =Class.forname("cn.itcast.reflect.person");//加載類
    Constructor c=clazz.getConstructor(null); //創(chuàng)建構(gòu)造函數(shù)
    Person p=(person) c.newInstance(null);  //創(chuàng)建實(shí)例并傳參


反射類的方法
    反射類的方法:public void aa1()

    person p =new Person();
    Class clazz=class.forName("cn.itcast.reflect.person");
    Method method=clazz.getMethod("aa1",null);
    method.invoke(p,null);

    反射類的方法:public void aa1(string name,int passworld)

        person p=new Person();
    Class clazz=class.forName("cn.itcast.reflect.person");
    Method method=clazz.getMethod("aa1",String.class,int.class);
    method.invoke(p,"zxx",38);

    反射類的方法:public class[] aa1(String name,int[] passworld)

    person p=new Person();
    Class clazz=class.forName("cn.itcast.reflect.person");
    Method method=clazz.getMethod("aa1",String.class,int[].class);
    Class cs[]=(Class[]) method.invoke(p,"aaa",new int[]{1,23});

    反射類的方法:PRivate void aa1(InputStream in)

    person p=new Person();
    Class class="class".forname("cn.itcast.reflect.person");
    Method method=clazz.getDeclaredMethod("aa1",InputStream.class);
    method.setAccessible(true);
    mrthod.invoke(p,new FileInputStream("c://1.txt"));
    
    反射類的方法:public static void aa1(int num)

    person p=new Person();
    Class class="class".forname("cn.itcast.reflect.person");
    Method method=class.getMethod("aa1",int.class);
    method.invoke(null,23)

    反射類的方法:public static void main(String[] args)

    Class clazz=class.forname("cn.itcast.reflect.person");
    Method method=class.getMethod("main",String[].class);
    //method.invoke(null,(Object)new String[]("aa","bb"));
    method.invoke(null,new Object[](new String[]("aa","bb")));

當(dāng)反射的方法參數(shù)是數(shù)組時(shí)要注意,若直接寫“method.invoke(null,new String[]("aa","bb"))”會(huì)報(bào)參數(shù)個(gè)數(shù)的錯(cuò),
在jdk1.4中其會(huì)將其解析為a(String s1,String s2)將數(shù)組拆開作為參數(shù)。而其后高版本的jdk都兼容1.4版本。
這個(gè)問題是由jdk引起的。所以應(yīng)該用以上的2種方法將參數(shù)是數(shù)組的方法的反射方式進(jìn)行改寫。

反射類的字段
    反射字段:public String name="aaaa";
    public void test1() throw Exception{
        person p=new person();
        Class clazz=Class.forName("cn.itcast.reflect.person");
        Field f=clazz.getField("name");
        Object obj=f.get(p);//獲取字段的值
        Class type=f.getType();//獲取字段的類型
        f.set(p,"xxxxx");設(shè)置字段的值
        }

    反射字段:private int name="aaaa";
    public void test2() throw Exception{
        person p=new person();
        Class clazz=Class.forName("cn.itcast.reflect.person");
        Field f=clazz.getDeclareField("passworld");
        f.setAccessible(true);
        //Object obj=f.get(p);//獲取字段的值
        //Class type=f.getType();//獲取字段的類型
        //f.set(p,"xxxxx");設(shè)置字段的值
        system.out.println(f.get(p));
        }

    反射字段:private static int age=23;
    public void test3() throw Exception{
        person p=new person();
        Class clazz=Class.forName("cn.itcast.reflect.person");
        Field f=clazz.getDeclareField("age");
        f.setAccessible(true);
        //Object obj=f.get(p);//獲取字段的值
        //Class type=f.getType();//獲取字段的類型
        //f.set(p,"xxxxx");設(shè)置字段的值
        system.out.println(f.get(p));
        }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 菏泽市| 谢通门县| 台东市| 九江县| 大新县| 和林格尔县| 抚顺县| 江山市| 沈阳市| 晴隆县| 扶风县| 九龙城区| 泽库县| 循化| 岳西县| 开平市| 玉树县| 仁布县| 汕头市| 固始县| 图木舒克市| 翁牛特旗| 大兴区| 平邑县| 麦盖提县| 遵义县| 商洛市| 紫云| 平陆县| 田阳县| 华坪县| 绵阳市| 富民县| 荣昌县| 巫溪县| 离岛区| 嘉义市| 神木县| 彩票| 广德县| 揭东县|