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

来源:互联网 发布:sql 删除行数据 编辑:程序博客网 时间:2024/05/27 12:20

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

 

  通过反射还可以做到

  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 stubClass<?>c=Class.forName("javastudy.Person");//Class.forName("") 动态加载类,将Person加载到内存中//Class<?> 泛型(了解)  通配符Person zhang=(Person)c.newInstance();//创建的新对象newInstance返回值为 Object类型,需要强制转换为Personzhang.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接口,通过反射查找接口,运行:



0 0
原创粉丝点击