大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

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

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

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

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

java.lang 和 java.lang.reflect 包為 java 反射提供了類。

在哪里使用

反射 API 主要用于:

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

調(diào)試器

測(cè)試工具等

簡單實(shí)例

我們將從一個(gè)簡單的例子開始探訪Java反射機(jī)制的征程。下面的Car類擁有兩個(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)類的方法。下面我們通過Java反射機(jī)制以一種間接的方式操控目標(biāo)類。

package com.smart.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectTest {
    public static Car initByDefaultConst() throws Throwable {
        //①通過類裝載器獲取Car類對(duì)象
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        Class clazz = loader.loadClass("com.smart.reflect.Car");
        //②獲取類的默認(rèn)構(gòu)造器對(duì)象并通過它實(shí)例化Car
        Constructor cons = clazz.getDeclaredConstructor((Class[]) null);
        Car car = (Car) cons.newInstance();
        //③通過反射方法設(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

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

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲精品久久久久久中文字幕小说 | 国产青草亚洲香蕉精品久久 | 奇米影音先锋 | 亚色在线视频 | 国产成人综合日韩精品婷婷九月 | 欧美亚洲国产精品久久久久 | 欧美成人香蕉在线观看 | 天天天天天天天操 | 毛片96视频免费观看 | 99热这里只有免费国产精品 | 欧美日韩理论 | 精品黑人一区二区三区 | 国产日韩欧美综合一区二区三区 | 人人做人人爽久久久精品 | 在线观看一级毛片免费 | 视频精品一区 | 中文字幕日韩一区 | 人妖粗暴刺激videos | 91亚洲国产成人久久精品网址 | 亚洲精品国产v片在线观看 亚洲精品国产啊女成拍色拍 | 91九色国产 | 久久996re热这里有精品 | 精品亚洲大全 | 日本一区二区三区精品 | 色综合欧美 | 一区二区在线播放福利视频 | 国产情侣普通话刺激对白 | 久久福利 | 久热精品在线视频 | 97夜色| 免费观看h片 | 久久国产区 | 97福利视频在线观看 | 在线观看视频亚洲 | 亚洲视频欧洲视频 | 精品国产日韩亚洲一区二区 | 国产精品一二区 | 日韩一区二区超清视频 | 亚洲久久视频 | 一级韩国aa毛片免费观看 | 国产日韩欧美综合一区 |