反射

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class FanShe {

    public static void main(String[] args) throws Exception {
        // 创建class类实例,常用的有三种方法
        Class<?> clazz1 = Person.class;
        // Class<?> clazz2 =Class.forName("包名.类名"); //有异常
        // Class<?> clazz3 =new Person().getClass();
        // 创建运行时类的实例,如果包含无参构造器
        Object ob1 = clazz1.newInstance();
        // 创建运行时类的实例,如果没有无参构造器
        Constructor<?> con = clazz1.getConstructor(int.class, String.class);
// Object ob2 =con.newInstance(2,"zhangsan"); //形参还可以用new class[]{int.class,String.class} // 调用指定的属性,如果是public修饰的 Field filed1 = clazz1.getField("number"); System.out.println(filed1.get(ob1)); // 调用指定的属性,如果不是public修饰的 Field filed2 = clazz1.getDeclaredField("age"); // 拼凑方法名,get()方法 String filed = "age"; String getField = "get" + String.valueOf(filed.charAt(0)).toUpperCase() + filed.substring(1); System.out.println(getField); // 拼凑方法名,set()方法 String setField = "set" + filed.toUpperCase().charAt(0) + filed.substring(1); System.out.println(setField); // 调用指定的方法 Method method1 = clazz1.getDeclaredMethod("setAge", new Class[] { int.class }); method1.invoke(ob1, 20); Method method2 = clazz1.getDeclaredMethod(getField); System.out.println(method2.invoke(ob1)); // 如果调用的方法没有返回值,则打印结果除了方法体里的打印内容外,还会打印null // 如果有返回值,则会把null替换成相应的返回值 } } public class Person { public int number =20; private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public Person() { } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int speak(){ System.out.println("我是一个人"); return 1; } }

 

posted @ 2016-05-18 18:55  psbyking888  阅读(142)  评论(0编辑  收藏  举报