- 浏览: 191968 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (75)
- JSP/Servlet (4)
- Spring (5)
- Hibernate (1)
- Struts (5)
- EJB (3)
- Swing (1)
- Core Java (29)
- Algorithm (2)
- HTML/CSS/JavaScript (0)
- JQuery/AJAX (1)
- Oracle (0)
- Design Pattern (2)
- MVC (0)
- Web服务器 (3)
- 杂项 (0)
- NetCDF On Java (0)
- Java Extension (2)
- iBATIS (4)
- English Articles (1)
- JavaEE (3)
- Java8 (3)
- Android (3)
- Maven (1)
- Hadoop (1)
- Docker (0)
- Java高并发 (0)
最新评论
-
Bll:
为什么要推荐jsp动作标签访问呢?
JavaBean入门 - 概念和简单例子 -
落雪封:
我检查过了,没有注释,只是大文本,也一直报这个错,求原因
Abator生成错误:XML document structures must start and end within the same entity
反射(reflective)是指能够分析类的能力。
利用反射,我们可以在运行时分析类,查看对象。
在Java中类的运行时信息保存在Class类中。
那么,如何获得一个Class类的对象呢?
基本方法有三种:
1) 通过对象的getClass(类全名)方法
eg:
Employee e;
Class c = e.getClass();
2) 通过Class类自己的静态方法forName
eg:
String className = "java.util.Date";
Class c = Class.forName(className);
3) 通过"类名.class"来获取Class对象
eg:
Class c1 = Date.class;
Class c2 = int.class;
Class c3 = Double[].class;
反射最基本的一个应用就是:我们可以在运行时创建类的实例。
可以利用Class类的newInstance()方法创建类的实例。
例如:
e.getClass().newInstance();
Class.forName("java.util.Date").newInstance();
下面的例子是通过输入一个类名来打印出类的构造函数,方法和属性。
利用反射,我们可以在运行时分析类,查看对象。
在Java中类的运行时信息保存在Class类中。
那么,如何获得一个Class类的对象呢?
基本方法有三种:
1) 通过对象的getClass(类全名)方法
eg:
Employee e;
Class c = e.getClass();
2) 通过Class类自己的静态方法forName
eg:
String className = "java.util.Date";
Class c = Class.forName(className);
3) 通过"类名.class"来获取Class对象
eg:
Class c1 = Date.class;
Class c2 = int.class;
Class c3 = Double[].class;
反射最基本的一个应用就是:我们可以在运行时创建类的实例。
可以利用Class类的newInstance()方法创建类的实例。
例如:
e.getClass().newInstance();
Class.forName("java.util.Date").newInstance();
下面的例子是通过输入一个类名来打印出类的构造函数,方法和属性。
package coretrain.reflection; import java.util.*; import java.lang.reflect.*; public class ReflectionTest { public static void main(String[] args) { // read class name from command line args or user input String name; if (args.length > 0) name = args[0]; else { Scanner in = new Scanner(System.in); System.out.println("Enter class name (e.g. java.util.Date): "); name = in.next(); } try { // print class name and superclass name (if != Object) Class cl = Class.forName(name); Class supercl = cl.getSuperclass(); System.out.print("class " + name); if (supercl != null && supercl != Object.class) System.out.print(" extends " + supercl.getName()); System.out.print("\n{\n"); printConstructors(cl); System.out.println(); printMethods(cl); System.out.println(); printFields(cl); System.out.println("}"); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.exit(0); } /** * Prints all constructors of a class */ public static void printConstructors(Class cl) { Constructor[] constructors = cl.getDeclaredConstructors(); for (Constructor c : constructors) { String name = c.getName(); System.out.print(" " + Modifier.toString(c.getModifiers())); System.out.print(" " + name + "("); // print parameter types Class[] paramTypes = c.getParameterTypes(); for (int j = 0; j < paramTypes.length; j++) { if (j > 0) System.out.print(", "); System.out.print(paramTypes[j].getName()); } System.out.println(");"); } } /** * Prints all methods of a class */ public static void printMethods(Class cl) { Method[] methods = cl.getDeclaredMethods(); for (Method m : methods) { Class retType = m.getReturnType(); String name = m.getName(); // print modifiers, return type and method name System.out.print(" " + Modifier.toString(m.getModifiers())); System.out.print(" " + retType.getName() + " " + name + "("); // print parameter types Class[] paramTypes = m.getParameterTypes(); for (int j = 0; j < paramTypes.length; j++) { if (j > 0) System.out.print(", "); System.out.print(paramTypes[j].getName()); } System.out.println(");"); } } /** * Prints all fields of a class */ public static void printFields(Class cl) { Field[] fields = cl.getDeclaredFields(); for (Field f : fields) { Class type = f.getType(); String name = f.getName(); System.out.print(" " + Modifier.toString(f.getModifiers())); System.out.println(" " + type.getName() + " " + name + ";"); } } }
发表评论
-
Java高并发和多线程系列 - 1. 线程基本概念
2018-04-16 09:45 3621. 什么是线程? 线程和进程的区别 在了解线程的概念前,我 ... -
Java多线程编程-同步和锁
2017-10-04 13:29 01. 竞态条件(Race Condition) 两个或以上线 ... -
Core Java - 流(Stream) - 字节流和字符流(一)
2016-12-02 17:27 4910. 概述: Java中基于流的 ... -
Java开发 - 异常 - 使用throws
2016-04-21 11:35 562如果一个方法可能会产生异常,我们需要用throws关键字给它标 ... -
Java开发 - 异常 - 抛出异常
2016-04-21 11:24 630问题: 如何抛出一个系统异常并且捕获它 代码如下: pu ... -
Java8通过管道流(stream)来实现集合的一些聚合函数
2015-10-22 10:24 1803stream的一些聚合函数包括: count(), findF ... -
数组自定义排序
2015-10-21 14:17 1459CustomComparator.java package ... -
数组排序
2015-10-21 09:58 706SortArray.java package coreja ... -
HashMap使用范例
2015-10-20 14:25 794HashMapDemo.java package core ... -
Java8新特性 - Lambda表达式 - Functional Interfaces
2015-10-20 09:52 775Mapper.java package corejava8 ... -
使用Hashtable和线程技术制作自己简单的内存缓存
2013-07-19 11:06 11591. 首先,我们要做一个缓存数据类 这个数据类要有一个数据 ... -
Java OutOfMemory 解决
2013-07-19 10:18 837Eclipse中设置 -
String.format方法使用
2013-06-18 15:21 1918一.常规类型、字符类型和数值类型的格式说明符的语法如下:%[a ... -
JDK1.6连接SQL Server2008失败的原因
2011-07-29 15:05 10781. 需要下载最新sql server jdbc,从微软网站下 ... -
jar命令打包java带有包名的类文件
2011-07-13 09:40 1314jar cvfm JTool.jar jtool\ui\man ... -
ikvm转换jar文件成dll
2011-06-19 22:35 1747ikvmc -out:BasicFileOutput.dll ... -
jar命令打包java类文件
2011-06-19 22:33 1368jar cvfm BasicFileOutput.jar ma ... -
Java命令行编译自动生成包目录
2011-06-19 18:01 1394javac -d . BufferedInputFile.ja ... -
用命令行编译和执行带有包的java文件
2011-06-19 15:24 2787主要介绍java和javac命令的使用, 分带package和 ... -
FilenameFilter过滤目录下文件
2011-06-19 10:01 991编写一个实现FilenameFilter接口的类 publ ...
相关推荐
### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...
【反射-类加载之间的关联关系】 1、 使用反射方法强制创建某各类或者接口对应的java.lang.Class对象时,会进行类加载,(而类加载会将字节码的class文件读入内存,并为之创建一个Class对象)。 2、 反射让类加载了,...
1. **Class类**:`Class`类用来描述内存中的`.class`字节码文件。每一个`Class`对象代表内存中的一个`.class`文件。 - **获取Class对象的方式**: - 通过类名获取:`Class.forName("com.example.MyClass")` - ...
Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。这个教程"652.650.JAVA基础教程_反射-获取运行时类的方法的内部结构(652)"显然是针对Java反射机制的深入学习,...
Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。在"658.656.JAVA基础教程_反射-调用运行时类中的指定构造器(658).rar"这个压缩包文件中,我们很显然会学...
通过java.lang.Class类和相关API,我们可以动态地创建对象、调用方法、访问和修改属性,甚至执行私有方法。反射在许多场景下都很有用,比如序列化、框架设计、元数据处理等。 3. **枚举**:枚举是Java中的数据类型...
1. **Class类**:`java.lang.Class`是Java反射的基础,它代表了Java中的每一个类或接口。通过`Class`对象,我们可以获取到类的各种信息,如类名、构造器、方法、字段等。 2. **获取Class对象**: - `Class.forName...
3. `java.lang.reflect`包中的关键类:`Class`类用于表示Java类和接口,`Constructor`类代表类的构造器,`Method`类表示类的方法,`Field`类则封装了类的字段或属性。 4. 获取类的全部接口:使用`Class....
Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...
它主要通过java.lang.Class类和java.lang.reflect包中的类(如Constructor、Method和Field)来实现。以下是一些核心知识点: 1. 获取Class对象:可以通过Class.forName()方法、对象.getClass()方法或类名.class来...
Java反射机制是Java编程语言中一个非常重要的特性,它允许程序在运行时动态地获取类的信息并进行操作。反射机制的核心在于,它打破了程序在编译时的静态性,使得程序能够在运行时发现并调用类、接口、字段和方法等...
反射的核心类包括Class、Constructor、Method和Field。Class对象代表Java类,可以用来获取类的元数据,包括类名、父类、接口、构造函数、方法和字段。Constructor表示类的构造函数,Method表示类的方法,Field表示类...
"dynamic-load-class-parent.zip"这个压缩包可能包含了一些示例代码或教程,旨在帮助我们理解并实践Java中的动态类加载机制。下面我们将深入探讨这个主题。 1. **类加载器(ClassLoader)**: 类加载器是Java虚拟机...
Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法的信息。在“java反射-在form提交的一些应用”这个主题中,我们将探讨如何利用反射机制来处理HTML表单提交的数据,以及...
而在Java中,动态类创建通常涉及反射(Reflection)和Java的`Class`对象。通过`Class.forName()`方法,可以加载指定名称的类。如果需要在运行时创建类,可能需要使用`java.lang.reflect.Proxy`或字节码操作库如ASM或...
Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。这个教程"655.653.JAVA基础教程_反射-获取运行时类的接口、所在包、注解等(655)"将深入讲解如何利用反射获取...
// 使用反射获取私有内部类的Class对象 Class clss = Class.forName("org.wind.oms.fm.main.DefaultHandler$PThread"); // 获取私有内部类的构造器 Constructor conn = clss.getDeclaredConstructors()[0]; ...
1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class<Color> colorClass = (Class) Class.forName(...
本教程聚焦于通过反射获取运行时类的父类以及父类中的泛型信息。这是一项高级技能,对理解和调试复杂的Java应用程序尤其有用。 首先,我们来理解什么是反射。在Java中,类、接口和方法等都是由类对象表示的,这些类...
在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至可以操作私有成员,这对于单元测试、插件系统、动态代理等场景非常有用。 一、...