最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、反射概述

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

二、常用api

java.lang.Class:代表一個(gè)類(lèi)

java.lang.reflect.Method:代表類(lèi)的方法

java.lang.reflect.Field:代表類(lèi)的成員變量

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

static Class forName(String name) 返回指定類(lèi)名 name 的 Class 對(duì)象

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

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

Class getSuperClass() 返回當(dāng)前Class對(duì)象的父類(lèi)的Class對(duì)象

Class [] getInterfaces() 獲取當(dāng)前Class對(duì)象的接口

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

Class getSuperclass() 返回表示此Class所表示的實(shí)體的超類(lèi)的Class

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

Field[] getDeclaredFields() 返回Field對(duì)象的一個(gè)數(shù)組 Method

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

示例:

public class Person {
    private String name;
    private int age;
    public Person() {
        System.out.println("Person類(lèi)被初始化了。。。。。^_^");
    }
    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對(duì)象
        //Class<Person> clazz = (Class<Person>)
        Class.forName("Person");
        Class<?> clazz =Class.forName("Person");
            // 2. 通過(guò)Class對(duì)象調(diào)用其方法
            // 2.1. 通過(guò)反射來(lái)實(shí)例化對(duì)象
            //Person person = clazz.newInstance();
            Object o = clazz.newInstance(); // 此名就相當(dāng)于
        Person p = new Person()
            // 2.2. 獲取類(lèi)的完整類(lèi)名稱(包名+類(lèi)名)
            String name = clazz.getName();
        System.out.println(name);
        // 2.3. 獲取類(lèi)的簡(jiǎn)單名稱,就是類(lèi)的名稱,不含包名
        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對(duì)象的四種方式

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

總結(jié)

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

相關(guān)文章

  • SpringBoot整合easy-es的詳細(xì)過(guò)程

    SpringBoot整合easy-es的詳細(xì)過(guò)程

    本文介紹了EasyES,一個(gè)基于Elasticsearch的ORM框架,旨在簡(jiǎn)化開(kāi)發(fā)流程并提高效率,EasyES支持SpringBoot框架,并提供了CRUD操作、批量操作和查詢操作等方法,文章還列舉了使用EasyES時(shí)可能遇到的技術(shù)難題及解決方法,感興趣的朋友一起看看吧
    2025-02-02
  • Java正則表達(dá)式的替換和分組功能

    Java正則表達(dá)式的替換和分組功能

    這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式的替換和分組功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 基于Java實(shí)現(xiàn)Actor模型

    基于Java實(shí)現(xiàn)Actor模型

    Actor模型是一種常見(jiàn)的并發(fā)模型,與最常見(jiàn)的并發(fā)模型—共享內(nèi)存(同步鎖)不同,它將程序分為許多獨(dú)立的計(jì)算單元—Actor,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Spring基于注解讀取外部配置文件

    Spring基于注解讀取外部配置文件

    這篇文章主要介紹了Spring基于注解讀取外部配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java中不用第三個(gè)變量來(lái)互換兩個(gè)變量的值

    Java中不用第三個(gè)變量來(lái)互換兩個(gè)變量的值

    在程序運(yùn)行期間,隨時(shí)可能產(chǎn)生一些臨時(shí)數(shù)據(jù),應(yīng)用程序會(huì)將這些數(shù)據(jù)保存在一些內(nèi)存單元中,每個(gè)內(nèi)存單元都用一個(gè)標(biāo)識(shí)符來(lái)標(biāo)識(shí)。這些內(nèi)存單元被稱為變量,定義的標(biāo)識(shí)符就是變量名,內(nèi)存單元中存儲(chǔ)的數(shù)據(jù)就是變量的值
    2021-10-10
  • SpringCloud之熔斷監(jiān)控Hystrix Dashboard的實(shí)現(xiàn)

    SpringCloud之熔斷監(jiān)控Hystrix Dashboard的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud之熔斷監(jiān)控Hystrix Dashboard的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 靜態(tài)方法中調(diào)用Spring注入過(guò)程解析

    靜態(tài)方法中調(diào)用Spring注入過(guò)程解析

    這篇文章主要介紹了靜態(tài)方法中調(diào)用Spring注入過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java 實(shí)現(xiàn)回調(diào)代碼實(shí)例

    java 實(shí)現(xiàn)回調(diào)代碼實(shí)例

    本文主要介紹Java的回調(diào)機(jī)制,并附實(shí)例代碼以供大家參考學(xué)習(xí),有需要的小伙伴可以看下
    2016-07-07
  • Java編程基于快速排序的三個(gè)算法題實(shí)例代碼

    Java編程基于快速排序的三個(gè)算法題實(shí)例代碼

    這篇文章主要介紹了Java編程基于快速排序的三個(gè)算法題實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Springmvc中的轉(zhuǎn)發(fā)重定向和攔截器的示例

    Springmvc中的轉(zhuǎn)發(fā)重定向和攔截器的示例

    本篇文章主要介紹了Springmvc中的轉(zhuǎn)發(fā)重定向和攔截器的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

兴国县| 孝感市| 大足县| 大邑县| 淮阳县| 余姚市| 稻城县| 婺源县| 株洲县| 肇州县| 新巴尔虎左旗| 瓦房店市| 宜章县| 肃宁县| 平远县| 宁安市| 呼和浩特市| 普宁市| 北流市| 焦作市| 瓮安县| 临洮县| 塔河县| 广安市| 秦安县| 上饶县| 清水河县| 绵阳市| 临武县| 嵊州市| 双辽市| 五原县| 腾冲县| 临汾市| 重庆市| 林西县| 土默特右旗| 常山县| 信阳市| 泸水县| 五大连池市|