1,创建Person类
2,反射测试类
package reflect; import java.io.InputStream; import java.util.List; public class Person { public String name="aaaaa"; private int password; private static int age; public Person() { System.out.println("person"); } public Person(String name){ System.out.println("person "+name); } public Person(String name,int password){ System.out.println("person "+name+":"+password); } private Person(List<?> list){ for(int i=0;i<list.size();i++){ System.out.println("person "+list.get(i)); } } public void aa1(){ System.out.println("aa1"); } public void aa1(String name,int password){ System.out.println("aa1 "+name+":"+password); } public Class[] aa1(String name,int[] password){ return new Class[]{String.class}; } private void aa1(InputStream in){ System.out.println(in); } public static void aa1(int num){ System.out.println(num); } public static void main(String[] args){ System.out.println("main"); for(int i=0;i<args.length;i++){ System.out.println(args[i]); } } }
2,反射测试类
package reflect; import java.io.FileInputStream; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.junit.Test; /** * java反射 * 加载类三种方式: * 1、Class c=Class.forName("reflect.Person"); * 2、Class c=new Person().getClass(); * 3、Class c=Person.class; * */ public class DemoTest { /** * 调无参构造 */ @Test public void constructor1() throws Exception{ Class c=Class.forName("reflect.Person"); Constructor cs=c.getConstructor(null);//null表示无参构造,null也可以不写 Person p=(Person) cs.newInstance(null);//调用无参构造函数创建实例,null可以不写 System.out.println(p.name); } /** * 调有参构造Person(String name) */ @Test public void constructor2() throws Exception{ Class c=Class.forName("reflect.Person"); Constructor cs=c.getConstructor(String.class);//创建有参构造,参数类型为String Person p=(Person) cs.newInstance("xxxx");//调用Person(String name)构造创建实例,xxxx可为任意字符串 System.out.println(p.name); } /** * 调有参构造Person(String name,int password) */ @Test public void constructor3() throws Exception{ Class c=Class.forName("reflect.Person"); Constructor cs=c.getConstructor(String.class,int.class);//创建有参构造,参数类型为String,int Person p=(Person) cs.newInstance("xxxx",11);//调用Person(String name,int password)构造创建实例,xxxx可为任意字符串,11可为任意数字 System.out.println(p.name); } /** * 调私有构造private Person(List list) * 理论上私有方法外部类不可以访问,但是反射可以做到 */ @Test public void constructor4() throws Exception{ List<String> list=new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); Class c=Class.forName("reflect.Person"); Constructor cs=c.getDeclaredConstructor(List.class);//私有构造用getDeclaredConstructor获取 cs.setAccessible(true);//爆力反射,可以访问私有方法 Person p=(Person) cs.newInstance(list); System.out.println(p.name); } /** * 无参构造第二种调用方式 */ @Test public void constructor5() throws Exception{ Class c=Class.forName("reflect.Person"); Person p=(Person) c.newInstance(); System.out.println(p.name); } /** * 调public void aa1()方法 */ @Test public void method1() throws Exception{ Person person=new Person(); Class c=Class.forName("reflect.Person"); Method method=c.getMethod("aa1", null);//访问aa1方法,参数为null method.invoke(person, null);//指定调哪个对象的方法,参数为null } /** * 调public void aa1(String name,int password)方法 */ @Test public void method2() throws Exception{ Person person=new Person(); Class c=Class.forName("reflect.Person"); Method method=c.getMethod("aa1", String.class,int.class); method.invoke(person, "TOM",32); } /** * 调public Class[] aa1(String name,int[] password)方法 */ @Test public void method3() throws Exception{ Person person=new Person(); Class c=Class.forName("reflect.Person"); Method method=c.getMethod("aa1", String.class,int[].class); Class[] cs=(Class[]) method.invoke(person,"Jack", new int[]{1,23}); System.out.println(cs[0]); } /** * 调private void aa1(InputStream in)方法 */ @Test public void method4() throws Exception{ Person person=new Person(); InputStream is=new FileInputStream("D:\\work\\struts2\\src\\struts.xml"); Class c=Class.forName("reflect.Person"); Method method=c.getDeclaredMethod("aa1", InputStream.class);//访问私有方法用getDeclaredMethod method.setAccessible(true); method.invoke(person, is); } /** * 调public static void aa1(int num) */ @Test public void method5() throws Exception{ Class c=Class.forName("reflect.Person"); Method method=c.getMethod("aa1", int.class);//访问私有方法用getDeclaredMethod method.invoke(null, 23);//静态方法调用不需要传对象 } /** * 反射创建实例并调用方法 */ @Test public void method6() throws Exception{ Class c=Class.forName("reflect.Person"); Constructor cs=c.getConstructor(null); Person p=(Person) cs.newInstance(null); Method m=c.getMethod("aa1", String.class,int.class); m.invoke(p, "Lucy",45); } /** * 反射调main方法 */ @Test public void method7() throws Exception{ Class c=Class.forName("reflect.Person"); Method method=c.getMethod("main", String[].class); //method.invoke(null, new Object[]{new String[]{"aaa","bbb"}});//这里和其他方法不同,比较奇葩,两种调用方式 method.invoke(null, (Object)new String[]{"aaa","bbb"}); } /** * 反射字段属性 public String name="aaaaa"; */ @Test public void property1() throws Exception{ Person person=new Person(); Class c=Class.forName("reflect.Person"); Field field = c.getField("name");//获取名为"name"的字段 Class<?> type = field.getType(); System.out.println(type);//得到字段类型 String name=(String) field.get(person); System.out.println(name);//得到字段值 //Object value=field.get(person); //Class<?> type2 = field.getType(); //if(String.class.equals(type2)){ // String sValue=(String)value; // System.out.println(sValue); //} field.set(person, "bbbb");//给该字段赋值为bbbb System.out.println(person.name); } /** * 反射私有属性private int password; */ @Test public void property2() throws Exception{ Person person=new Person(); Class c=Class.forName("reflect.Person"); Field field = c.getDeclaredField("password"); field.setAccessible(true); field.set(person, 123456); int password = (Integer) field.get(person); System.out.println(password); } /** * 反射私有静态属性private static int age; */ @Test public void property3() throws Exception{ Class c=Class.forName("reflect.Person"); Field field = c.getDeclaredField("age"); field.setAccessible(true); field.set(null, 87); int age = (Integer) field.get(null); System.out.println(age); } }
发表评论
-
java
2022-11-02 11:24 1157package com.example.poi; i ... -
java
2022-11-02 10:52 1029package com.example.poi; i ... -
获取java系统级参数
2015-12-05 21:13 752package system; import jav ... -
ClassUtils
2015-11-13 13:59 617package test; import inter ... -
java时间相减
2015-05-24 15:15 652/** * 时间相减 */ public ... -
java获取鼠标当前位置
2015-01-30 12:27 1443方法一: package window; impor ... -
nio与io拷贝文件性能对比
2015-01-27 17:25 742package my; import java.io ... -
nio与io的区别
2015-01-18 08:47 511传统的socket IO中,需要为每个连接创建一个线程,当并发 ... -
子线程先执行和主线程交替执行
2015-01-16 17:08 790package thread.tongbu; /** ... -
java发邮件实例
2014-12-27 19:12 1084首先导入附件中的mail.jar和activation.jar ...
相关推荐
一个java普通工程,反射的所有方法和实例都有,,另外还有注释,可以帮助理解
Java反射实例源码,具体讲解内容见博客http://blog.csdn.net/liushuijinger 菜鸟学编程(九)——Java反射机制(一) 菜鸟学编程(十)——Java反射机制(二)
一个java反射的例子,通过java反射机制,动态生成java实例,动态执行方法。例子中有大量注释,简单易懂。
Java 8个反射实例 项目实例 项目工程
java 反射 的 实例介绍 个人笔记
Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例
反射入门小程序.通过反射机制执行JavaBean的get和set方法.
Java反射实例,可以给初学反射的同志们一定帮助。一个简单实例,可以更好的理解反射的规矩。
常用的属性,方法和构造函数的获取实例,个人实际学习总结,亲测有效!
很好的几个反射的例子,看后就明白什么是反射了,反射机制怎么用了
反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...
java反射经典实例 看完之后,基本满足你要做的事情,其中包括修改各种私有属性,调用私有方法的例子代码。简单干练。
NULL 博文链接:https://zyqwst.iteye.com/blog/2255560
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
Java 反射机制 代码的实例 请认真阅读 运行此代码 只要读懂了 反射机制也就明白了
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...