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的反射机制的主要内容,如果未能解决你的问题,请参考以下文章