1. Java 反射API的第一个主要作用是获取程序在运行时刻的内部结构。这对于程序的检查工具和调试器来说,是非常实用的功能。只需要短短的十几行代码,就可以遍历出来一个Java类的内部结构,包括其中的构造方法、声明的域和定义的方法等。这不得不说是一个很强大的能力。只要有了java.lang.Class类 的对象,就可以通过其中的方法来获取到该类中的构造方法、域和方法。对应的方法分别是getConstructor、getField和getMethod。这三个方法还有相应的getDeclaredXXX版本,区别在于getDeclaredXXX版本的方法只会获取该类自身所声明的元素,而不会考虑继承下来的。Constructor、Field和Method这三个类分别表示类中的构造方法、域和方法。这些类中的方法可以获取到所对应结构的元数据。
2.待测试类
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.测试方法
package com.home.action.test.mode.reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* 测试基本类的反射
* @author li
*/
public class Test {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
try {
//构造函数
Constructor<Counter> contructor = Counter.class.getConstructor(int.class);
System.out.println("contructorName: "+contructor.getName());
Counter counter = contructor.newInstance(10);
counter.increase(10);
//基本方法
Method[] methods = Counter.class.getMethods();
for(Method method: methods) {
System.out.println("method: "+method.getName());
}
Method method = Counter.class.getMethod("increase", int.class);
method.invoke(counter, 6);
//属性值
Field[] fields = Counter.class.getFields();
for(Field field: fields) {
System.out.println("fieldName: "+field.getName());
}
//count类型要设置public 否则获取不到, 提示异常信息
Field field = Counter.class.getField("count");
System.out.println("countField: "+field.getName());
//处理泛型
Field mapField = Counter.class.getDeclaredField("map");
Type type = mapField.getGenericType();
System.out.println("mapType: "+ type.toString());
if(type instanceof ParameterizedType) {
ParameterizedType paramerizedType = (ParameterizedType)type;
Type[] actualTypes = paramerizedType.getActualTypeArguments();
for(Type t: actualTypes) {
if(t instanceof Class){
Class clz = (Class)t;
System.out.println("classType: "+ clz.getName());
}
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
本文将详细介绍如何使用Java反射机制实现一个简单但功能齐全的日志记录器——`LoggerUtil`。此日志记录器能够根据不同级别(如INFO、ERROR)记录日志,并允许通过反射动态调用日志记录方法,从而提供了一种灵活的...
在本篇文章中,我们将探讨Java反射的基本概念、如何使用以及其在实际开发中的应用,结合“JAVA简单的反射案例”这一主题。 1. **什么是Java反射**: Java反射机制允许我们在运行时动态地获取类的信息(如类名、...
Java反射和动态代理是Java编程中的高级特性,它们在实际开发中有着广泛的应用。反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至能够动态调用方法和修改对象的状态。动态代理则是在运行时创建一个实现...
关于Java反射的实例,我们可以创建一个简单的例子。假设我们有一个接口`Service`和两个实现类`ServiceImpl1`、`ServiceImpl2`。在不使用反射的情况下,我们通常会通过new关键字创建服务对象。而通过反射,可以在运行...
本压缩包“JAVA学习记录.rar”似乎是一个个人的学习笔记集合,可能包含了一系列关于Java编程的基础到高级概念。 在学习Java的过程中,首先会接触的是基础语法,例如变量、数据类型、运算符、控制结构(如if语句、...
本文将深入探讨一个基于Java反射技术构建的APP自动化混合测试框架的研究与实现。Java反射机制是Java语言的一个强大特性,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态调用方法和改变对象状态。在...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性等。在本文中,我们将深入理解Java反射的概念,掌握其核心实现,并探讨它在实际开发中的...
Java反射机制是Java语言提供的一种强大的能力,它允许在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在本篇“java反射机制学习(五):工厂模式”中,我们将探讨如何利用反射与工厂模式...
总结起来,将Map转换为Java实体对象是Java开发中常见的需求,我们可以利用Core Java JDK 1.8的泛型和反射来实现这一功能。通过创建一个通用的工具类,我们可以简化代码并提高代码复用性。在使用过程中,需要注意处理...
### Java语言的反射机制 #### 10.1 Java Reflection API简介 Java的反射机制是一种强大的功能,允许程序在运行时动态地获取类的信息、构造类的对象、调用类的方法等。这一机制使得Java程序具备了高度的灵活性与...
Java反射机制是Java语言提供的一种强大的能力,允许程序在运行时动态地获取类的信息并调用其方法。在本示例中,`BaseDao` 类使用反射来创建一个通用的数据库查询方法,这可以极大地提高代码的复用性和灵活性。以下是...
总结来说,通过Java的反射和动态代理,我们可以轻松地实现AOP,将日志记录等横切关注点与业务逻辑解耦。这种设计模式在大型复杂应用中尤为有用,因为它允许我们以灵活的方式管理横切关注点,而无需修改大量业务代码...
listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...
进一步深入,你将接触到Java的高级特性,如反射、动态代理、注解等。这些特性在框架开发和元编程中十分有用。同时,Java 8及以后的版本引入了lambda表达式和流API,使得函数式编程成为可能,极大地简化了代码。 在...
总结一下,Java反射机制提供了访问注解信息的功能,这在许多场景下非常有用。通过`getAnnotations()`和`getAnnotation(Class<T> annotationType)`方法,我们可以方便地获取到类成员方法上的注解,并读取其包含的数据...
这个名为“一些简单java例子”的压缩包文件显然包含了针对初学者的基础Java编程实例,旨在帮助新手理解并掌握Java语言的核心概念。 1. **Java基础知识**: - **变量与数据类型**:Java有基本数据类型(如整型、...
反射机制是指在Java程序中,可以在运行时动态地获取和修改类的结构和行为,而不是在编译时确定的。动态代理是指在运行时动态地生成代理对象,以实现对目标对象的拦截和控制。 二、代码实现 1、定义目标接口 首先...