- 浏览: 189152 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 3281. 什么是线程? 线程和进程的区别 在了解线程的概念前,我 ... -
Java多线程编程-同步和锁
2017-10-04 13:29 01. 竞态条件(Race Condition) 两个或以上线 ... -
Core Java - 流(Stream) - 字节流和字符流(一)
2016-12-02 17:27 4510. 概述: Java中基于流的 ... -
Java开发 - 异常 - 使用throws
2016-04-21 11:35 517如果一个方法可能会产生异常,我们需要用throws关键字给它标 ... -
Java开发 - 异常 - 抛出异常
2016-04-21 11:24 572问题: 如何抛出一个系统异常并且捕获它 代码如下: pu ... -
Java8通过管道流(stream)来实现集合的一些聚合函数
2015-10-22 10:24 1770stream的一些聚合函数包括: count(), findF ... -
数组自定义排序
2015-10-21 14:17 1432CustomComparator.java package ... -
数组排序
2015-10-21 09:58 663SortArray.java package coreja ... -
HashMap使用范例
2015-10-20 14:25 764HashMapDemo.java package core ... -
Java8新特性 - Lambda表达式 - Functional Interfaces
2015-10-20 09:52 748Mapper.java package corejava8 ... -
使用Hashtable和线程技术制作自己简单的内存缓存
2013-07-19 11:06 11121. 首先,我们要做一个缓存数据类 这个数据类要有一个数据 ... -
Java OutOfMemory 解决
2013-07-19 10:18 798Eclipse中设置 -
String.format方法使用
2013-06-18 15:21 1882一.常规类型、字符类型和数值类型的格式说明符的语法如下:%[a ... -
JDK1.6连接SQL Server2008失败的原因
2011-07-29 15:05 10461. 需要下载最新sql server jdbc,从微软网站下 ... -
jar命令打包java带有包名的类文件
2011-07-13 09:40 1272jar cvfm JTool.jar jtool\ui\man ... -
ikvm转换jar文件成dll
2011-06-19 22:35 1699ikvmc -out:BasicFileOutput.dll ... -
jar命令打包java类文件
2011-06-19 22:33 1333jar cvfm BasicFileOutput.jar ma ... -
Java命令行编译自动生成包目录
2011-06-19 18:01 1352javac -d . BufferedInputFile.ja ... -
用命令行编译和执行带有包的java文件
2011-06-19 15:24 2756主要介绍java和javac命令的使用, 分带package和 ... -
FilenameFilter过滤目录下文件
2011-06-19 10:01 953编写一个实现FilenameFilter接口的类 publ ...
相关推荐
JAVA反射机制-Class类-Class对象的获取.pdf
【反射-类加载之间的关联关系】 1、 使用反射方法强制创建某各类或者接口对应的java.lang.Class对象时,会进行类加载,(而类加载会将字节码的class文件读入内存,并为之创建一个Class对象)。 2、 反射让类加载了,...
Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...
- 获取类的 Class 对象 - 构造类的实例化对象 - 获取一个类的所有信息 - 获取类中的变量(Field) - 获取类中的方法(Method) - 获取类的构造器(Constructor) - 获取注解 - 通过反射调用方法 - 反射的...
二,反射机制的作用: 1,反编译:.class-->.java 2,通过反射机制访问java对象的属性,方法,构造方法等; 这样好像更容易理解一些,下边我们具体看怎么实现这些功能。
第12章 反射一、填空题1.反射机制的优点是可以实现创建对象和编译。2.如果想通过Class类实例化其他类的对象,则可以使用方法,但是必须要保证被实例化的类中存
反射分析类源码,完整的分析.CLASS中的属性,方法等
SqlUtil.create(Person.class) SqlUtil.insert(Person.class) SqlUtil.insert(Person.class,person) SqlUtil.updateById(Person.class,person) SqlUtil.deleteById(Person.class,person) 开发工具IDEA,MAVEN...
反射+Class+获取和操作+入门 - 本资源是一个反射的入门,教你如何用Java的Class类获取和操作类的信息,包括构造器,方法,字段,注解,泛型等。
Java类文件查看器/反射器 Java程序使用反射来查看类文件的详细信息。 它与jdk中的javap命令有点类似,但显示了更多有组织的细节。 安装 从下面的zip下载并解压缩代码/类文件。 用法 代码 将类目录yourDirectory/...
数据类Java具有反射的Java中的数据类,例如Scala案例类当我们将对象打印到输出流时,java将是对象的打印哈希码。 我创建了Java反射练习。 当调用toString()方法时,返回所有具有漂亮打印名称和值对的类变量作为...
java能够反射的前提:已经加载过这个类 反射可以通过类名来寻找这个类的所有相关信息、类似于人类的记忆,事先在记忆中有了这个事物的信息,人就可以通过名字来在记忆中寻找事物的具体信息。 Reflection(反射) 是被...
反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取...
JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...
java反射jar包中class,并可进行文件比较
Java的反射机制是指在运行时通过分析类的信息实现动态调用类的方法和访问类的属性的能力。它允许程序在运行时获取类的信息并操作类或对象的属性、方法和构造函数等。通过反射机制,可以实现很多高级特性,如动态代理...
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...
Java反射机制与Class类1.Java反射机制1.1 反射机制是什么1.2 反射的应用场合1.3 反射的常用类1.4 反射使用步骤2. Class类2.1 常用方法和示例2.2 获取Class对象的 3 种方法2.3 反射创建对象的 2 种方法3. 工厂设计...
day034 反射(一)Class类、捕获异常、利用反射分析类的能力 反射库(reflection library)提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。这项功能被大量地应用于JavaBeans中,它是...
加载完类之后,在堆内的方法区中就产生了一个Class类型的对象(一个类只有一个class对象),这个对象就包含了完整类的结构信息,我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构...