java反射学习摘记
2017-11-04 16:23
134 查看
JAVA中的反射机制 http://blog.csdn.net/liujiahan629629/article/details/18013523 (入门)
Java反射 http://www.importnew.com/17616.html (进阶)
Java API —— 反射 http://www.cnblogs.com/yangyquin/p/5230372.html
通过Java反射调用方法 http://blog.csdn.net/ichsonx/article/details/9108173 (此篇较为简洁,推荐先看)
Class对象的获取
//第一种方式:
Classc1 = Class.forName("Employee");
//第二种方式:
//java中每个类型都有class 属性.
Classc2 = Employee.class;
//第三种方式:
//java语言中任何一个java对象都有getClass 方法
Employeee = new Employee();
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
在方法调用中,参数类型必须正确,这里需要注意的是不能使用包装类替换基本类型,比如不能使用Integer.class代替int.class。
//非静态方法调用
Class cls = Class.forName("chb.test.reflect.Student");
Method setMethod = cls.getDeclaredMethod("setAge",int.class);
setMethod.invoke(cls.newInstance(), 15)
//static方法调用时,不必得到对象示例
Class cls = Class.forName("chb.test.reflect.Student");
Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class);
staticMethod.invoke(cls,20,"chb");//这里不需要newInstance
//staticMethod.invoke(cls.newInstance(),20,"chb");
如果直接通过反射给类的private成员变量赋值,是不允许的,但可以通过setAccessible方法解决
Class cls = Class.forName("chb.test.reflect.Student");
Object student = cls.newInstance();
Field field = cls.getDeclaredField("age");
field.setAccessible(true);//设置允许访问
field.set(student, 10);
System.out.println(field.get(student));
Java反射 http://www.importnew.com/17616.html (进阶)
Java API —— 反射 http://www.cnblogs.com/yangyquin/p/5230372.html
通过Java反射调用方法 http://blog.csdn.net/ichsonx/article/details/9108173 (此篇较为简洁,推荐先看)
Class对象的获取
//第一种方式:
Classc1 = Class.forName("Employee");
//第二种方式:
//java中每个类型都有class 属性.
Classc2 = Employee.class;
//第三种方式:
//java语言中任何一个java对象都有getClass 方法
Employeee = new Employee();
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
在方法调用中,参数类型必须正确,这里需要注意的是不能使用包装类替换基本类型,比如不能使用Integer.class代替int.class。
//非静态方法调用
Class cls = Class.forName("chb.test.reflect.Student");
Method setMethod = cls.getDeclaredMethod("setAge",int.class);
setMethod.invoke(cls.newInstance(), 15)
//static方法调用时,不必得到对象示例
Class cls = Class.forName("chb.test.reflect.Student");
Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class);
staticMethod.invoke(cls,20,"chb");//这里不需要newInstance
//staticMethod.invoke(cls.newInstance(),20,"chb");
如果直接通过反射给类的private成员变量赋值,是不允许的,但可以通过setAccessible方法解决
Class cls = Class.forName("chb.test.reflect.Student");
Object student = cls.newInstance();
Field field = cls.getDeclaredField("age");
field.setAccessible(true);//设置允许访问
field.set(student, 10);
System.out.println(field.get(student));
相关文章推荐
- java学习-反射
- Java反射学习1
- Java反射学习
- Java Reflection(反射) 入门学习笔记 之一
- Java反射学习简单应用
- Java Reflection(反射) 入门学习笔记 之三 (Array)
- 学习心得:Java为什么支持反射机制?
- java反射学习笔记二
- Java中的反射学习及反射解耦应用
- Java反射学习
- java学习之反射初接触
- java学习之理解反射机制
- java学习之反射详细应用
- Java中的反射学习及反射解耦应用
- Java的反射机制学习笔记
- Java中的反射学习及反射解耦应用
- Java反射学习
- java反射学习笔记三(改进笔记二放到配置文件中)
- java 反射学习(hello world)
- 传智播客学习之java 反射