中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中反射是什么意思

發布時間:2021-07-06 09:00:51 來源:億速云 閱讀:205 作者:chen 欄目:開發技術

這篇文章主要講解了“java中反射是什么意思”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java中反射是什么意思”吧!

目錄
  • 一、反射概述

  • 二、常用api

  • 三、創建Class對象的四種方式


一、反射概述

Reflection(反射)是被視為動態語言的關鍵,反射機制允許程序在執行期借助于Reflection API取得任何類的內部信息,并能直接操作任意 對象的內部屬性及方法。 加載完類之后,在堆內存的方法區中就產生了一個Class類型的對象 (一個類只有一個Class對象),這個對象就包含了完整的類的結構信 息。我們可以通過這個對象看到類的結構,這個對象就像一面鏡子,透 過這個鏡子看到類的結構,所以我們形象的稱之為反射。

二、常用api

java.lang.Class:代表一個類

java.lang.reflect.Method:代表類的方法

java.lang.reflect.Field:代表類的成員變量

java.lang.reflect.Constructor:代表類的構造器

static Class forName(String name) 返回指定類名 name 的 Class 對象

Object newInstance() 調用無參構造函數,返回該Class對象 的一個實例

getName() 返回此Class對象所表示的實體(類、 接口、數組類、基本類型或void)名稱

Class getSuperClass() 返回當前Class對象的父類的Class對象

Class [] getInterfaces() 獲取當前Class對象的接口

ClassLoader getClassLoader() 返回該類的類加載器

Class getSuperclass() 返回表示此Class所表示的實體的超類的Class

Constructor[] getConstructors() 返回一個包含某些Constructor對象的數組

Field[] getDeclaredFields() 返回Field對象的一個數組 Method

getMethod(String name,Class … paramTypes) 返回一個Method對象,此對象的形參類型為paramType

示例:

public class Person {
    private String name;
    private int age;
    public Person() {
        System.out.println("Person類被初始化了。。。。。^_^");
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
    }
}

反射

public class ClassDemo {
    public static void main(String[] args) throws
        Exception {
        // 1. 創建Class對象
        //Class<Person> clazz = (Class<Person>)
        Class.forName("Person");
        Class<?> clazz =Class.forName("Person");
            // 2. 通過Class對象調用其方法
            // 2.1. 通過反射來實例化對象
            //Person person = clazz.newInstance();
            Object o = clazz.newInstance(); // 此名就相當于
        Person p = new Person()
            // 2.2. 獲取類的完整類名稱(包名+類名)
            String name = clazz.getName();
        System.out.println(name);
        // 2.3. 獲取類的簡單名稱,就是類的名稱,不含包名
        System.out.println(clazz.getSimpleName());
        // 2.4. 獲取構造器
        Constructor<?>[] constructors =
            clazz.getConstructors();
        for (Constructor<?> constructor :
             constructors) {
            System.out.println(constructor.getName());
        }
        // 2.5. 獲取字段
        Field[] fields = clazz.getFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }
        // 2.6. 獲取方法
        Method[] methods = clazz.getMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
    }
}

三、創建Class對象的四種方式

public class Demo {
    public static void main(String[] args) throws
        Exception {
        // 第一種方式:調用Class.forName()
        Class clazz =Class.forName("java.lang.String");
        // 第二種方式:通過類的字節碼文件來創建
        Class clazz1 = String.class;
        // 第三種方式:通過調用對象的getClass()方法來創建
        String str = new String();
        Class clazz2 = str.getClass();
        // 第四種:通過類裝載器來創建
        ClassLoader loader =String.class.getClassLoader();
        Class<?> clazz3 =loader.loadClass("java.lang.String");
    }
}

感謝各位的閱讀,以上就是“java中反射是什么意思”的內容了,經過本文的學習后,相信大家對java中反射是什么意思這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五台县| 巨鹿县| 洛阳市| 崇左市| 罗江县| 铁力市| 和政县| 原阳县| 高雄县| 蕉岭县| 江城| 四川省| 津南区| 义马市| 宜君县| 满洲里市| 年辖:市辖区| 荥经县| 山阳县| 五家渠市| 高邑县| 阳高县| 锦州市| 长兴县| 三明市| 启东市| 阿拉善左旗| 即墨市| 鸡西市| 平凉市| 旬邑县| 安陆市| 哈巴河县| 彭山县| 通榆县| 兴和县| 昆明市| 阳曲县| 罗山县| 江达县| 五河县|