可以通过Class中各种方法去的类的完整信息
eg:
Person.java:
package org.sh.reflect1;
interface Info{
public static final String AUTHOR="suhao";
public String getInfo();
public String say(String name,String content);
public void sayHello();
}
public class Person implements Info{
private String name;
private String age;
public Person(){
}
public Person(String name){
this.setName(name);
}
public Person(String name, String age) {
this.setName(name);
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "hello "+name+",age:"+age;
}
@Override
public String getInfo() {
// TODO Auto-generated method stub
return "Hello world";
}
@Override
public String say(String name, String content) {
return name+"说了:"+content;
}
@Override
public void sayHello() {
// TODO Auto-generated method stub
}
}
PersonClassDemo.java
package org.sh.reflect1;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class PersonClassDemo {
public static void main(String[] args) {
Class<?> c = null;
try {
c = Class.forName("org.sh.reflect1.Person");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Class<?> sc = c.getSuperclass();//取得父类
System.out.println(sc.getName());
System.out.println("==============");
//取得类实现的全部接口
Class<?>[] inter = c.getInterfaces();
for(int i=0;i<inter.length;i++){
System.out.println(inter[i]);
}
System.out.println("==============");
//取得一个类的全部构造方法
Constructor<?>[] con = c.getConstructors();
for(int i =0;i<con.length;i++){
System.out.println(con[i]);
}
System.out.println("==============");
// 取得一个类的全部方法
Method[] m = c.getMethods();
for(int i =0;i<m.length;i++){
System.out.println(m[i]);
}
System.out.println("==============");
//取得一个类的全部构属性
Field f[] = c.getFields();//返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段
for(int i=0;i<f.length;i++){
String modifier = Modifier.toString(f[i].getModifiers());
System.out.print(modifier+" ");
System.out.println(f[i].getType().getName());
}
System.out.println("==============");
f = c.getDeclaredFields();
for(int i=0;i<f.length;i++){//返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段
String modifier = Modifier.toString(f[i].getModifiers());
System.out.print(modifier+" ");
System.out.println(f[i].getType().getName());
}
}
}
输出结果:
java.lang.Object
==============
interface org.sh.reflect1.Info
==============
public org.sh.reflect1.Person(java.lang.String)
public org.sh.reflect1.Person(java.lang.String,java.lang.String)
public org.sh.reflect1.Person()
==============
public java.lang.String org.sh.reflect1.Person.toString()
public java.lang.String org.sh.reflect1.Person.getName()
public void org.sh.reflect1.Person.setName(java.lang.String)
public java.lang.String org.sh.reflect1.Person.getAge()
public void org.sh.reflect1.Person.setAge(java.lang.String)
public java.lang.String org.sh.reflect1.Person.getInfo()
public java.lang.String org.sh.reflect1.Person.say(java.lang.String,java.lang.String)
public void org.sh.reflect1.Person.sayHello()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
==============
public static final java.lang.String
上面的大部分都是通过toString直接输出的,并不符合我们平时的习惯,当然所有的属性方法都可以自己定义输出的方法,这里就不写了。