深入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
相关文档:
package Demo;
// 普通泛型
class Point<T> { // 此处可以随便写标识符号,T是type的简称
private T var; // var的类型由T指定,即:由外部指定
public T getVar() { // 返回值的类型由外部决定
return var;
}
public void setVar(T var) { // 设置的类型也由外部决定
this.var = var;
}
}
publi ......
package Demo;
// 通配符
class Info14<T> {
private T var; // 定义泛型变量
public void setVar(T var) {
this.var = var;
}
public T getVar() {
return this.var;
}
public String toString() { // 直接打印
return this.var.toString();
}
}
public class GenericsDemo14 {
public ......
package Demo;
// 通过泛型方法返回泛型类型
class Info27<T extends Number> { // 指定上限,只能是数字类型
private T var; // 此类型由外部决定
public T getVar() {
return this.var;
}
public void setVar(T var) {
this.var = var;
}
public String toString() { // 覆写Object类中的toStr ......
原帖地址:http://www.hengxinsoft.com/2009/07/ubuntu%E4%B8%8Bjava%E7%8E%AF%E5%A2%83%E7%9A%84%E6%90%AD%E5%BB%BA/
安装
打开终端:输入命令:
sudo apt-get install sun-java6-jdk
提示:安装过程中需要你回答是否同意使用协议(终端中红蓝色的提示界面),此时按tab键至OK,再按回车即可正常安装
待安装完毕后选择 ......
package Demo;
// Java泛型的嵌套设置
class Info31<T, V> { // 接收两个泛型类型
private T key;
private V value;
public Info31(T key, V value) {
this.setKey(key);
this.setValue(value);
}
public void setKey(T key) {
this.key = key;
}
public void setValue(V value) {
this. ......