首页 > 学院 > 开发设计 > 正文

反射使用步骤

2019-11-06 08:43:15
字体:
来源:转载
供稿:网友

步骤1.获取Class对象 三种方式: 1.Class.forName(全类名) 2.类名.class 3.对象.getClass()

package Test;public class Person {}package Test;public class Demo01 { public static void main(String[] args) throws ClassNotFoundException { Person p=new Person(); Class class1 = Class.forName("Test.Person"); Class class2=Person.class; Class class3 = p.getClass(); System.out.PRintln(class1==class2);//比较的是地址 }}

结果为true,因为他们是同一个对象。 步骤2.使用Class对象的方法

package Test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Demo01 { @SuppressWarnings("unchecked") public static void main(String[] args) throws Exception { Person p=new Person(25,"杰克"); Class class1 = Class.forName("Test.Person"); Constructor constructor1=class1.getConstructor();//无参构造函数 System.out.println(constructor1); Object newInstance = constructor1.newInstance(); System.out.println(newInstance); Constructor constructor2=class1.getConstructor(int.class,String.class);//有参构造 System.out.println(constructor2); Object newInstance2 = constructor2.newInstance(30,"Yang"); System.out.println(newInstance2); Field field = class1.getField("age"); Object object = field.get(new Person()); System.out.println(object);//0 Object object2 = field.get(p); System.out.println(object2);//25 Field field2 = class1.getDeclaredField("name");//对于private要暴力获取 field2.setaccessible(true);//打开权限 Object object3 = field2.get(new Person()); System.out.println(object3); Object object4 = field2.get(p); System.out.println(object4); field2.set(p, "Jack");//给对象p的name属性赋值 System.out.println(p); Method method = class1.getMethod("run");//name就是要调用的方法名 method.invoke(p);//执行run方法,p对象执行run方法 Method method2 = class1.getDeclaredMethod("sleep");//对于私有方法 method2.setAccessible(true); method2.invoke(p); }}package Test;public class Person { public int age; private String name; 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 Person(int age, String name) { super(); this.age = age; this.name = name; } public Person() { super(); } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } public void run(){ System.out.println("run........."+name); } private void sleep(){ System.out.println("sleep......"+name); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表