今天我们来讲一讲什么是java的反射机制,我们要了解一个新事物之前,我们应该首先的了解它的基本概念,那什么是反射呢?
java的反射概念:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。
我们为什么要使用反射机制
为什么使用?当然是因为好用喽,不好用早就被淘汰了,哈哈~
我们可以像框架一样,可以写写一套机制,来处理任意的类,使程序更加的灵活
我们首先来理一理,创建一个对象的方式有哪些呢?
- 通过new一个对象来创建一个对象
- 反序列化来创建一个对象(线程)
- 反射
new 对象:
这样是不是创建了一个对象以后,这个对象就只能代表它这么一个对象,所以就不具有灵活性,所以我们就有了反射创建对象获得class的方法的方式
Java反射相关类主要包括
- Class 类型
- Constructor 构造方法
- Method 方法
- Field 属性
- 反射API将类的类型、方法、属性都封装成了类,其中最重要的类是Class,可以说,反射的使用都是从Class开始.
一旦class文件被加载到内存中,就会为创建一个class对象,Class类可以通过Java反射机制的基础,可以动态的得到类的定义信息,包括属性 成员变量,构造方法等.
获得class的三种方法:
//class文件创建的三种方法
Class c1=User.class;
System.out.println(c1);
Class c2=new User().getClass();
System.out.println(c2);
String className="feifan.com.test.User";
Class c3= Class.forName(className);
System.out.println(c3);
//c1==c2==c3
反射优缺点
● 优点:
- 增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作
- 提高代码的复用率,比如动态代理
- 可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态调用
● 缺点:
- 反射会涉及到动态类型的解析,导致性能要比非反射调用更低
- 使用反射技术通常要在一个没有安全限制的程序运行.
- 反射可以绕过一些限制访问的属性或者方法,可能会导致破坏代码本身的抽象性