深入java反射
反射的基石——Class类
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。比如:众多的人可以用一个Person类来表示,而这个类就可以描述人的信息(姓名、年龄、性别等等),而众多的Java类就可以用Class来表示。
Question:Person类代表人,它的实例对象可以是张三、李四,Class类代表Java类,它的各个实例对象有分别代表什么呢?
Answer: 对应各个类在内存中的字节码。一个类被类加载器加载到内存中,占用一份存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,即Class类型。
如何得到各个字节码对应的实例对象,有三种方法:
1、类名.class,例如:System.class
2、对象.getClass(),例如:new Data().getClass()
3、Class.forName("类名"),例如:Class.forName("java.util.Date")
Class类的属性和方法请参见jdk
反射
反射就是把Java类中的各种成分映射成相应的java类。例如:一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示。表示java类的Class类显然要提供一系列的方法来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Contructor、Package等等。
Contructor类
1、得到某个类的所有构造方法:
Contructor[] contructors = lass.forName("类名").getContructors();
2、得到某个特定的构造方法:
//获得方法时要用到类型
Contructor contructors = Class.forName("类名").getContructor(参数类型.class,...);
3、创建实例对象
通常方式:String str = new String(new StringBuffer("abc"));
//调用获得的方法时要用到上面相同类型的实例
反射方式:String str = (String)contructor.newInstance(new StringBuffer("abc"));
4、Class.forName();
·示例:String obj = (String)Class.forName("java.lang.Str
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
通过Java反射调用方法
这是个测试用的例子,通过反射调用对象的方法。
TestRef.java
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* Created by IntelliJ IDEA.
* File: TestRef.java
* User: leizhimin
* Date: 2008-1-28 14:48:44 ......
package Demo;
// Java泛型数组
public class GenericsDemo30 {
public static void main(String args[]) {
Integer i[] = fun1(1, 2, 3, 4, 5, 6); // 返回泛型数组
fun2(i);
}
public static <T> T[] fun1(T... arg) { // 接收可变参数
return arg; // 返回泛型数组
}
public static <T> ......
导入配置jar包 substance.jar
然后在frame的主函数 加入如下代码
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
try {
UIManager.setLookAndFeel(new org.jvnet.substance.skin.SubstanceModerateLookAndFeel()) ; ......
基本操作
一、创建文件
拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:
/*
* Created on Dec 30, 2007
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Cod ......