java反射(2)--通过Class类去的完整结构

来源:互联网 发布:域名备案在哪里备呢 编辑:程序博客网 时间:2024/04/27 22:30

可以通过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;}@Overridepublic String toString() {return "hello "+name+",age:"+age;}@Overridepublic String getInfo() {// TODO Auto-generated method stubreturn "Hello world";}@Overridepublic String say(String name, String content) {return name+"说了:"+content;}@Overridepublic 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.InterruptedExceptionpublic final void java.lang.Object.wait(long,int) throws java.lang.InterruptedExceptionpublic final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic 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直接输出的,并不符合我们平时的习惯,当然所有的属性方法都可以自己定义输出的方法,这里就不写了。

0 0
原创粉丝点击