java的反射机制

Posted Lamb_quan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的反射机制相关的知识,希望对你有一定的参考价值。

1、Java反射机制概念

  Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态的获取信息 以及 动态调用对象的方法 的功能称为 java 的反射机制。

  类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在Jvm的方法区内,然后在区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。Class对象是由Jvm自动生成的,每当一个类被载入时,Jvm就自动为其生成一个Class对象。Java 程序可以加载一个运行时才得知名称的 .class 文件,然后获悉其完整构造,并生成其对象实体、或对其 fields(变量)设值、或调用其 methods(方法)
 

2、获得泛型的实现类实例

代码演示:
/**
   定义实体类Teacher(T) 
*/
package core.shu.com.demo;

public class Teacher {

}

/**
   定义泛型接口IDataAccessService<T>
*/
public interface IDataAccessService<T> {

}

/**
   定义实现类TeacherAccessService,实现泛型接口IDataAccessService<T>
*/
public class TeacherAccessService implements IDataAccessService<Teacher> {

}

/**
   定义两个泛型的抽象方法
*/
public abstract class ReflectBusinessService<T, S extends IDataAccessService<T>> {

    void method() {
        System.out.println(entityClass);
        System.out.println(entityClass.getName());
        System.out.println(entityClass.getSimpleName());
        System.out.println(entityClass.getTypeName());
    }

    @SuppressWarnings("unchecked")
    protected Class<T> entityClass = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass())
        .getActualTypeArguments()[0];
   

}

/**
   定义测试类
*/
public class TeacherBusinessService extends ReflectBusinessService<Teacher, TeacherAccessService> {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TeacherBusinessService service = new TeacherBusinessService();
        service.method();
    }
    
//    void method() {
//        System.out.println("submethod");
//    }

}

结果:

class core.shu.com.demo.Teacher
core.shu.com.demo.Teacher
Teacher
core.shu.com.demo.Teacher

 
 
 
 
 
 
 

以上是关于java的反射机制的主要内容,如果未能解决你的问题,请参考以下文章

反射机制入门

反射机制入门

java 反射代码片段

深入理解java的反射机制

Java反射机制

Java核心技术梳理-类加载机制与反射