(Reflection)定义:在Java运行时环境中,对于任意一个类,对于任意一个对象,Java的反射机制能够动态获取类的信息以及动态调用对象的方法。
Java反射机制主要提供一下功能:
a.在运行时判断任意一个对象所属的类
b.在运行时构造任意一个类的对象
c.在运行时判断任意一个类所具有的成员变量和方法
d.在运行时调用任意一个对象的方法
在JDK中,主要由以下类来实现Java反射机制,位于java.lang.reflect包中:
Class类:代表一个类
Field类:代表类的成员属性或者成为类的属性
Method类:代表类的方法
Constructor类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组元素的静态方法
一、通过Class类获取成员变量、成员方法、接口、超类、构造方法等
在java.lang.Object类中定义了getClass()方法,对于任意一个Java对象,都可以通过此方法获取对象的类型。Class类是Reflection API中的核心类,它有以下方法
getName():获取类的完整名字
getFields():获取类的public类型的属性
getDeclaredFields():获取类的所有属性
getMethods():获取类的public类型的方法
getDeclaredMethods():获取类的所有方法
getMethod(String name,Class[] parameterTypes):获取类的特定方法,name指定方法名称,parameterTypes参数指定方法的参数类型
getConstructors():获取类的public类型的构造方法
getConstructor(Class[] parameterTypes):获取类的特定构造方法,parameterTypes指定构造方法的参数类型
newInstance():通过类的不带参数的构造函数build这个类的一个对象
A:Class
package com.javareflect.base.classdemo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
public class RefConstructor {
public static void main(String[] args) throws Exception {
RefConstructor ref = new RefConstructor();
ref.getConstructor();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public void getConstructor() throws Exception {
Class c = null;
c = Class.forName("java.lang.Long");
Class[] cs = { java.lang.String.class };
Constructor cs1 = c.getConstructor(cs);
System.out.println("通过参数获取指定Class对象的构造方法:");
System.out.println(cs1.toString());
Constructor cs2 = c.getDeclaredConstructor(cs);
System.out.println("通过参数获取指定Class对象所表示的类或接口的构造方法");
System.out.println(cs2.toString());
Constructor cs3 = c.getEnclosingConstructor();
System.out.println("获取本地或匿名类Constructor对象,它表示基础类的立即封闭构造方法");
if (cs3 != null)
System.out.println(cs3.toString());
else
System.out.println("没有获取到任何构造方法");
Constructor[] cs4 = c.getConstructors();
for (int i = 0; i < cs4.length; i++) {
System.out.println(cs4[i].toString());
}
Type t1 = c.getGenericSuperclass();
System.out.println("返回超类:"+t1.toString());
Class[] cis = c.getClasses();
System.out.println("返回超类和所有实现的接口:");
for(int i =0;i<cis.length;i++){
System.out.println(cis[i].toString());
}
Class[] cls = c.getInterfaces();
System.out.println("4、实现的接口");
for(int i =0;i<cls.length;i++){
System.out.println(cls[i].toString());
}
Field fs1[] = c.getFields();
System.out.println("1、类或接口的所有可访问公共字段:");
for (int i = 0; i < fs1.length; i++) {
System.out.println(fs1[i].toString());
}
Field f1 = c.getField("MIN_VALUE");
System.out.println("2、类或接口的指定已声明指定公共成员字段:");
System.out.println(f1.toString());
Field fs2[] = c.getDeclaredFields();
System.out.println("3、类或接口所声明的所有字段:");
for (int i = 0; i < fs2.length; i++) {
System.out.println(fs2[i].toString());
}
Field f2 = c.getDeclaredField("serialVersionUID");
System.out.println("4、类或接口的指定已声明指定字段:");
System.out.println(f2.toString());
System.out.println("\n-------------------------------\n");
Method m1[] = c.getMethods();
System.out.println("1、返回类所有的公共成员方法:");
for (int i = 0; i < m1.length; i++) {
System.out.println(m1[i].toString());
}
Method m2 = c.getMethod("longValue", new Class[]{});
System.out.println("2、返回指定公共成员方法:");
System.out.println(m2.toString());
Method[] ms = c.getDeclaredMethods();
System.out.println("2、返回指定所有成员方法:");
for (int i = 0; i < ms.length; i++) {
System.out.println(ms[i].toString());
}
}
}
分享到:
相关推荐
Java反射机制深入研究,什么是Java的反射,Java反射的原理是什么
### Java反射机制深入浅出 #### 一、什么是反射? 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够直接操作这些信息。通俗来说,反射就像是为Java对象装上了一面镜子,通过这面...
### Java反射机制深入理解 #### 一、反射机制概述 Java反射机制是一种强大的工具,它允许程序在运行时检查和操作任何类、方法、构造函数和字段等元素。这种能力对于构建灵活的应用程序和框架非常有用,特别是那些...
通过本文,我们将深入探讨Java反射机制的核心概念、基本原理及其应用场景。 #### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制...
这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...
深入了解java反射机制的原理,通过反射机制可以破坏单例模式,如何防止通过反射机制拿到单例模式的构造器呢?用枚举类可破
通过8个demo,你可以逐步深入理解Java反射机制,从简单的获取类信息,到创建对象,调用方法,访问字段,再到处理注解和泛型,全方位掌握这一强大的工具。每个demo都应该设计为解决一个特定的问题,例如如何动态调用...
在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念:在程序运行时,通过Class对象获取类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用方法。...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
Java反射机制是Java编程语言中的一个强大特性,...通过学习和实践Java反射机制,你可以更深入地理解Java的运行机制,并在需要动态性、灵活性的场景中发挥其强大的功能。不过,使用反射时也应注意潜在的风险和性能影响。
在这个“利用java反射机制的建议计算器源码”中,我们将深入探讨如何使用反射来构建一个可扩展的计算器,帮助新手更好地理解这一概念。 首先,让我们解释什么是反射。在Java中,反射机制允许我们获取类的信息(如...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...
### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...
侯捷先生是一位著名的Java技术专家,他的"流星絮语"系列教程深入浅出地讲解了Java反射机制。通过他的学习笔记,我们可以更深入地理解如何在实际项目中应用反射,解决一些特定问题,如插件化开发、序列化、动态代理等...
总之,Java反射机制为开发者提供了强大的工具,使得程序在运行时能够对自身进行深入的探索和操作。然而,使用时也需谨慎,权衡其带来的灵活性与潜在的性能损失和安全风险。在实际开发中,合理运用反射可以大大提高...
Java反射机制是Java编程语言中一个...通过阅读"1139760298222java.pdf"这份文档,你可以更深入地理解Java反射机制,并结合实际示例学习如何在项目中有效利用这一特性。记得在实际操作中结合代码实践,以巩固理论知识。
首先,让我们深入理解Java反射机制。在Java中,`java.lang.Class`类是所有类的通用表示,它包含了关于类的所有信息。我们可以通过类的名字获取到`Class`对象,然后通过这个对象来访问类的方法和字段。`Method`类代表...
在"实战java反射机制-让你迅速认识java强大的反射机制"这个主题中,我们将深入探讨反射的核心概念和实际应用。 1. 反射基础: Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和...通过阅读和学习提供的"Java反射机制经典案例"文档,你可以深入理解这些概念,并学会如何在实际项目中有效地应用反射。