国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java的反射中一些重要的方法

eccozhou / 1536人閱讀

摘要:中有個類,是所有類的繼承根源,其內聲明了數個應該在所有類中被改寫的方法等。其中返回一個對象。對象表示的類或接口聲明的所有方法,包括公共保護默認包訪問和私有方法,但不包括繼承的方法。

原理

JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。

Java中有個Object 類,是所有Java 類的繼承根源,其內聲明了數個應該在所有Java 類中被改寫的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一個Class 對象。Class對象十分特殊。他是Java中所有類的實例,借助它可以實現對一個對象的操作。

實例 1. 準備工作

創建Person類

public class Person {
private String name;
private String age;
private void shot(){
    System.out.println("!!!");
}
protected void shot1() {
    System.out.println("111");
}
public String getAge() {
    return age;
}
public String getName() {
    return name;
}
public void setAge(String age) {
    this.age = age;
}
public void setName(String name) {
    this.name = name;
}
}

2. 創建Class對象

通過getClass()

Person person = new Person();
Class class2 = person.getClass();

通過Class.forName()

Class class1 = Class.forName("test0118.testR.Person");

.class

Class class3 = Person.class;

3. 對對象屬性進行操作

獲取類的屬性

getFields()只能訪問類中聲明為公有的字段,私有的字段它無法訪問,能訪問從其它類繼承來的公有方法.

getDeclaredFields()能訪問類中所有的字段,與public,private,protect無關,不能訪問從其它類繼承來的方法

Field[] fields = class1.getDeclaredFields();
Field[] fields2 = class1.getFields();
for (Field field : fields) {
    System.out.println(Modifier.toString(field.getModifiers()) + field.getName());
}
for(Field field:fields2){
    System.out.println(Modifier.toString(field.getModifiers())+field.getName());//由于Person類中并沒有公有字段,所以該循環不輸出任何值
}
/**
輸出:  
privatename
privateage
*/

獲取類屬性的修飾符
上述代碼中有一個方法Modifier.toString(field.getModifiers())即是獲取該屬性的修飾符,field.getModifiers()返回一個int值,將該值轉化為對應的描述要用到Modifier.toString()方法。

對類的屬性進行操作

Field field = class1.getField("name");
Object object = class1.newInstance();
field.setAccessible(true);//打破了封裝的特性,允許對私有屬性直接進行操作
field.set(object, "123");
System.out.println(field.get(object));

獲取類的方法

getMethods()返回某個類的所有公用(public)方法包括其繼承類的公用方法,當然也包括它所實現接口的方法。

getDeclaredMethods()對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。當然也包括它所實現接口的方法。

Method[] methods = class1.getDeclaredMethods();
Method[] methods2 = class1.getMethods();

獲取方法的參數和返回值的類型

method.getParameterTypes():獲取方法參數類型,返回Class數組

method.getReturnType():獲取方法返回值類型,返回Class對象

Class[] ty = method.getParameterTypes();
Class rty = method.getReturnType();

使用反射調用方法

method.invoke(對象,參數...)

Object object = class1.newInstance();
Method method = class1.getMethod("setName", Class.forName("java.lang.String"));
method.invoke(object, "123123");
Method method2 = class1.getMethod("getName");
System.out.println((String) method2.invoke(object));
System.out.println(method.getReturnType());

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65393.html

相關文章

  • 最最最常見Java面試題總結——第二周

    摘要:與都繼承自類,在中也是使用字符數組保存字符串,,這兩種對象都是可變的。采用字節碼的好處語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。 String和StringBuffer、StringBuilder的區別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區別 可變性...

    yearsj 評論0 收藏0
  • Java 注解實戰

    摘要:注解是的一個新特性。很重要,生產中我們開發常用此值表示注解是否可被子元素繼承。類注解方法注解通過反射獲取方法對象此部分內容可參考通過反射獲取注解信息注解處理器實戰接下來我通過在公司中的一個實戰改編來演示一下注解處理器的真實使用場景。 前言:Java 注解,對于很多人都不陌生了,但是在公司的實際開發中,可能讓我們自己去定義注解并應用到生產環境中的機會比較少,所以會導致一部分人對注解的理解...

    Jochen 評論0 收藏0
  • 后端經驗

    摘要:在結構上引入了頭結點和尾節點,他們分別指向隊列的頭和尾,嘗試獲取鎖入隊服務教程在它提出十多年后的今天,已經成為最重要的應用技術之一。隨著編程經驗的日積月累,越來越感覺到了解虛擬機相關要領的重要性。 JVM 源碼分析之 Jstat 工具原理完全解讀 http://click.aliyun.com/m/8315/ JVM 源碼分析之 Jstat 工具原理完全解讀 http:...

    i_garfileo 評論0 收藏0
  • Java面試通關要點匯總集(基礎篇之基本功,非原作者)

    摘要:面試通關要點匯總集部分解答說明如果你有幸能看到的話,本文整體框架來自阿里梁桂釗的博文,總結的非常不錯。這樣做的目的是對內部數據進行了不同級別的保護,防止錯誤的使用了對象的私有部分。被繼承的類稱為基類和父類或超類。 showImg(https://segmentfault.com/img/remote/1460000013442471?w=1280&h=819); Java面試通關要點匯...

    smallStone 評論0 收藏0
  • 后端ing

    摘要:當活動線程核心線程非核心線程達到這個數值后,后續任務將會根據來進行拒絕策略處理。線程池工作原則當線程池中線程數量小于則創建線程,并處理請求。當線程池中的數量等于最大線程數時默默丟棄不能執行的新加任務,不報任何異常。 spring-cache使用記錄 spring-cache的使用記錄,坑點記錄以及采用的解決方案 深入分析 java 線程池的實現原理 在這篇文章中,作者有條不紊的將 ja...

    roadtogeek 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<