Java———反射机制

来源:互联网 发布:电脑怎么用手机淘宝 编辑:程序博客网 时间:2024/05/16 08:00


反射机制:


所谓“反”就是根据对象来取得对象的来源信息,而这个反的核心操作 便是取得Class对象


Class类 是描述整个类的概念,是整个反射操作的核心


Class类对象的获得 有三种方法:

1) 对象.getClass(); //需要实例化对象

2)   类.class   //需要导入类的包

3)  Class.forName("包.类") 例如:Class.forName("java.util.Date") 



获得Class类对象的以后


可以实例化对象:

Class clazz=Class.forName("java.util.Date");
Object obj=clazz.newInstance();


可以获取父类Class类对象

clazz.getSuperclass()

可以获取构造器

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


可以调用方法(核心)

  

 反射调用方法一般分为3个步骤:

  • 得到要调用类的class 
  • 得到要调用的类中的方法(Method)
  • 方法调用(invoke)
    package demo;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;class Person{int age;String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person(){}public Person(int age, String name) {super();this.age = age;this.name = name;};}public class Fanshe {public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {try {Class clazz=Class.forName("demo.Person");Object obj=clazz.newInstance();@SuppressWarnings("unchecked")Method m1=clazz.getMethod("setName", String.class);Method m2=clazz.getMethod("getName");m1.invoke(obj, "hha");String st=(String) m2.invoke(obj);System.out.println(st);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

可以调用成员:
package demo;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;class Person{private int age;private String name;}public class Fanshe {public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchFieldException {try {Class clazz=Class.forName("demo.Person");Object obj=clazz.newInstance();Field field1=clazz.getDeclaredField("age");Field field2=clazz.getDeclaredField("name");field1.setAccessible(true);field2.setAccessible(true);System.out.println(field1);System.out.println(field2);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

原创粉丝点击