JAVA 反射机制剖析
2014-04-20 01:10
232 查看
一、Class、Object 类的理解
Object类位于在java.lang包中,此包在使用时无需显式导入,编译时由编译器自动导入;Object类默认为所有类的父类即所有的java类都继承了Object拥有的方法,其中一个与JAVA反射机制有关的方法是getClass(),此方法返回当前对象的运行时类,然后通过使用此类实现反射的其它功能。
Class类表示正在运行应用程序中的类和接口;Class没有public的构造方法所以只能由java虚拟机或者调用类加载器的defineClass方法生成Class对象;通过生成的Class对象完成其它反射功能。
二、反射的理解及可完成的工作
java语言不支持在程序运行时改变程序结构或者变量的值,但它提供了一种机制可使正在运行的java对象得到其类定义方法、变量并可通过此机制动态的添加及执行发放的机制,这种机制我们称之为java的反射机制。
java的反射机制具体来说可实现以下4种功能:
1、根据运行对象得到完整类名
2、得到运行对象类的方法包括构造方法
3、得到类生成对象
4、得到类定义的公用变量
三、反射的具体使用方法
1、得到运行对象类的Class实例。
可通过以下多种方式获取Class实例
a)、在运行时对象中可通过调用超类方法getClass()得到Class实例,如下:
String str = "";
Class c1 = str.getClass;
b)、通过Class类的静态方法forName("");
Class c1 = Class.forName ("java.lang.String");
c)、 通过包装类的TYPE属性
Class c1 = Integer.TYPE;
2、获取类的构造方法并构造一个新对象 执行某个方法
public class Test {
public static void main(String [] args) throws ClassNotFoundException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{
Class c = Class.forName("t");
Constructor[] con = c.getConstructors();
Class<?>[] type = con[1].getParameterTypes();
Object obj = c.getConstructor(type).newInstance("zhang");
obj.getClass().getMethod("m2").invoke(obj);
}
}
class t{
String s = "";
public t(){
System.out.println("t()");
}
public t(String sr){
this.s = sr;
}
public void m1(){
System.out.println("m1()");
}
public void m2(){
System.out.println(s);
}
}
反射可实现的其他功能可JDK文档实现。
本文出自 “后时代小生” 博客,谢绝转载!
Object类位于在java.lang包中,此包在使用时无需显式导入,编译时由编译器自动导入;Object类默认为所有类的父类即所有的java类都继承了Object拥有的方法,其中一个与JAVA反射机制有关的方法是getClass(),此方法返回当前对象的运行时类,然后通过使用此类实现反射的其它功能。
Class类表示正在运行应用程序中的类和接口;Class没有public的构造方法所以只能由java虚拟机或者调用类加载器的defineClass方法生成Class对象;通过生成的Class对象完成其它反射功能。
二、反射的理解及可完成的工作
java语言不支持在程序运行时改变程序结构或者变量的值,但它提供了一种机制可使正在运行的java对象得到其类定义方法、变量并可通过此机制动态的添加及执行发放的机制,这种机制我们称之为java的反射机制。
java的反射机制具体来说可实现以下4种功能:
1、根据运行对象得到完整类名
2、得到运行对象类的方法包括构造方法
3、得到类生成对象
4、得到类定义的公用变量
三、反射的具体使用方法
1、得到运行对象类的Class实例。
可通过以下多种方式获取Class实例
a)、在运行时对象中可通过调用超类方法getClass()得到Class实例,如下:
String str = "";
Class c1 = str.getClass;
b)、通过Class类的静态方法forName("");
Class c1 = Class.forName ("java.lang.String");
c)、 通过包装类的TYPE属性
Class c1 = Integer.TYPE;
2、获取类的构造方法并构造一个新对象 执行某个方法
public class Test {
public static void main(String [] args) throws ClassNotFoundException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{
Class c = Class.forName("t");
Constructor[] con = c.getConstructors();
Class<?>[] type = con[1].getParameterTypes();
Object obj = c.getConstructor(type).newInstance("zhang");
obj.getClass().getMethod("m2").invoke(obj);
}
}
class t{
String s = "";
public t(){
System.out.println("t()");
}
public t(String sr){
this.s = sr;
}
public void m1(){
System.out.println("m1()");
}
public void m2(){
System.out.println(s);
}
}
反射可实现的其他功能可JDK文档实现。
本文出自 “后时代小生” 博客,谢绝转载!
相关文章推荐
- java 反射机制剖析
- JAVA 反射机制剖析
- JAVA的类反射机制
- 《Java》-----反射机制二
- java中反射机制的学习
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中的反射机制
- Java系列笔记(2) - Java RTTI和反射机制
- Java - 反射机制(Reflection)
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java的反射机制
- java的包导入机制总结与剖析
- java中Class类和反射机制
- java 反射机制简介
- Java 反射机制浅析
- java 类加载机制和反射详解及实例代码
- 深入理解Java:类加载机制及反射
- JAVA基础--JAVA中的反射机制详解
- Java中的类反射机制
- 深入讨论Java语言中的反射机制