[J2SE]s02e06.反射(课后练习)

案例:动态创建对象,调用对象的方法

 

  通过反射还可以做到

  a.获得这个类实现了那些接口

  getInterfaces

  b.得到其父类

  getSuperclass

  c.得到所有的构造函数

  getConstructors

 

c=Person.class;

Person a=newPerson();

c=a.getClass();

 关于反射更详细可参考

http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

Person类

<span style="font-size:18px;">package javastudy;

public class Person implements Animal {
	String name;
	int age;
	void display()
	{
		String s=String.format("姓名=%s,年龄=%d", name,age);
		System.out.println(s);
	}
	public Person()
	{
		
	}
	public Person(String name,int age)//反射机制下需加public,否则调用时会提示数组数组索引超出边界
	{
		this.name=name;
		this.age=age;
	}
}</span>


test

<span style="font-size:18px;">package javastudy;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class test {

	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		// TODO Auto-generated method stub
		Class<?>c=Class.forName("javastudy.Person");//Class.forName("") 动态加载类,将Person加载到内存中
													//Class<?> 泛型(了解)  通配符

		Person zhang=(Person)c.newInstance();//创建的新对象newInstance返回值为 Object类型,需要强制转换为Person
		zhang.name="Jack";
		zhang.age=20;
		zhang.display();
		
		Constructor<?>[] cons=c.getConstructors(); //cons 存所有构造函数
		Person wang=(Person)cons[1].newInstance("Mary",30);
		wang.display();
		
		Class<?>[] inter=c.getInterfaces();
		for(int i=0;i<inter.length;i++)
		{
			System.out.println(inter[i].getName());
		}
	}

}</span>
运行结果:

姓名=Jack,年龄=20
姓名=Mary,年龄=30
javastudy.Animal



创建Animal接口,通过反射查找接口,运行:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值