一、反射机制(比较简单,因为只要会查帮助文档,就可以了。)
1、反射机制有什么用?
通过java语言中的反射机制可以操作字节码文件。<br /> 优点类似于黑客。(可以读和修改字节码文件。)<br /> 通过反射机制可以操作代码片段。(class文件。)<br />
2、反射机制的相关类在哪个包下?
java.lang.reflect.*;<br />
3、反射机制相关的重要的类有哪些?
java.lang.Class:代表整个字节码,代表一个类型,代表整个类。 java.lang.reflect.Method:代表字节码中的方法字节码。代表类中的方法。 java.lang.reflect.Constructor:代表字节码中的构造方法字节码。代表类中的构造方法 java.lang.reflect.Field:代表字节码中的属性字节码。代表类中的成员变量(静态变量+实例变量)。 java.lang.Class:<br /> public class User{<br /> // Field<br /> int no; // Constructor<br /> public User(){<br /> <br /> }<br /> public User(int no){<br /> this.no = no;<br /> } // Method<br /> public void setNo(int no){<br /> this.no = no;<br /> }<br /> public int getNo(){<br /> return no;<br /> }<br /> }
二、获取java.lang.Class三种方法
1.Class.forName()
- 静态方法
- 方法的参数是一个字符串
- 字符串需要的是一个完整的类名
- 完整类名必须带有包名。
2.java中任何一个对象都有一个方法:getClass()
3.java中任何一种类型,包括基本类型,都有.class属性
package com.xit.reflect;import java.util.Date;public class ReflectTest01 { public static void main(String[] args) { Class c1 = null; Class c2 = null; try { c1 = Class.forName("java.lang.String"); c2 = Class.forName("java.util.Date"); Class c3 = Class.forName("java.lang.Integer"); Class c4 = Class.forName("java.lang.System"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //java中任何一个对象都有一个方法:getClass() String s ="abc"; Class x = s.getClass(); System.out.println(c1==x); Date time = new Date(); Class y = time.getClass(); System.out.println(c2 == y); //第三种方式:java中任何一种类型,包括基本类型,都有.class属性 Class z = String.class; System.out.println(x==z); }}
三、获取Class能干什么


四、反射机制的灵活

五、应用
1.只执行静态代码块

package com.xit.reflect;public class ReflectTest04 { public static void main(String[] args) { try { Class.forName("com.xit.reflect.MyClass"); } catch (ClassNotFoundException e) { e.printStackTrace(); } }}class MyClass{ static { System.out.println("静态代码执行了"); }}