欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

新手了解java 反射基礎(chǔ)知識

 更新時間:2021年07月05日 16:39:04   作者:王星偉QAQ  
這篇文章主要介紹了Java反射機制的相關(guān)內(nèi)容,涉及了class類的動態(tài)加載,獲取成員變量、構(gòu)造函數(shù)信息等信息,需要的朋友可以參考下,希望對你有所幫助

一、反射概述

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

二、常用api

java.lang.Class:代表一個類

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

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

java.lang.reflect.Constructor:代表類的構(gòu)造器

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

Object newInstance() 調(diào)用無參構(gòu)造函數(shù),返回該Class對象 的一個實例

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

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

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

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

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

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

Field[] getDeclaredFields() 返回Field對象的一個數(shù)組 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. 創(chuàng)建Class對象
        //Class<Person> clazz = (Class<Person>)
        Class.forName("Person");
        Class<?> clazz =Class.forName("Person");
            // 2. 通過Class對象調(diào)用其方法
            // 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. 獲取構(gòu)造器
        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());
        }
    }
}

三、創(chuàng)建Class對象的四種方式

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

總結(jié)

本篇文章就到這里了,希望對你有所幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • hibernate批量操作實例詳解

    hibernate批量操作實例詳解

    這篇文章主要介紹了hibernate批量操作,結(jié)合實例形式分析了Hibernate實現(xiàn)批量插入,更新及刪除等操作的具體實現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • springboot整合freemarker代碼自動生成器

    springboot整合freemarker代碼自動生成器

    最近做了一個工具,可以實現(xiàn)代碼自動生成,今天整理出來分享給大家,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 淺析Spring的JdbcTemplate方法

    淺析Spring的JdbcTemplate方法

    本篇淺析Spring的JdbcTemplate方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列

    SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列

    RabbitMQ的死信隊列用于接收其他隊列中的“死信”消息,所謂“死信”,是指滿足一定條件而無法被消費者正確處理的消息,死信隊列通常與RabbitMQ的延遲隊列一起使用,本文給大家介紹了SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列,需要的朋友可以參考下
    2024-06-06
  • Java使用split截取字符串過程解析

    Java使用split截取字符串過程解析

    這篇文章主要介紹了Java使用split截取字符串過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于MyBatis中SqlSessionFactory和SqlSession簡解

    關(guān)于MyBatis中SqlSessionFactory和SqlSession簡解

    這篇文章主要介紹了MyBatis中SqlSessionFactory和SqlSession簡解,具有很好的參考價值,希望大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringMvc響應數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼

    SpringMvc響應數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼

    這篇文章主要介紹了SpringMvc響應數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java排序之冒泡排序的實現(xiàn)與優(yōu)化

    Java排序之冒泡排序的實現(xiàn)與優(yōu)化

    冒泡排序是一種簡單的交換排序。之所以叫做冒泡排序,因為我們可以把每個元素當成一個小氣泡,根據(jù)氣泡大小,一步一步移動到隊伍的一端,最后形成一定對的順序。本文將利用Java實現(xiàn)冒泡排序,并進行一定的優(yōu)化,希望對大家有所幫助
    2022-11-11
  • Java中二叉樹的先序、中序、后序遍歷以及代碼實現(xiàn)

    Java中二叉樹的先序、中序、后序遍歷以及代碼實現(xiàn)

    這篇文章主要介紹了Java中二叉樹的先序、中序、后序遍歷以及代碼實現(xiàn),一棵二叉樹是結(jié)點的一個有限集合,該集合或者為空,或者是由一個根節(jié)點加上兩棵別稱為左子樹和右子樹的二叉樹組成,需要的朋友可以參考下
    2023-11-11
  • ReentrantLock重入鎖底層原理示例解析

    ReentrantLock重入鎖底層原理示例解析

    這篇文章主要為大家介紹了ReentrantLock重入鎖底層原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論