导航:首页 > 编程语言 > java反射的例子

java反射的例子

发布时间:2022-04-11 18:08:16

‘壹’ java反射机制的作用请举例说明。

比较全的解释了:JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
1. 得到某个对象的属性

1 public Object getProperty(Object owner, String fieldName) throws Exception {
2 Class ownerClass = owner.getClass();
3
4 Field field = ownerClass.getField(fieldName);
5
6 Object property = field.get(owner);
7
8 return property;
9 }
Class ownerClass = owner.getClass():得到该对象的Class。

Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。

Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

2. 得到某个类的静态属性

1 public Object getStaticProperty(String className, String fieldName)
2 throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Field field = ownerClass.getField(fieldName);
6
7 Object property = field.get(ownerClass);
8
9 return property;
10 }

Class ownerClass = Class.forName(className) :首先得到这个类的Class。

Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。

Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。

3. 执行某对象的方法

1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
2
3 Class ownerClass = owner.getClass();
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(owner, args);
14 }
Class owner_class = owner.getClass() :首先还是必须得到这个对象的Class。

5~9行:配置参数的Class数组,作为寻找Method的条件。

Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。

method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。

4. 执行某个类的静态方法

1 public Object invokeStaticMethod(String className, String methodName,
2 Object[] args) throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(null, args);
14 }

基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。

5. 新建实例
1
2 public Object newInstance(String className, Object[] args) throws Exception {
3 Class newoneClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Constructor cons = newoneClass.getConstructor(argsClass);
12
13 return cons.newInstance(args);
14
15 }

这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。

Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。

第5~第9行:得到参数的Class数组。

Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。

cons.newInstance(args):新建实例。

6. 判断是否为某个类的实例

1 public boolean isInstance(Object obj, Class cls) {
2 return cls.isInstance(obj);
3 }

7. 得到数组中的某个元素
1 public Object getByArray(Object array, int index) {
2 return Array.get(array,index);
3 }

‘贰’ Java的反射到底有什么用途

反射的作用可谓是博大精深,

  1. JDK动态代理生成代理类的字节码后,首先把这个类通过defineclass定义成一个类,然后用class.for(name)会把该类加载到jvm,之后我们就可以通过,A.class.GetMethod()获取其方法,然后通过invoke调用其方法,在调用这个方法时,实际上会通过被代理类的引用再去调用原方法。

  2. Java反射包reflection提供对Class,Method,field,constructor1 等信息的封装类型

  3. 通过这些api可以轻易获得一个类的各种信息并且可以进行实例化,方法调用等。
    类中的private参数可以通过setaccessible方法强制获取。

‘叁’ JAVA中反射是什么

JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。

Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。

(3)java反射的例子扩展阅读:

JAVA中反射实例:

1、Class superClass=clazz.getSuperclass();//获取父类。

System.out.println("getSuperclass:"+superClass)。

2、Class[] interfaces=clazz.getInterfaces();//获取实现接口。

System.out.println("getInterfaces:"+interfaces.length)。

3、Constructor[] cons=clazz.getConstructors();//构造方法。

System.out.println("getConstructors:"+cons.length)。

参考资料来源:网络: JAVA反射机制

‘肆’ 举一个java反射的例子,反射一般在java中什么时候用Interceptor是通过反射实现的吗

比如说自己定义了一个annotation,然后要自己写一个解析器,此时用反射。

还有一些MVC的例子,假如在xml文件中定义了action类与其对应的logic类,可以通过反射在action中获得logic的实例;如果在action的父类中定义了类似直接在action中调用logic方法的方法,我们可以通过给方法中传入logic的类名和方法名直接反射调用方法。

‘伍’ java反射机制实例

import java.lang.reflect.Method;

public class InvokeTester
{
public int add(int param1, int param2)
{
return param1 + param2;
}

public String echo(String message)
{
return "hello: " + message;
}

public static void main(String[] args) throws Exception
{
Class<?> classType = InvokeTester.class;

Object invokeTester = classType.newInstance();

// System.out.println(invokeTester instanceof InvokeTester); //返回true

Method addMethod = classType.getMethod("add", new Class[] { int.class,int.class }); //第二个形参表示指定的add方法要接收为int的类型的两个参数

Object result = addMethod.invoke(invokeTester, new Object[]{1, 2}); //反射调用,将1,2传入InvokeTester.Class的实例invokeTester里的add方法。得返回的结果。

System.out.println((Integer)result);

System.out.println("---------------------");

Method echoMethod = classType.getMethod("echo", new Class[]{String.class});

Object result2 = echoMethod.invoke(invokeTester, new Object[]{"tom"});

System.out.println((String)result2);
}
}

‘陆’ java中反射原理,和应用

此问题就是给你写一篇10000字的作文都不一定能将的清楚,我大致上说一下,反射的原理:一类事物在一起统称一个类class,所有的class在一起统称类Class,注意大小写;用类CLass去调用我们的一个类class用的就是反射,在SSH里面经常有配置文件里面需要写一个类的全名,然后框架就会去调用这个类,你想过为什么吗?他系统有不可能直接NEW一个你这个类的对象,他是如何调用类里面的方法?这个就是反射的强大之处了,不用new的,只要一个类的全名就能执行里面的方法

‘柒’ 哪些项目中用到了Java反射机制

什么是反射?将类的每个组件封装到另一个对象中的过程称为反射。其中,组件表示我们类的成员变量(Field)、构造方法(Constructor)和成员方法(Method)。反射使您可以在程序运行期间操作类对象,从而提高程序的灵活性。解耦提高了程序的可扩展性,提高了代码重用率,便于外部调用。任何类别只要知道类别名称,就可以知道该类别的所有属性和方法。

反射像镜子一样,让开发者知道这个类中有哪些成员。大多数人想知道Java有包,为什么会有反射。破坏封装性。通过允许外部访问个人变量,使类不太安全。就我个人而言,反射机制实际上是上帝的模型。如果方法的调用是Java正确的打开方式,那么反射机制就是上帝偷偷打开的后门。只要有相应的class存在,什么都可以调用。那么,上帝为什么要打开这个后门呢?这包括静态和动态概念。

‘捌’ 如何使用JAVA反射/JAVA反射实例

Class<?>class1=null;
class1=Class.forName("com.demo.Person");
//由于这里不能带参数,所以你要实例化的这个类Person,一定要有无参构造函数哈~
Personperson=(Person)class1.newInstance();
person.setAge(20);
person.setName("LeeFeng");

‘玖’ Java:描述反射机制的作用举几个反射的应用

说多多的也没用,我就简单给你介绍几个。既然你学了Java,那么反射就算你不会,你在学习过程中也会经常遇到。1、有了反射机制,那么就能逆向代码了,反编译器就是这个原理。2、像流行的框架,Spring,Hibernate等,就是利用反射机制,要不然怎么可能你配置下文件就完事呢3、动态生成类啊,当然spring里面都用到了。希望我的回答对你有帮助!

‘拾’ java反射有哪些例子

struts2框架就是最典型的反射例子,它的核心控制器拦截器就是典型的反射。

阅读全文

与java反射的例子相关的资料

热点内容
优信二手车解压后过户 浏览:61
Windows常用c编译器 浏览:778
关于改善国家网络安全的行政命令 浏览:833
安卓如何下载网易荒野pc服 浏览:654
javainetaddress 浏览:104
苹果4s固件下载完了怎么解压 浏览:1002
命令zpa 浏览:285
python编译器小程序 浏览:944
在app上看视频怎么光线调暗 浏览:540
可以中文解压的解压软件 浏览:592
安卓卸载组件应用怎么安装 浏览:912
使用面向对象编程的方式 浏览:339
程序员项目经理的年终总结范文 浏览:929
内衣的加密设计用来干嘛的 浏览:432
淮安数据加密 浏览:292
魔高一丈指标源码 浏览:982
松下php研究所 浏览:168
c回调java 浏览:399
梦幻端游长安地图互通源码 浏览:745
电脑本地文件如何上传服务器 浏览:313