首页 > 代码库 > JAVA反射机制
JAVA反射机制
下面就简单的总结一下java反射机制,加深印象:
什么是反射机制?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
Class类
我们知道Java是一门面向对象语言,在Java的世界里,万物皆为对象,比如我们有一个Person类:
public class Person { }
我们创建一个Person类的实例,Person person = new Person; 那么这个person,就是Person类的实例对象。
那么既然万物都为对象,所以类也是对象。
类是什么的对象呢?类是Class类的对象,表示方式有三种:
第一种,任何一个类都有一个隐含的静态成员变量class Class c1 = Person.class;
第二种,已经知道该类的对象,通过getClass获得 Class c2 = person.getClass;
第三种,Class类的forName方法 Class c3 = Class.forName("Person");
通过类的类类型,我们经常会用到的方法就是newInstance方法,通过该方法可以创建该类的实例:
Person personA = new Person;
//直接new一个实例 Person personB = Person.class.newInstance;
//通过newInstance方法获得Person的实例
//在学习JAVAEE时候,newInstance方法我们最常见于获取数据库驱动 Class.forName("com.mysql.jdbc.Driver").newInstance;
//需要注意的是,在使用newInstance方法的前提是该类必须要有无参构造方法
动态加载类:
编译时刻加载类称为静态加载,运行时刻加载类称为动态加载,使用new方法新建实例即为静态加载类,在编译时候就要加载全部类。
方法的反射操作
可以通过方法的反射操作实现方法的调用:
import java.lang.reflect.Method; public class MethodDemo1 { public static void main(String[] args) { //要获取print(int, int) //要获取类的方法就要获取类的信息,获取类的信息就要获取类的类类型 A a1 = new A; Class c = a1.getClass; //2,获取方法 名称和参数列表 //getMethod获取的是public的方法 try { Method m = c.getDeclaredMethod("print", int.class,int.class);
//方法的反射操作 //a1.print(10, 20);方法的反射操作,用m来进行方法调用和前者效果一致 Object obj = m.invoke(a1, 10,20); //如果方法有返回值返回值,没有就null } catch (Exception e) { e.printStackTrace; } } } class A { public void print(int a , int b) { System.out.println(a + b); } public void print(String a , String b) {
System.out.println(a.toUpperCase + "," + b.toUpperCase); } }
JAVA反射机制