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

可以通过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直接输出的,并不符合我们平时的习惯,当然所有的属性方法都可以自己定义输出的方法,这里就不写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值