java 反射的理解和使用
来源:互联网 发布:网络舆论论文 编辑:程序博客网 时间:2024/05/21 11:01
Person 类:
public class Person{ private String name; private Integer age; public Person(String name, Integer age) { this.name = name; this.age = age; } public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public void run(){ System.out.println("我在运行哦"); } public void test(String test){ System.out.println(test); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
反射:
package Reflect;import org.junit.jupiter.api.Test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * Create by wdful * Email: wdful165177@gmail.com * Date: 2017/5/16 * 反射测试 */public class ReflectDemo1 { @Test /** * 反射三种方式 */ public void demo1() throws ClassNotFoundException { //1 Class clazz1 = Person.class; System.out.println(clazz1); //2 Person person = new Person(); Class clazz2 = person.getClass(); System.out.println(clazz2); //3 Class clazz3 = Class.forName("Reflect.Person"); System.out.println(clazz3); } @Test /** * 反射调构造 */ public void demo2() throws Exception { Class clazz = Class.forName("Reflect.Person"); System.out.println(clazz); //获得对象 Person person = (Person)clazz.newInstance(); //调用构造 Constructor c = clazz.getConstructor(String.class,Integer.class); Person p = (Person)c.newInstance("里斯",123); System.out.println(p); } @Test /** * 反射调get set */ public void demo3() throws Exception { Class clazz = Class.forName("Reflect.Person"); //获得公有的 /*clazz.getField("name"); Field[] fields = clazz.getFields(); //获取所有的*/ //获取私有的 Field field1 = clazz.getDeclaredField("name"); Field field2 = clazz.getDeclaredField("age"); field1.setAccessible(true); field2.setAccessible(true); Person person = (Person) clazz.newInstance(); //调用构造 Constructor c = clazz.getConstructor(String.class,Integer.class); Person p = (Person) c.newInstance("里斯",123); String name = (String) field1.get(p); int age = (int) field2.get(p); System.out.println(name+":"+age); } @Test /** * 反射调方法 */ public void demo4() throws Exception{ Class clazz = Class.forName("Reflect.Person"); Method method = clazz.getDeclaredMethod("run"); method.setAccessible(true); method.invoke(clazz.newInstance()); //无参 //有参 Method method2 = clazz.getDeclaredMethod("test",String.class); String s = (String)method2.invoke(clazz.newInstance(),"我是test方法的值"); System.out.println(s); } public static void main(String[] args) throws Exception { ReflectDemo1 r = new ReflectDemo1(); r.demo2(); }}
阅读全文
0 0
- java 反射的理解和使用
- 反射的理解和使用
- java反射和动态代理的理解
- Java反射的理解
- java 反射的理解
- java反射的理解
- Java 反射的理解
- Java 反射的理解
- Java 反射的理解
- Java 反射的理解
- Java 反射的理解
- Java反射的理解
- java的反射机制的理解和代码的分析
- (Java基础--反射)理解反射的概念
- Java反射和注解的使用
- 对于java反射的一些学习理解和认知
- 对于JAVA反射机制和CLASS类的个人理解
- java 反射机制的理解
- Datagrid里面如何捕获前一页下一页最后页最前页的事件?
- 深入理解JavaScript系列(44):设计模式之桥接模式
- Openssh移植到Android系统的步骤
- CFgym:Digits Permutation(DFS)
- Repeater中OnItemDataBound使用方式
- java 反射的理解和使用
- Android之二维码生成与识别 读取相册
- 深入理解JavaScript系列(45):代码复用模式(避免篇)
- matlab调用java代码
- 对象分割--Instance-sensitive Fully Convolutional Networks
- 算法相关文章索引(3)
- win7,win8个人用户如何防御勒索病毒(Wanna Decryptor)?
- MySQL InnoDB :事务隔离隔离级别以及对应的问题
- 深入理解JavaScript系列(46):代码复用模式(推荐篇)