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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java反射實例的詳細介紹

Java反射實例的詳細介紹

更新時間:2022-03-22 10:02:20 來源:動力節點 瀏覽1459次

Java 反射是在運行時檢查或修改類的運行時行為的過程。

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

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

在哪里使用

反射 API 主要用于:

IDE(集成開發環境),例如 Eclipse、MyEclipse、NetBeans 等。

調試器

測試工具等

簡單實例

我們將從一個簡單的例子開始探訪Java反射機制的征程。下面的Car類擁有兩個構造函數、一個方法及3個屬性。

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;
    }
}

一般情況下,我們會使用如下代碼創建Car的實例:

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

或者:

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

以上兩種方法都采用傳統方式直接調用目標類的方法。下面我們通過Java反射機制以一種間接的方式操控目標類。

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

運行以上程序,在控制臺上將打印出以下信息:

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

這說明我們完全可以通過編程方式進行Java反射調用Class的各項功能,與通過構造函數和方法直接調用類功能的效果是一致的,只不過前者是間接調用,后者是直接調用罷了。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 四虎黄色影视库 | 99久久精品免费看国产四区 | 一级特级aa欧美毛片 | 在线视频日韩 | 亚洲欧洲中文日产 | 女人18毛片a级毛片免费 | 免费一级欧美大片在线观看 | 国产欧美日韩在线观看 | 97精品国产综合久久久久久欧美 | 牛牛色婷婷在线视频播放 | 日本一级特黄毛片高清视频 | 色片免费观看 | 国产未成女年一区二区 | 国产在线观看一区精品 | 四虎精品成人a在线观看 | 5566中文字幕亚洲精品 | 天天襙 | 久久久久久久国产精品 | 91精品国产色综合久久不卡蜜 | 成人看片黄a免费看视频 | 国产波多野结衣中文在线播放 | 色婷婷综合欧美成人 | 国产麻豆免费 | 色婷婷六月桃花综合影院 | 国产一级影片 | 亚洲精品女同中文字幕在线 | 末成年一级在线看片 | 国产青草亚洲香蕉精品久久 | 久热精品视频在线 | 夜夜躁狠狠躁日日躁视频 | 色操网| www.国产一区二区三区 | 波多野结衣av1区2区3区 | 97在线视频免费观看费观看 | 日本乱中文字幕系列在线观看 | 欧美一区二区三区东南亚 | 亚洲精品一区二区观看 | 精品国产一区二区三区四 | 久久频这里精品99香蕉久网址 | se色成人亚洲综合 | 久久久久国产一级毛片高清片 |