public static void main(String[] args) {
ReflectDemo rd=new ReflectDemo();
}
}</pre> </div>
輸入com.pb.Reflect.classinfo.Person
結果:
========獲取方法信息============
public java.lang.String com.pb.Reflect.classinfo.Person.getGender()
public void com.pb.Reflect.classinfo.Person.setGender(java.lang.String)
public int com.pb.Reflect.classinfo.Person.getAge()
public void com.pb.Reflect.classinfo.Person.setAge(int)
public java.lang.String com.pb.Reflect.classinfo.Person.toString()
private java.lang.String com.pb.Reflect.classinfo.Person.getName()
private void com.pb.Reflect.classinfo.Person.setName(java.lang.String)
========獲取出方法信息結束============
========獲取成員屬性信息============
private java.lang.String com.pb.Reflect.classinfo.Person.name
private java.lang.String com.pb.Reflect.classinfo.Person.gender
private int com.pb.Reflect.classinfo.Person.age
========獲取成員屬性信息結束============
========獲取構造方法信息============
private com.pb.Reflect.classinfo.Person()
public com.pb.Reflect.classinfo.Person(java.lang.String,java.lang.String,int)
========獲取構造方法信息結束============
</div>
五、使用反射的步驟
5.1、步驟
Java.lang.reflect
獲得想操作類的Java.lang.Class對象
調用Class的方法
使用反射API來操作這些信息
5.2、獲取Class對象方式
調用某個對象的getClass()方法
Person p = new Person();
Class cla=p.getClass();
</div>
調用某個類的class屬性來獲取該類對應的Class對象
Class cls=Person.class;
</div>
使用Class類的forName()靜態方法
Class cla=Class.forName(“類的全路徑”);
</div>
六、第二種方式對象的getClass()方法
Person類,因為要聲明對象所以將構造方法public
package com.pb.Reflect.classinfo;
public class Person {
private String name;
private String gender;
private int age;
public Person() {
//
}
public Person(String name, String gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
//getter、和setter方法
private String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "姓名:"+name+"年齡: "+age;
}
Class cla=p.getClass();
//利用Class對象的cla的自審,返回方法對象集合
Method [] method=cla.getDeclaredMethods(); //返回所有的方法
System.out.println("========獲取方法信息============");
for (Method meth : method) {
//遍歷method數組,并輸出方法信息
System.out.println(meth.toString());
}
System.out.println("========獲取出方法信息結束============");
//獲取屬性利用Class對象的cla的自審,返回成員屬性對象集合
Field [] field=cla.getDeclaredFields();
System.out.println("========獲取成員屬性信息============");
for (Field f : field) {
System.out.println(f.toString());
}
System.out.println("========獲取成員屬性信息結束============");
//獲取屬性利用Class對象的cla的自審,返回構造方法集合
Constructor [] constructor=cla.getDeclaredConstructors();
System.out.println("========獲取成員構造方法信息============");
for (Constructor constru : constructor) {
System.out.println(constru.toString());
}
System.out.println("========獲取成員構造方法信息結束============");
}
}</pre> </div>
測試類
package com.pb.Reflect.classinfo;
public class TestReflection {
public static void main(String[] args) {
Person p=new Person();
ReflectDemo rd=new ReflectDemo(p);
}
}</pre> </div>
========獲取方法信息============
public java.lang.String com.pb.Reflect.classinfo.Person.getGender()
public void com.pb.Reflect.classinfo.Person.setGender(java.lang.String)
public int com.pb.Reflect.classinfo.Person.getAge()
public void com.pb.Reflect.classinfo.Person.setAge(int)
public java.lang.String com.pb.Reflect.classinfo.Person.toString()
private java.lang.String com.pb.Reflect.classinfo.Person.getName()
private void com.pb.Reflect.classinfo.Person.setName(java.lang.String)
========獲取出方法信息結束============
========獲取成員屬性信息============
private java.lang.String com.pb.Reflect.classinfo.Person.name
private java.lang.String com.pb.Reflect.classinfo.Person.gender
private int com.pb.Reflect.classinfo.Person.age
========獲取成員屬性信息結束============
========獲取成員構造方法信息============
public com.pb.Reflect.classinfo.Person()
public com.pb.Reflect.classinfo.Person(java.lang.String,java.lang.String,int)
========獲取成員構造方法信息結束============
public static void main(String[] args) {
/*第二種方法
Person p=new Person();
ReflectDemo rd=new ReflectDemo(p);
*/
/*
* 第三種方式.class屬性
*/
Class cla=Person.class;
//利用Class對象的cla的自審,返回方法對象集合
Method [] method=cla.getDeclaredMethods(); //返回所有的方法
System.out.println("========獲取方法信息============");
for (Method meth : method) {
//遍歷method數組,并輸出方法信息
System.out.println(meth.toString());
}
System.out.println("========獲取出方法信息結束============");
//獲取屬性利用Class對象的cla的自審,返回成員屬性對象集合
Field [] field=cla.getDeclaredFields();
System.out.println("========獲取成員屬性信息============");
for (Field f : field) {
System.out.println(f.toString());
}
System.out.println("========獲取成員屬性信息結束============");
//獲取屬性利用Class對象的cla的自審,返回構造方法集合
Constructor [] constructor=cla.getDeclaredConstructors();
System.out.println("========獲取成員構造方法信息============");
for (Constructor constru : constructor) {
System.out.println(constru.toString());
}
System.out.println("========獲取成員構造方法信息結束============");
}
}</pre> </div>
結果:
同上
========獲取方法信息============
public java.lang.String com.pb.Reflect.classinfo.Person.getGender()
public void com.pb.Reflect.classinfo.Person.setGender(java.lang.String)
public int com.pb.Reflect.classinfo.Person.getAge()
public void com.pb.Reflect.classinfo.Person.setAge(int)
public java.lang.String com.pb.Reflect.classinfo.Person.toString()
private java.lang.String com.pb.Reflect.classinfo.Person.getName()
private void com.pb.Reflect.classinfo.Person.setName(java.lang.String)
========獲取出方法信息結束============
========獲取成員屬性信息============
private java.lang.String com.pb.Reflect.classinfo.Person.name
private java.lang.String com.pb.Reflect.classinfo.Person.gender
private int com.pb.Reflect.classinfo.Person.age
========獲取成員屬性信息結束============
========獲取成員構造方法信息============
public com.pb.Reflect.classinfo.Person()
public com.pb.Reflect.classinfo.Person(java.lang.String,java.lang.String,int)
========獲取成員構造方法信息結束============