首页 > 代码库 > 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反射机制