标签:检查 this bsp ecplise 怎么办 加载 put 机制 word
小生不才,在对于java反射仅仅停留在简单实用的基础上,下面我们来结合简单案例来了解一下java的反射
1.准备测试 准备两个类 和带有main方法的测试类
package reflection; public class Test1 { public void test() { System.out.println("Test1的方法"); } }
package reflection; public class Test2 { public void test() { System.out.println("Test2的方法"); } }
package reflection; public class Main { public static void main(String[] args) { new Test1().test(); } }
2.需求提出 现在main方法中运行的时候是运行Test1测试类的test()方法 如果我们有需求替换成Test2类中的test()方法 我们有两种方法
1 package reflection; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // new Test1().test(); 7 new Test2().test(); 8 9 } 10 11 }
Class=reflection.Test2
package reflection; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Properties; public class Main { public static void main(String[] args) throws Exception, IOException { // 传统的更改代码的方法 // new Test1().test(); // new Test2().test(); // 重新编写运用反射动态的加载一个类 // 1加载Spring.txt配置文件 读取你配置的要使用的类 下次如果更改类直接可以在配置文件更改 File file = new File("J:\\ecplisework\\testother\\src\\Spring.txt"); // 创建读取配置文件的对象properties Properties Springtxt = new Properties(); // 使配置文件对象读取Spring.txt的内容 Springtxt.load(new FileInputStream(file)); // 获取Spring.txt中的class的值 也就使类的全限定名 String className = Springtxt.getProperty("class"); // 根据全限定名类创建类对象 Class<?> clazz = Class.forName(className); // 获取方法对象 Method m = clazz.getMethod("test"); // 获取构造器 Constructor<?> c = clazz.getConstructor(); // 根据构造器 实例出一个对象 Object object = c.newInstance(); // 调用指定实例的指定方法 m.invoke(object); } }
3.为什么要使用反射&反射用在那些应用场景下
4.如何更好的使用反射?
Class<?> clazz = Class.forName("类的权限定名");
Class<? extends Test2> class1 = this.getClass();
Classc2 =Test1.class;
Constructor<?>[] constructors = clazz.getConstructors(); //获得类的所有公共构造函数
1 String name = clazz.getField("password").getName(); // 获得命名的公共字段 2 Field[] fields = clazz.getFields(); //获得所有公共字段 3 Field declaredField = clazz.getDeclaredField("username"); //获得类声明的命名的字段 4 Field[] declaredFields = clazz.getDeclaredFields(); //获取所有类声明的字段
1 Method method = clazz.getMethod("test"); //使用特定的参数类型,获得命名的公共方法 2 Method[] methods = clazz.getMethods(); // 获得类的所有公共方法 3 Method declaredMethod = clazz.getDeclaredMethod("test"); //使用特写的参数类型,获得类声明的命名的方法 4 Field[] declaredFields2 = clazz.getDeclaredFields(); //获得类声明的所有方法
标签:检查 this bsp ecplise 怎么办 加载 put 机制 word
原文地址:http://www.cnblogs.com/jimisun/p/7823062.html