真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解反射調(diào)用成員

本篇內(nèi)容主要講解“如何理解反射調(diào)用成員”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何理解反射調(diào)用成員”吧!

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站制作、蒼南網(wǎng)絡(luò)推廣、小程序定制開發(fā)、蒼南網(wǎng)絡(luò)營銷、蒼南企業(yè)策劃、蒼南品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供蒼南建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

反射調(diào)用成員

類結(jié)構(gòu)中的最后一個(gè)核心的組成就是成員(Field),大部分情況下都會將其稱為成員屬性,對于成員信息的獲取也是通過Class類完成,在這個(gè)類中提供了如下兩組操作方法:
獲取本類全部成員:
public Field[] getDeclaredFields() throws SecurityException
獲取本類指定成員:
public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException
獲取父類全部成員:public Field[] getFields() throws SecurityException
獲取父類指定成員:public Field getField(String name) throws NoSuchFieldException, SecurityException

范例:修改要操作的父類:
AbstractBase:

public abstract class AbstractBase {protected static final String BASE = "www.mldn.cn";private String info = "HELLO MLDN";public AbstractBase() {}public AbstractBase(String msg) {}
}

IChannelService:

public interface IChannelService {
    public static final String NAME = "mldnjava";
    public boolean connect();
}

范例:獲取類中的成員

import java.lang.reflect.Field;public class JavaAPIDemo {public static void main(String[] args) throws Exception {
        Class cls = Class.forName("cn.mldn.vo.Person");
        {    // 獲取父類之中公共成員信息 Field fields [] = cls.getFields();  //獲取成員 for (Field fie : fields) {
                System.out.println(fie);
             }
        }
        System.out.println("---------番茄醬與辣椒醬的分割線-------------");
        {  //獲取子類中定義的成員Field fields [] = cls.getDeclaredFields();for (Field fie : fields){
                System.out.println(fie);
            }
        }
    }
}

執(zhí)行結(jié)果:
如何理解反射調(diào)用成員

但是在Field類中最為重要的操作形式并不是獲取全部成員,而是如下三個(gè)方法:
設(shè)置屬性內(nèi)容:
public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException
獲取屬性內(nèi)容:
public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException
解除封裝:
public void setAccessible(boolean flag)
所有成員是在對象實(shí)例化后進(jìn)行空間分配的,所以此時(shí)一定要先有實(shí)例化對象后才可以進(jìn)行成員的操作。

范例:直接調(diào)用Person類中的name私有成員

import java.lang.reflect.Field;public class JavaAPIDemo {public static void main(String[] args) throws Exception {
        Class cls = Class.forName("cn.mldn.vo.Person");
        Object obj = cls.getConstructor().newInstance();  //實(shí)例化對象(分配成員空間)Field nameField = cls.getDeclaredField("name");  //獲取成員對象nameField.setAccessible(true);  //對私有屬性必須先解除封裝,nameField.set(obj,"番茄強(qiáng)");  //等價(jià)于:Person對象.name = "番茄強(qiáng)"System.out.println(nameField.get(obj));
    }
}

通過一系列的分析可以發(fā)現(xiàn),類中的構(gòu)造、方法、成員屬性都可以通過反射實(shí)現(xiàn)調(diào)用,但是對于成員的反射很少這樣直接處理,大部分操作都應(yīng)該setter和getter處理,所以對于以上的代碼只能夠說是反射的特色,但是不具備實(shí)際的使用能力,而對于Field類在實(shí)際開發(fā)中只有一個(gè)方法最為常用:
獲取成員類型:
public Class getType()
范例:獲取Person類中name成員的類型

import java.lang.reflect.Field;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("cn.mldn.vo.Person");
        Field nameField = cls.getDeclaredField("name");System.out.println(nameField.getType().getName());  //獲取完整的名稱,包.類 java.lang.StringSystem.out.println(nameField.getType().getSimpleName());  // 獲取類名稱 String}
}

在以后開發(fā)中進(jìn)行反射處理的時(shí)候,往往會利用Field類和Method類實(shí)現(xiàn)類中的setter方法的調(diào)用。

到此,相信大家對“如何理解反射調(diào)用成員”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站標(biāo)題:如何理解反射調(diào)用成員
網(wǎng)頁地址:http://weahome.cn/article/psseho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部