JAVA反射机制:
程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection(反射机制)。
概述:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
功能:
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
原理:
任何一个类如果没有明确地声明继承自哪个父类时,则默认继承Object类.
所以下面两行代码含义一样:
calss Person extends Object{}
class Person{}
在java中Object类是一切类的父类,那么所有类的对象实际上也就都是java.lang.Class类的实例,所以所有的对象都可以转变为java.lang.Class类型表示.
实例化Class类对象:
package org.lxh.demo.getclassdemo ;
class X{
};
public class GetClassDemo{
public static void main(String args[]){
Class<?> c1 = null ; // 指定泛型
Class<?> c2 = null ; // 指定泛型
Class<?> c3 = null ; // 指定泛型
try{
// 以下的操作形式是在开发中最常用的一种形式
c1 = Class.forName("org.lxh.demo.getclassdemo.X") ;
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
c2 = new X().getClass() ; // 通过Object类中的方法实例化
c3 = X.class ; // 通过类.class实例化
System.out.println("类名称:" + c1.getName()) ; // 得到类的名称
System.out.println("类名称:" + c2.getName()) ; // 得到类的名称
System.out.println("类名称:" + c3.getName()) ; // 得到类的名称
}
};
所以JAVA反射机制是Java动态性的体现.
Class类的使用:
- 通过无参构造实例化对象
- 调用有参构造实例化对象
反射的应用(取得类的结构):
- 取得所实现的全部接口
- 取得父类
- 取得全部构造方法
- 取得全部方法
- 取得全部属性
类及对象的生命周期:
要使用一个类,首先要使JVM通过装载,链接,初始化