TypechoJoeTheme

IT技术分享

统计

JAVA反射机制

2015-05-17
/
0 评论
/
711 阅读
/
正在检测是否收录...
05/17

反射是Java被视为动态或者准动态语言的一个关键性质。目前主流的框架如SSH,Spring MVC都是利用Java的反射机制来实现的。

一、反射机制概述

反射机制是指程序在运行时能够获取任何类的内部所有信息。只要给出类的全名,即可通过反射获取类的所有信息;反射可以在程序运行时获取任意一个对象所属的类对象;在运行时可以获取到类中所有属性对象(包括私有属性),并对其进行操作;

在运行时可以获取到类中,父类中所有的方法,并且可以调用他们;

二、Class对象的实现

Class其实就是类的类型。

1、Class类常用方法

getName() //获得类的完整名称

getDeclaredFields()//获得类中的所有属性

getDeclaredMethods() //获得类中所有的方法

getConstructors()//获得类的构造方法

newInstance()//实例化类(利用的是类的无参构造方法)

2、获得类对象的方式

//1、通过类的完整路径和名称获得类对象

Class className = Class.forName("java.lang.String");

//2、通过类的实例化对象名称来获得类对象

String str = new String("This is a test");

Object o = srt;

Class className = o.getClass(); //Class className = str.getClass();

//3、通过类名获得类对象

Class className = String.getClass();

//4、通过类装载器获得类对象

ClassLoader loder = Thread.currentThread().getContextClassLoder();

Class clazz = loder.loadeClass("java.lang.String");

3、通过类对象实例化一个对象

Stromg str = (String) className.newInstance();

三、Field对象的实现

Field类是用于表示类和接口中的属性对象的类,可以操作类中全部的私有和公有属性。

1、常用方法

getName()//获取属性名称

getType()//获取属性类型

setAccessible(true)//开启控制权限

get(Object o)//获得对象o中这个属性的值,但如果该属性是私有的,就需要开启访问权限

set(Object o , Object value)//向对象o中的这个属性赋值

2、获取类中的属性

Field[] fi = className.getDeclaredFields();//可以得到所有属性,包括公有和私有

Field[] fi = className.getFields();//只能得到公有属性

四、Method对象的实现

Method类是用于表示类和接口中的方法对象的类,可以操作类中全部的私有和公有方法。

1、常用方法

getName()//获得方法名称

getReturnType()//获得方法返回值类型

invoke(Object o,Object args);//利用o对象调用该方法

getParameterTypes();//获得方法所有参数值类型,按照顺序返回Class数组

getDeclaredAnnotations();//获取方法的全部注释

2、利用类对象获得某方法

Method me = className.getMethod("setName", String.class);//得到setName方法,参数为String类型

Class[] cla = {String.class,int.calss};

Method me = className.getMethod("setStri",cla);//得到setStri方法,参数有多个,在cla中

3、使用 invoke()方法

me.invoke(o,new Object[0]);//表示调用o对象的me方法,没有参数

me.invoke(o,"张三");//表示调用了o对象的me方法,参数为字符串类型

Object oArgs = {"张三",22};

me.invoke(o,oArgs);//表示调用了o对象的me方法,参数有多个,放在oArgs中
朗读
赞 · 0
版权属于:

IT技术分享

本文链接:

https://idunso.com/archives/114/(转载时请注明本文出处及文章链接)