现在的位置: 首页 > 综合 > 正文

Java的反射机制

2017年11月29日 ⁄ 综合 ⁄ 共 1139字 ⁄ 字号 评论关闭

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通过装载,链接,初始化


抱歉!评论已关闭.