Java的反射中一些重要的方法
出處:達人科技 發(fā)布于:2016-01-19 10:23:34
原理
Java反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。
Java中有個Object 類,是所有Java 類的繼承根源,其內(nèi)聲明了數(shù)個應該在所有Java 類中被改寫的方法:hashCode、equals、clone、toString、getClass等。其中g(shù)etClass返回一個Class 對象。Class對象十分特殊。他是Java中所有類的實例,借助它可以實現(xiàn)對一個對象的操作。
實例
1. 準備工作
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. 創(chuàng)建Class對象
Person person = new Person;
Class class2 = person.getClass;
Class class1 = Class.forName("test0118.testR.Person");
Class class3 = Person.class;
3. 對對象屬性進行操作
獲取類的屬性
getFields只能訪問類中聲明為公有的字段,私有的字段它無法訪問,能訪問從其它類繼承來的公有方法.
getDeclaredFields能訪問類中所有的字段,與public,private,protect無關(guān),不能訪問從其它類繼承來的方法
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類中并沒有公有字段,所以該循環(huán)不輸出任何值
}
/**
輸出:
privatename
privateage
*/
獲取類屬性的修飾符
上述代碼中有一個方法Modifier.toString(field.getModifiers)即是獲取該屬性的修飾符,field.getModifiers返回一個int值,將該值轉(zhuǎn)化為對應的描述要用到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)方法包括其繼承類的公用方法,當然也包括它所實現(xiàn)接口的方法。
getDeclaredMethods對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。當然也包括它所實現(xiàn)接口的方法。
Method methods = class1.getDeclaredMethods;
Method methods2 = class1.getMethods;
獲取方法的參數(shù)和返回值的類型
method.getParameterTypes:獲取方法參數(shù)類型,返回Class數(shù)組
method.getReturnType:獲取方法返回值類型,返回Class對象
Class ty = method.getParameterTypes;
Class rty = method.getReturnType;
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);
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識介紹2025/8/29 16:58:56
- SQL核心知識點總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復控制的復合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識2025/6/18 16:30:52









