黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java反射實(shí)例的詳細(xì)介紹

Java反射實(shí)例的詳細(xì)介紹

更新時(shí)間:2022-03-22 10:02:20 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1463次

Java 反射是在運(yùn)行時(shí)檢查或修改類(lèi)的運(yùn)行時(shí)行為的過(guò)程。

java.lang.Class類(lèi)提供了許多可用于獲取元數(shù)據(jù)、檢查和更改類(lèi)的運(yùn)行時(shí)行為的方法。

java.lang 和 java.lang.reflect 包為 java 反射提供了類(lèi)。

在哪里使用

反射 API 主要用于:

IDE(集成開(kāi)發(fā)環(huán)境),例如 Eclipse、MyEclipse、NetBeans 等。

調(diào)試器

測(cè)試工具等

簡(jiǎn)單實(shí)例

我們將從一個(gè)簡(jiǎn)單的例子開(kāi)始探訪Java反射機(jī)制的征程。下面的Car類(lèi)擁有兩個(gè)構(gòu)造函數(shù)、一個(gè)方法及3個(gè)屬性。

package com.smart.reflect;
public class Car {
    private String brand;
    private String color;
    private int maxSpeed;
    public Car() {
        System.out.println("init car!!");
    }
    public Car(String brand, String color, int maxSpeed) {
        this.brand = brand;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }
    public void introduce() {
        System.out.println("brand:" + brand + ";color:" + color + ";maxSpeed:" + maxSpeed);
    }
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getMaxSpeed() {
        return maxSpeed;
    }
    public void setMaxSpeed(int maxSpeed) {
        this.maxSpeed = maxSpeed;
    }
}

一般情況下,我們會(huì)使用如下代碼創(chuàng)建Car的實(shí)例:

Car car = new Car();
car.setBrand("紅旗CA72");

或者:

Car car = new Car("紅旗CA72","黑色");

以上兩種方法都采用傳統(tǒng)方式直接調(diào)用目標(biāo)類(lèi)的方法。下面我們通過(guò)Java反射機(jī)制以一種間接的方式操控目標(biāo)類(lèi)。

package com.smart.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectTest {
    public static Car initByDefaultConst() throws Throwable {
        //①通過(guò)類(lèi)裝載器獲取Car類(lèi)對(duì)象
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        Class clazz = loader.loadClass("com.smart.reflect.Car");
        //②獲取類(lèi)的默認(rèn)構(gòu)造器對(duì)象并通過(guò)它實(shí)例化Car
        Constructor cons = clazz.getDeclaredConstructor((Class[]) null);
        Car car = (Car) cons.newInstance();
        //③通過(guò)反射方法設(shè)置屬性
        Method setBrand = clazz.getMethod("setBrand", String.class);
        setBrand.invoke(car, "紅旗CA72");
        Method setColor = clazz.getMethod("setColor", String.class);
        setColor.invoke(car, "黑色");
        Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
        setMaxSpeed.invoke(car, 200);
        return car;
    }
    public static void main(String[] args) throws Throwable {
        Car car = initByDefaultConst();
        car.introduce();
    }
}

運(yùn)行以上程序,在控制臺(tái)上將打印出以下信息:

brand:紅旗CA72;color:黑色;maxSpeed:200

這說(shuō)明我們完全可以通過(guò)編程方式進(jìn)行Java反射調(diào)用Class的各項(xiàng)功能,與通過(guò)構(gòu)造函數(shù)和方法直接調(diào)用類(lèi)功能的效果是一致的,只不過(guò)前者是間接調(diào)用,后者是直接調(diào)用罷了。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 动漫美女胸被狂揉扒开吃奶动态图 | 一二三四在线视频社区8 | 国产小视频在线观看免费 | 高h辣h双处全是肉一对一 | 青春草视频免费观看 | 国产成人精品日本亚洲11 | 色偷偷偷偷要 | 97超级碰 | 色综合97天天综合网 | 在线观看免费a∨网站 | 在线观看亚洲免费视频 | 综合国产在线 | 亚洲xx网| 中文字幕一区中文亚洲 | 三级伦理片高清在线观看播放 | 久久久久国产午夜 | 亚洲欧美日韩高清 | 动漫视频成人无h码在线观看 | 麻豆一区二区大豆行情 | 成人叼嘿视频免费网站 | 一级毛片特级毛片黄毛片 | www在线 | 久久国产精彩视频 | 欧美日韩亚洲人人夜夜澡 | 在线欧洲成人免费视频 | 久久综合五月开心婷婷深深爱 | 欧美日韩视频二区三区 | 国产97色在线 | 日韩 | 欧美日韩a | 亚洲精品国产成人 | 国产不卡一区二区三区免费视 | 日本成人网址 | 日本黄漫画网站入口免费 | 98精品国产高清在线xxxx | 成人免费国产欧美日韩你懂的 | 亚洲天堂在线播放 | 免费一级特黄特色大片∵黄 | 夜色私人影院永久入口 | 男人午夜网站 | 亚洲人人看 | 欧美日韩午夜视频 |