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

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

Java反射實(shí)例

更新時(shí)間:2020-11-23 17:48:43 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1294次

Java反射(Reflection)就是在運(yùn)行 Java 程序時(shí),可以加載、探知、使用編譯期間完全未知的類。也就是說,Java 程序可以加載一個(gè)運(yùn)行時(shí)才得知類名的類,獲得類的完整構(gòu)造方法,并實(shí)例化出對(duì)象,給對(duì)象屬性設(shè)定值或者調(diào)用對(duì)象的方法。本文我們就來通過Java反射實(shí)例來理解Java中的反射機(jī)制。


一、利用反射獲取類信息的方式、獲取當(dāng)前類的所有方法和獲取當(dāng)前類及其父類的所有方法

實(shí)體類

package org.dennisit.reflect.entity;

import java.io.Serializable;

 

public class User implements Serializable{

 

    private String test;

    

    public void execute(String name,int age){

        System.out.println("name=" + name + ",age=" + age);

    }

}

反射測(cè)試類

 

package org.dennisit.reflect.main;

import java.lang.reflect.Field;

 

public class ReflectEx {

 

    public static void main(String[] args)throws Exception {

        Class cls = Class.forName("org.dennisit.reflect.entity.User");

        Object obj = cls.newInstance();       //創(chuàng)建User的對(duì)象

        Field f = cls.getDeclaredField("test");    //獲取test屬性

        f.setAccessible(true);                    //打開私有屬性test的訪問權(quán)限

        f.set(obj, "zhangsan");                    //為test重新復(fù)制

        System.out.println(f.get(obj));            //獲取obj的test屬性值

        //根據(jù)方法名execute獲取方法

        java.lang.reflect.Method m = cls.getMethod("execute", String.class, int.class);

        m.invoke(obj, "dennisit",23);            //調(diào)用execute方法

    }

}

運(yùn)行效果

 

zhangsan

name=dennisit,age=23

 

 

二、編寫一個(gè)反射動(dòng)態(tài)實(shí)例化類的例子

 

package org.dennisit.reflect.main;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Map;

import java.util.Set;

 

public class DynamicReflect {

 

    public static Object getInstance(String className,Map<String,Object> map)throws Exception{

        Class c = Class.forName(className);

        Object obj = c.newInstance();                //對(duì)象對(duì)象

        Set<String> keys = map.keySet();            //獲取對(duì)應(yīng)的所有屬性

        Field[] fAll = c.getDeclaredFields();        //獲取類中所有屬性

        for(int i=0;i<fAll.length;i++){

            for(String key:keys){                    //循環(huán)匹配

                if(fAll[i].getName().equals(key)){    //如果用戶傳入的屬性跟獲取到的類中的屬性名匹配

                    Field f = c.getDeclaredField(key);//獲取該屬性

                    //構(gòu)建setXxx()方法名

                    String methodName = "set" + key.substring(0,1).toUpperCase()+key.substring(1);

                    Method method = c.getMethod(methodName, f.getType());//根據(jù)構(gòu)建的用戶名獲取對(duì)應(yīng)的方法

                    method.invoke(obj, map.get(key));//方法調(diào)用

                }else{

                    continue;

                }

            }

        }

        return obj;

    }

}


三、接下來我們測(cè)試我們編寫的動(dòng)態(tài)反射實(shí)例化例子

 

實(shí)體類

package org.dennisit.reflect.entity;

import java.io.Serializable;

public class User implements Serializable{

 

    private String name;

    private int age;

    private String email;

    

    public User() {  //必須有無參構(gòu)造

    

    }

 

    //getter() and setter()    

    

}

主測(cè)試類

 

package org.dennisit.reflect.main;

import java.util.HashMap;

import java.util.Map;

import org.dennisit.reflect.entity.User;

 

public class ReflectEx {

 

    public static void main(String[] args)throws Exception {

        Class cls = Class.forName("org.dennisit.reflect.entity.User");

        String className = "org.dennisit.reflect.entity.User";

        Map<String,Object> map = new HashMap<String, Object>();

        map.put("name", "dennisit");

        map.put("age", 22);

        map.put("email", "dennisit@163.com");

         

        User user = (User)DynamicReflect.getInstance(className, map);

        System.out.println(user.getName() + "," + user.getAge() + "," + user.getEmail());

    }

}

程序運(yùn)行結(jié)果

dennisit,22,dennisit@163.com


以上就是Java反射實(shí)例,借助這些Java反射實(shí)例,能夠幫助我們剛好的理解Java反射機(jī)制。實(shí)際上,反射的工作原理就是借助Class.java、Constructor.java、Method.java、Field.java這四個(gè)類在程序運(yùn)行時(shí)動(dòng)態(tài)訪問和修改任何類的行為和狀態(tài)。想要了解更深層次的反射機(jī)制,快來觀看本站的Java基礎(chǔ)教程吧!


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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: jazz欧美人免费xxxxxx | 免费乱理伦片在线观看老妇 | 国产欧美成人免费观看视频 | 久久精品二区 | 中文字幕或区 | 91精品国产综合成人 | 久久免费资源福利资源站 | 日本又黄又爽又色的视频免费 | 久久久久在线 | 国产在线精品福利91香蕉 | 亚洲日本va中文字幕 | 午夜欧美日韩 | 欧美不卡在线 | 色综合久久综精品 | 国产一区 在线视频 | 麻豆国产96在线 | 中国 | 国产精品午夜久久久久久99热 | 三a大片| 91伦理| 久久久久久久网站 | 欧美国产亚洲精品高清不卡 | 国产成人久久精品激情 | 九九色视频 | 日韩免费一级毛片欧美一级日韩片 | 国内精品久久久久影院嫩草 | 尤物视频一区二区 | 91色多多| 九九视频在线观看视频23 | 国产xxxx做受性欧美88 | 亚洲在线视频免费观看 | 亚洲国产网 | 欧美视频在线一区二区三区 | 国产18到20岁美女毛片 | 国产91在线 | 日韩 | 国产欧美亚洲三区久在线观看 | 欧美亚洲国产精品久久第一页 | 久久久美女 | 中国毛片免费看 | 一级不卡毛片免费 | 久久婷五月综合 | 国偷盗摄自产福利一区在线 |