1. Java 反射API的第一个主要作用是获取程序在运行时刻的内部结构。这对于程序的检查工具和调试器来说,是非常实用的功能。只需要短短的十几行代码,就可以遍历出来一个Java类的内部结构,包括其中的构造方法、声明的域和定义的方法等。这不得不说是一个很强大的能力。只要有了java.lang.Class类 的对象,就可以通过其中的方法来获取到该类中的构造方法、域和方法。对应的方法分别是getConstructor、getField和getMethod。这三个方法还有相应的getDeclaredXXX版本,区别在于getDeclaredXXX版本的方法只会获取该类自身所声明的元素,而不会考虑继承下来的。Constructor、Field和Method这三个类分别表示类中的构造方法、域和方法。这些类中的方法可以获取到所对应结构的元数据。
2.待测试类
- packagecom.home.action.test.mode.reflection;
-
importjava.util.Map;
-
publicclassCounter{
-
publicintcount;
-
publicMap<String,Object>map;
-
-
publicCounter(intcount){
-
this.count=count;
- }
-
-
publicvoidincrease(intstep){
- count=count+step;
-
System.out.println("count:"+count);
- }
- }
package com.home.action.test.mode.reflection;
import java.util.Map;
public class Counter {
public int count ;
public Map<String, Object> map;
public Counter(int count) {
this.count = count;
}
public void increase(int step) {
count = count + step;
System.out.println("count: "+count);
}
}
3.测试方法
- packagecom.home.action.test.mode.reflection;
-
importjava.lang.reflect.Constructor;
-
importjava.lang.reflect.Field;
-
importjava.lang.reflect.InvocationTargetException;
-
importjava.lang.reflect.Method;
-
importjava.lang.reflect.ParameterizedType;
-
importjava.lang.reflect.Type;
-
-
publicclassTest{
-
@SuppressWarnings("rawtypes")
-
publicstaticvoidmain(String[]args){
-
try{
-
-
Constructor<Counter>contructor=Counter.class.getConstructor(int.class);
-
System.out.println("contructorName:"+contructor.getName());
-
-
Countercounter=contructor.newInstance(10);
-
counter.increase(10);
-
-
-
Method[]methods=Counter.class.getMethods();
-
for(Methodmethod:methods){
-
System.out.println("method:"+method.getName());
- }
-
-
Methodmethod=Counter.class.getMethod("increase",int.class);
-
method.invoke(counter,6);
-
-
-
Field[]fields=Counter.class.getFields();
-
for(Fieldfield:fields){
-
System.out.println("fieldName:"+field.getName());
- }
-
-
-
Fieldfield=Counter.class.getField("count");
-
System.out.println("countField:"+field.getName());
-
-
-
FieldmapField=Counter.class.getDeclaredField("map");
- Typetype=mapField.getGenericType();
-
System.out.println("mapType:"+type.toString());
-
-
if(typeinstanceofParameterizedType){
- ParameterizedTypeparamerizedType=(ParameterizedType)type;
-
- Type[]actualTypes=paramerizedType.getActualTypeArguments();
-
for(Typet:actualTypes){
-
if(tinstanceofClass){
- Classclz=(Class)t;
-
System.out.println("classType:"+clz.getName());
- }
- }
- }
-
}catch(SecurityExceptione){
- e.printStackTrace();
-
}catch(NoSuchMethodExceptione){
- e.printStackTrace();
-
}catch(IllegalArgumentExceptione){
- e.printStackTrace();
-
}catch(InstantiationExceptione){
- e.printStackTrace();
-
}catch(IllegalAccessExceptione){
- e.printStackTrace();
-
}catch(InvocationTargetExceptione){
- e.printStackTrace();
-
}catch(NoSuchFieldExceptione){
- e.printStackTrace();
- }
- }
- }
分享到:
相关推荐
这段代码实现了一个简单的日志记录器LoggerUtil,其中使用了Java的反射机制。在类的构造方法中,创建了一个...这个简单的示例代码展示了如何使用Java反射来实现一个日志记录器,方便了对程序运行时信息的记录和管理。
listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...
自己写的简易Java命令行交互界面框架,可实现交互shell所具有的基本功能(没有历史记录功能),使用properties文件作为配置文件,利用反射实现命令的解析与向各个命令处理类的分发,使用简单,可作为各类Java小工程...
动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...
动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...
第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...
描述反射机制的作用 62.如何读写一个文件? 63.在图形界面中,一个按钮如何处理鼠标点击事件? 64.在图形界面中,一个表格,如何实现编辑单元格时弹出下拉框? 65.如何加载图片? 66.什么是模态对话框? 67....
B.2 运用反射机制来持久化Java对象 附录C 用XDoclet工具生成映射文件 C.1 创建带有@hibernate标记的Java源文件 C.2 建立项目的目录结构 C.3 运行XDoclet工具 附录D 发布和运行netstore应用 D.1 运行...
Reflection [java] 反射 [ri'flekʃәn] script n.手写体,小型程序 [skript] serialized vt.序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit...
书名:《Java开发实战1200例(第I卷)》(清华大学出版社.李钟尉,陈丹丹) PDF格式扫描版,全书分为24章,共817页。2011年1月出版。 全书压缩打包成4部分,这是第3部分 注:本系列图书的第I、II卷再版时均相应改名为...
记录下学习过程中的demo 目前已经有的功能 Java基础 动态代理demo 实现 反射的各种基础 反射和注解的结合 反射绕过泛型产生泛型擦除 Java8 新特性(函数式接口、静态导入、Optional、Stream、Lambda、新时间类) ...
2020年深圳java打工仔找工作记录帖,有一段时间的社畜了,所以直奔主题, 找的资料都是面试常用的,整理一下,希望能帮到大家 主要三个部分 1.搜集面试题目 2.java资料 3 找工作日期记录,看从准备工作开始,多久可以找到...
一个用于将协议简单集成到Java应用程序的库。 目的是提供一种简单,快速和可靠的方法,以将JSON-RPC 2.0协议集成到服务器和/或客户端上的Java应用程序中。 为此,您需要配置JsonRpcClient或JsonRpcServer并实现...
那么书写操作数据库的代码很简单:只需呼叫FacadeForDAO.findModel(表名)方法,在表名参数给出实际数据库中表的名称就可以返回一个包含对应POJO类的对象的集合--非常简单--输入表名得到Java对象的集合,然后根据需要...
1.3一个简单的Java应用程序14 1.4一个简单的Java小程序16 1.5本章小结18 第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 ...
杂项,日常学习中遇见的一些问题,进行简单记录。未来会详细整理到javaNIO基础前置笔记网上搜集。 网上搜集网上搜集停止更新,还是官方文档好用网上搜集基础上进行补充整理网上搜集基础上进行补充整理网上搜集基础...