java反射

来源:互联网 发布:网络摄像机多少钱 编辑:程序博客网 时间:2024/06/13 16:49


package test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;//注意:私有与公有的(构造器、属性、方法)//Declared//Field  f = c3.getField("name");//只能获取公有属性//Field  f = c3.getDeclaredField("name");//能获取所有属性public class Test1 {public static void main(String[] args) throws Exception {//1.Object类的getClass()方法Person p1 = new Person();Class c11 = p1.getClass();Person p2 = new Person();Class c12 = p2.getClass();//2.数据类型的静态属性Class c2 = Person.class;//3.Class类中的静态方法//开发一般使用第三种,因为第三种是一个字符串,文不是一个具体的类型,这样就可以把字符串配置到配置文件中(反射一般和配置文件配合使用)Class c3 = Class.forName("test.Person");//注意:字符串为全路径类名(即含包名)System.out.println(c11==c12);//trueSystem.out.println(c11==c2);//trueSystem.out.println(c11==c3);//trueSystem.out.println(c2==c3);//true//反射获取构造方法Constructor ccc = c3.getConstructor();//获得无参构造方法对象//相当于Person obj = new Person();Object obj = ccc.newInstance();System.out.println(obj);//Person [name=null, age=0, address=null]Constructor ccc2 = c3.getConstructor(String.class,int.class,String.class);//获得带参构造方法对象//相当于Person obj2 = new Person("aaa",18,"北京");Object obj2 = ccc2.newInstance("aaa",18,"北京");//System.out.println(obj2);//Person [name=aaa, age=18, address=北京]//反射获取属性Field  f = c3.getDeclaredField("name");//私有属性需设置true---取消访问检查f.setAccessible(true);//需要指定这个属性所属的对象---这里为:反射获取无参构造器对象的实例objf.set(obj, "北京");System.out.println(obj);//Person [name=北京, age=0, address=null]//反射获取方法Method m = c3.getMethod("show2", String.class);//第一个参数为方法名   第二个参数为该方法传入的参数Object s = m.invoke(obj, "Hello World");//第一个参数为所属对象   第二个参数为该方法传入的参数System.out.println(s);//Hello World}}class Person{private String name;int age;public String address;public Person(){System.out.println("No args Construstor");}public Person(String name, int age, String address) {super();this.name = name;this.age = age;this.address = address;System.out.println("args Construstor");}public void show1(){System.out.println("Show args");}public String show2(String args){return args;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";}}


原创粉丝点击