您的位置:首页 > 编程语言 > Java开发

java之反射

2016-07-21 14:43 295 查看
Class.forName("")  为动态加载类

Class<?>  为泛型 中间的问号可以处理任何的类,为通配符

还是以一个例子来说明

package javastudy;

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

public class Testit {

public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, IllegalArgumentException, InvocationTargetException {

       //利用反射来动态创建对象
/** 把Person这个类加载到内存中去,这样c就为Person类了 **/
Class<?> c = Class.forName("javastudy.Person");
Person zhang = (Person) c.newInstance();// 新对象的类为object类,所以要强制转换为Person类,而且这里对应的构造函数应该是没有参数的,所以在Person类里面如果有了有参构造函数,那么就要再次构造一个无参的函数

        zhang.name = "jack";

        zhang.age = 20;

        zhang.display();

       Constructor<?>[] cons= c.getConstructors();

       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());

       }
}

}

package javastudy;

public class Person implements Animal {//需要implements实现接口,不然在main函数里面不能够实现其接口

String name;

int age;

void display()
{

System.out.println(String.format("姓名=%s,年龄=%d",name,age));
}
public Person()
{

}

public Person (String name,int a
4000
ge)   //在反射的额访问机制下,需要加上public才算一个函数
{
this.name = name;
this.age = age;
}

}

package javastudy;

public interface Animal {

}

最后的输出结果为:

姓名 = 仙儿,年齡 = 20

姓名 = Mary,年齡 = 30

javastudy.Animal
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: