前段时间维护系统遇到的一个问题:在服务器上运行的程序有问题,本机却没问题。 查看服务器日志:set方法参数类型不匹配。 Debug后发现是在BeanUtil的set方法上出的问题。涉及java的反射应用,可能是反射对int等基本数据类型不是完全支持(但,在本机上问什么没问题呢?)。操作不了服务器,没做实际测试。 网上搜索了关于Java反射的一些知识。 Java反射机制是 Java 语言被视为准动态语言的关键性质。 J ava反射机制的核心就是允许在运行时通过 Java Reflection APIs 来取得已知名字的 class 类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为 private 的域或方法)。 因此,要想使用Java 反射,我们首先得到 Class 类的对象。下表列出了几种得到 Class 类的方法,以供大家参考。 Class object 诞生管道 示例 运用getClass() 注:每个class 都有此函数 String str = "abc"; Class c1 = str.getClass(); 运用 Class.getSuperclass() Button b = new Button(); Class c1 = b.getClass(); Class c2 = c1.getSuperclass(); 运用static method Class.forName() (最常被使用) Class c1 = Class.forName ("java.lang.String"); Class c2 = Class.forName ("java.awt.Button"); Class c3 = Class.forName ("java.util.LinkedList$Entry"); Class c4 = Class.forName ("I"); Class c5 = Class.forName ("[I"); 运用 .class 语法 Class c1 = String.class; Class c2 = java.awt.Button.class; Class c3 = Main.InnerClass.class; Class c4 = int.class; Class c5 = int[].class; 运用 primitive wrapper classes 的TYPE 语法 Class c1 = Boolean.TYPE; Class c2 = Byte.TYPE; Class c3 = Character.TYPE; Class c4 = Short.TYPE; Class c5 = Integer.TYPE; Class c6 = Long.TYPE; Class c7 = Float.TYPE; Class c8 = Double.TYPE; Class c9 = Void.TYPE; 获取一些基本信息 在我们得到一个类的Class 类对象之后, Java 反射机制就可以大施拳脚了。首先让我们来了解下如何获取关于某一个类的一些基本信息。 Java class 内部模块 Java class 内部模块说明 相应之Reflection API,多半为Class methods。 返回值类型(return type) package class隶属哪个package getPackage() Package import class导入哪些classes 无直接对应之API。 可间接获取。 modifier class(或methods, fields)的属性 int getModifiers() Modifier.toString(int) Modifier.isInterface(int) int String bool class name or interface name class/interface 名称getName() String type parameters 参数化类型的名称 getTypeParameters() TypeVariable [] base class base class(只可能一个) getSuperClass() Class implemented interfaces 实现有哪些interfaces getInterfaces() Class[] inner classes 内部classes getDeclaredClasses() Class[] outer class 如果我们观察的class 本身是inner classes,那么相对它就会有个outer class。 getDeclaringClass() Class 上表中,列出了一些Java class 内部信息的获取方式。所采用的方法几乎都是调用 Class 对象的成员方法(由此你就可以了解到 Class 类的用处了吧)。当然,表中所列出的信息并不是全部,有很大一部分没有列出,你可以通过查阅 Java 文档得到更全面的了解。另外,下面将重点介绍一下类的构造函数、域和成员方法的获取方式。
分享到:
相关推荐
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...
Java反射机制允许我们在程序运行期间动态地获取类、接口、字段和方法的信息,并能对这些信息进行操作。例如,我们可以获取一个对象的类类型,实例化未知类型的对象,访问和修改私有属性,以及调用任意方法。反射机制...
Java试题-5:应用反射创建对象,调用对象方法 反射为Java的高级技术应用
"Java 反射机制详解" Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时检查和修改自身的结构和行为。它主要用于动态的创建对象、调用方法和访问属性等。 ### Java 反射机制的定义 Java 反射机制是指...
Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象的内部信息,即使这些信息在编译时并不知道。这一机制使得Java具有了高度的动态性,能够实现元编程,即在程序...
- [Oracle官方文档](https://docs.oracle.com/javase/tutorial/reflect/):提供关于Java反射机制的详细解释和示例。 - [Effective Java](https://www.amazon.com/Effective-Java-3rd-Edition/dp/0134685997):由...
Java试题-3:反射和泛型的综合应用 Java反射 泛型都是比较高级的应用技术
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...
java注解和反射的个人学习笔记
Java的类反射是Java语言中一个强大的特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够更加灵活,可以处理未知类型的对象,实现元编程,以及在运行时创建和访问类...
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...
### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...
Java反射机制是Java编程语言中一个强大的特性,它允许运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性以及处理数组等。在本篇讲解中,我们将深入理解如何通过反射来执行方法、操作属性以及处理...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。当我们需要在运行时动态地...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和Field...
Class类是Java反射的入口,每个类在内存中都有一个对应的Class对象。通过Class对象,我们可以获取到类的信息,如类名、包名、父类、接口、构造器、方法和字段等。常见的Class对象获取方式有:`Class.forName("全...