亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java從零開始學四十一(反射簡述二)

2019-11-14 23:22:10
字體:
來源:轉載
供稿:網友
java從零開始學四十一(反射簡述二)一、實例化Class類對象實例化Class類對象的方法有三種:
  • 第一種:通過forName()方法
  • 第二種:類.class
  • 第三種:對象.getClass()
二、Class類的常用方法
No.方法類型描述
1public static Class<?> forName(String className) throws ClassNotFoundException普通傳入完整的“包.類”名稱實例化Class對象
2public Constructor[] getConstructors() throws SecurityException普通得到一個類中的全部構造方法
3public Field[] getDeclaredFields() throws SecurityException普通得到一個類父類中的全部屬性
4public Field[] getFields() throws SecurityException普通取得本類的全部屬性
5public Method[] getMethods() throws SecurityException普通得到一個類中的全部方法
6public Method getMethod(String name,Class... parameterTypes)throws NoSuchMethodException,SecurityException普通返回一個Method對象,并設置一個方法中的所有參數類型
7public Class[] getInterfaces()普通得到一個類中所實現的全部接口
8public String getName()普通得到一個類完整的“包.類”名稱
9public Package getPackage()普通得到一個類的包
10public Class getSuperclass()普通得到一個類的父類
11public Object newInstance() throws InstantiationException,IllegalaccessException普通根據Class定義的類實例化對象
12public Class<?> getComponentType()普通返回表示數組類型的Class
13public boolean isArray()普通判斷此Class是否是一個數組

三、獲取類的信息
package com.pb.reflect;/* * 1.包 * 2.注解 * 3.構造方法 * 4.方法 * 5.內部類 */@DePRecatedpublic class ReflectDemo2 {    //私有的構造方法    private ReflectDemo2(){};    //公有的帶一個一個name屬性的構造方法    public ReflectDemo2(String name){            };    //無參數的info方法    public void info(){};    //有參數的info方法    public void info(String str){};    //內部類    class inner{};    }

測試類

package demo;import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.pb.reflect.ReflectDemo2;public class Demo3 {    public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException {        //獲取ReflectDemo2的Class對象        Class<ReflectDemo2> cla=ReflectDemo2.class;        //獲取ReflectDemo2中全部構造方法        Constructor[] constructors=cla.getDeclaredConstructors();        for (Constructor con : constructors) {            System.out.println(con);        }        //獲取指定的公有構造方法        System.out.println("====獲取指定的公有構造方法========");        Constructor []  pub=cla.getConstructors();        for (Constructor c : pub) {            System.out.println(c.toString());        }        //獲取公有的方法        System.out.println("====獲取公有的方法======");        Method [] methods=cla.getMethods();        for (Method meth : methods) {            System.out.println(meth.toString());        }        //獲取指定方法        System.out.println("====獲取指定的的方法======");        //獲取info不帶參數方法        Method method=cla.getMethod("info",null);        System.out.println(method.toString());        //獲取info帶一個String參數的方法        Method meth=cla.getMethod("info", String.class);        System.out.println(meth.toString());        System.out.println("=====獲取注釋=======");        Annotation [] annotations=cla.getAnnotations();        for (Annotation anno : annotations) {            System.out.println(anno.toString());        }        //獲取得包信息        System.out.println("=====獲取得包信息=======");        Package pack=cla.getPackage();        System.out.println(pack.toString());        //獲取內部類        System.out.println("=====獲取內部類=======");        Class [] clas=cla.getDeclaredClasses();        for (Class c : clas) {            System.out.println(c.toString());        }        System.out.println("=====獲取父類=======");        Class class2=cla.getSuperclass();        System.out.println(class2.toString());        //獲取內部類的對象        Class innercla=Class.forName("com.pb.reflect.ReflectDemo2$inner");        System.out.println("內部類對應的外部類:"+innercla.getDeclaringClass());        System.out.println("內部類的包:"+innercla.getPackage());        System.out.println("內部類的父類:"+innercla.getSuperclass());    }}
四、創建對象

直接使用newInstance方法創建對象

package demo;import java.util.Date;public class Demo4 {    public static void main(String[] args) throws InstantiationException, IllegalAccessException {        //獲取Date類的Class對象        Class cla=Date.class;        //使用newInstrance方法創建對象    Date date=(Date) cla.newInstance();    System.out.println(date.toString());    }}

指定的構造方法創建對象

package demo;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.util.Date;public class Demo4 {    public static void main(String[] args) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {        //獲取Date類的Class對象        Class cla=Date.class;        //獲取指定參數的構造方法帶一個長整型參數的構造方法        Constructor constructor=cla.getConstructor(long.class);        //使用newInstrance方法創建對象    Date date=(Date) constructor.newInstance(1999);    System.out.println(date.toString());    }}
五、調用方法

package com.pb.reflect;public class Person {    private String name;    private String gender;    private int age;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }        public String getSay(){        return this.name+" /t"+this.gender+"/t"+this.age;    }}

測試類

package demo;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import com.pb.reflect.Person;public class Demo6 {    public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {        //得到Person類的Class對象        Class cla=Person.class;        //聲明一個Person對象        Person p=new Person();        //調用setName方法        Method method=cla.getMethod("setName", String.class);        //使用invoke賦值        method.invoke(p, "張三");        //調用setGender方法        Method setGender=cla.getMethod("setGender", String.class);        setGender.invoke(p, "女");        //調用setAge方法        Method setAge=cla.getMethod("setAge", int.class);        setAge.invoke(p, 23);        //調用get方法 get方法沒有參數設置為null        Method getName=cla.getMethod("getName", null);        Object o=getName.invoke(p, null);        System.out.println(o.toString());        Method getGender=cla.getMethod("getGender", null);        Object    o1=getGender.invoke(p, null);        System.out.println(o1.toString());        Method getAge=cla.getMethod("getAge", null);        Object o2=getAge.invoke(p, null);        System.out.println(o2.toString());        Method say=cla.getMethod("getSay", null);        Object o3=say.invoke(p, null);        System.out.println(o3.toString());    }}

結果:

張三女23張三     女    23

六、調用屬性

package com.pb.reflect;public class Person {    private String name;    private String gender;    private int age;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }        public String getSay(){        return"姓名:"+this.name+" /t性別:"+this.gender+"/t年齡:"+this.age;    }}

測試類

package demo1;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Calendar;import com.pb.reflect.Person;public class Test2 {    public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {        //聲明Person對象        Person p=new Person();        //通過反射重到Person的Class對象        Class cla=Person.class;        //因為Person類的屬性都是私有的要用getDeclaredField        Field name=cla.getDeclaredField("name");        //臨時取消權限檢查        name.setAccessible(true);        name.set(p, "張三豐");        //獲取年齡        Field gender=cla.getDeclaredField("gender");        //臨時取消權限檢查        gender.setAccessible(true);        //賦值        gender.set(p, "男");        //獲取年齡        Field age=cla.getDeclaredField("age");        age.setAccessible(true);        age.setInt(p, 108);        //獲取say方法        Method getSay=cla.getMethod("getSay", null);        Object o=getSay.invoke(p, null);        System.out.println(o.toString());    }}

實際在在使用已知類時沒有必要使用反射,只有在程序需要動態創建某個類的對象的時候我們才會考慮使用反射

七、動態創建和訪問數組

package demo1;import java.lang.reflect.Array;public class ArrayTest1 {    /**     * 動態創建數組和訪問數組     */    public static void main(String[] args) {        //創建一個類型為String 的數組長度為10        Object arr=Array.newInstance(String.class, 10);        //依次為arr賦值        Array.set(arr, 0, "一");        Array.set(arr, 1, "二");        Array.set(arr, 2, "三");        Array.set(arr, 3, "四");        Array.set(arr, 4, "五");        Array.set(arr,5, "六");        Array.set(arr, 6, "七");        Array.set(arr, 7, "八");        Array.set(arr, 8, "九");        Array.set(arr, 9, "十");                //獲取值        Object o8=Array.get(arr, 8);        System.out.println("數組 中下標為8的值為"+o8);        Object o2=Array.get(arr, 2);        System.out.println("數組 中下標為2的值為"+o2);            }}
public static void main(String[] args) {        // 創建一個一維數組        Object arr1=Array.newInstance(int.class, 10);        //為下標為5,和8的賦值        Array.setInt(arr1, 5, 5);        Array.setInt(arr1, 8, 8);        //查看相應位置的內容        System.out.println(Array.get(arr1, 5));        System.out.println(Array.get(arr1, 8));    }

創建多維數組

package demo1;import java.lang.reflect.Array;public class ArrayTest2 {    /**     * 使用Array類創建二維數組     */    public static void main(String[] args) {        // 創建一個二維數組5,10        Object arr1=Array.newInstance(String.class, 5,10);        //為二維數組賦值        //首先獲取一維的維靈敏        Object firstIndex=Array.get(arr1, 4);        //4,6賦值        Array.set(firstIndex, 6,"張三");        //為3,8賦值        Object new_firstindex=Array.get(arr1, 3);        Array.set(new_firstindex, 8, "李四");        //值輸出        //將arr1數組強轉為2維數組        String [][] str=(String [][])arr1;        System.out.println(str[4][6]);        System.out.println(str[3][8]);    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情视频一区| 日本高清视频精品| 狠狠色狠狠色综合日日五| 国产欧美精品日韩| 日韩视频在线一区| 国语自产在线不卡| 国产综合在线观看视频| 91色在线视频| 91大神福利视频在线| 蜜月aⅴ免费一区二区三区| 日韩在线观看免费高清| 亚洲一区二区国产| 欧美大片在线免费观看| 国产精品一区二区三区成人| 日韩av综合网站| 亚洲人成网7777777国产| 中文字幕亚洲情99在线| 欧美老女人性视频| 97香蕉超级碰碰久久免费软件| 久久久久久com| 欧美一区二粉嫩精品国产一线天| 欧美在线精品免播放器视频| 成人免费午夜电影| 午夜精品久久久久久久99黑人| 欧美日韩在线另类| 日韩av在线直播| 最新日韩中文字幕| 亚洲成人av资源网| 欧美日韩加勒比精品一区| 欧美激情精品久久久久久免费印度| 91久久久久久久| 久久精品男人天堂| 国产精品aaaa| 国产精品999999| 两个人的视频www国产精品| 亚洲精品大尺度| 久久久久久久久国产精品| 136fldh精品导航福利| 亚洲成人激情视频| 日韩美女视频免费看| 亚洲女人天堂色在线7777| 亚洲免费一在线| 中文字幕视频在线免费欧美日韩综合在线看| 欧美最猛性xxxxx亚洲精品| 7777精品久久久久久| 亚洲高清av在线| 亚洲free嫩bbb| 欧美成人一区在线| 亚洲高清久久网| 91深夜福利视频| 高清一区二区三区日本久| 欧美国产日韩一区二区在线观看| 国产精品女视频| 欧美日韩国产91| 久久久久久久久中文字幕| 欧美日韩成人黄色| 欧美亚洲另类在线| 国产精品video| 欧美成年人视频网站欧美| 51色欧美片视频在线观看| 亚洲精品视频中文字幕| 欧美日韩免费在线观看| 91九色单男在线观看| 欧美精品少妇videofree| 国产日韩欧美视频| 美乳少妇欧美精品| 国产一区香蕉久久| 动漫精品一区二区| 欧美激情极品视频| 中文字幕亚洲无线码在线一区| 国内精品久久久| 一夜七次郎国产精品亚洲| 久久久精品视频在线观看| 午夜欧美不卡精品aaaaa| 疯狂蹂躏欧美一区二区精品| 亚洲欧美成人网| 欧美日韩视频在线| 国产中文字幕91| 日韩免费av一区二区| 538国产精品视频一区二区| 最近2019中文字幕大全第二页| 久久人人爽人人爽人人片av高清| 日韩激情av在线播放| 欧美性受xxxx黑人猛交| 国产日韩中文字幕在线| 91精品视频免费观看| 亚洲激情免费观看| 精品中文字幕久久久久久| 久久久久久久av| 日韩成人中文字幕| 欧美成人激情在线| 亚洲一区999| 国产精品视频男人的天堂| 亚洲综合日韩中文字幕v在线| 在线观看国产精品淫| 欧美与欧洲交xxxx免费观看| 98精品国产高清在线xxxx天堂| 久久亚洲综合国产精品99麻豆精品福利| 日韩av综合中文字幕| 成人精品aaaa网站| 日韩av电影免费观看高清| 久久精品色欧美aⅴ一区二区| 激情成人中文字幕| 国产裸体写真av一区二区| 午夜精品一区二区三区在线播放| 成人a免费视频| 亚洲精品动漫久久久久| 亚洲精品xxxx| 伊人成人开心激情综合网| 成人国产精品日本在线| 777国产偷窥盗摄精品视频| 欧美国产日韩一区二区| 在线a欧美视频| 久久999免费视频| 91手机视频在线观看| 欧美精品九九久久| 91在线观看免费观看| 亚洲第一精品久久忘忧草社区| 久久夜色精品国产欧美乱| 成人久久精品视频| 久久久久99精品久久久久| 亚洲国产欧美日韩精品| 亚洲欧美精品一区二区| 亚洲理论电影网| 亚洲天堂免费视频| 欧美一级在线播放| 久久在线免费观看视频| 在线色欧美三级视频| 久久久久久国产三级电影| 国产精品亚洲欧美导航| 国产精品欧美日韩| 91在线色戒在线| 欧美成人午夜影院| 久久综合免费视频影院| 欧美专区在线观看| 国产精品一区专区欧美日韩| 国产精品久久久久福利| 影音先锋日韩有码| 精品久久久久久久久久| 最新国产精品亚洲| 久久av在线播放| 亚洲品质视频自拍网| 国产精品a久久久久久| 国产黑人绿帽在线第一区| 欧美成人午夜免费视在线看片| 亚洲黄色av女优在线观看| 日韩免费观看高清| 欧美视频在线观看免费| 色妞在线综合亚洲欧美| 亚洲自拍偷拍色图| 亚洲午夜未满十八勿入免费观看全集| 欧美大人香蕉在线| 久久亚洲精品毛片| 日韩欧中文字幕| 成人免费视频在线观看超级碰| 国产精品爱久久久久久久| 欧美激情按摩在线| 一区二区三区回区在观看免费视频| 亚洲人成网站999久久久综合| 欧美成人激情视频| 国产精品亚洲第一区| 亚洲成人中文字幕| 日韩精品视频免费| 亚洲免费精彩视频|