工作中对一些开源框架的深入学习后,发现到处都在使用Java反射机制,精巧的写法是一环扣一环,今天就跟大家一起学习一下Java反射机制
一、什么是Java反射机制
Java的反射(reflection)机制是指在Java程序运行过程中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,以及类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取类信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
二、为什么需要Java反射机制以及优势和运用场景
Java的反射机制允许程序在运行时动态地获取类的信息,并且可以在运行时操作对象,而不需要在编译时就知道这些信息。有以下几个优势和运用场景
动态加载类:反射机制可以在运行时动态加载一个类,从而可以动态地创建对象,这对于开发插件化、动态扩展应用程序等方面非常有用。广泛运用于Java设计模式和框架技术。
动态获取类信息:反射机制可以在运行时获取一个类的构造方法、方法、属性等信息,使得开发者可以更加灵活地编写代码。
动态调用方法:反射机制可以在运行时动态调用类的方法,包括私有的方法,这对于编写通用的代码库、框架等非常有用。
动态修改属性值:反射机制可以在运行时修改类的属性值,包括私有的属性,这对于某些特定的应用场景非常有用。
实现注解处理器:注解是Java语言的一项重要特性,反射机制可以用于实现注解处理器,这可以让我们在编译时或运行时自动地扫描和处理注解。
实现动态代理:反射机制可以用于实现动态代理,这是一种常用的设计模式。动态代理可以在运行时生成代理对象,从而可以动态地增强对象的行为。
三、Java反射机制动态创建类对象的三个方法
创建类实例的三种方式:
通过类名.Class的方式:任何一个类都有一个隐含的静态成员变量class
Class ct1 = Animal.class;
类的实例对象的getClass方法:通过java实例对象的getClass方法获取
Class ct2 = animal.getClass();
Class.forName+类名全路径的方式
Class ct3 = Class.forName("com.test.Animal");
获取类对象后就可以查看类的信息,包括哪些类的描述,以及方法列表和属性属性;创建类型对象,调用类方法和操作属性
四、反射的优缺点:
1、优点
在运行时获得类的各种内容,进行反编译,对于Java这种先编译再运行的语言,能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,更加容易实现面向对象。
2、缺点
反射会消耗一定的系统资源,因此,如果不需要动态地创建一个对象,那么就不需要用反射;
反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。