黑马程序员----反射
来源:互联网 发布:mac网盘下载速度慢 编辑:程序博客网 时间:2024/05/23 18:10
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!
1.Class
.class文件加载到内存中就是一个Class对象
获取Class对象的方式有3种:
Scanner sc = newScanner("xxx.txt");
Class.forName(sc.nextLine());
类名.class
对象.getClass()
- import cn.itcast.bean.Person;
- public class Demo1_Reflect {
- /**
- * @param args
- * @throws ClassNotFoundException
- */
- public static void main(String[] args) throws ClassNotFoundException {
- Class<?> clazz1 = Class.forName("cn.itcast.bean.Person");
- Class<?> clazz2 = Person.class;
- Person p = new Person();
- Class<?> clazz3 = p.getClass();
- System.out.println(clazz1 == clazz2);
- System.out.println(clazz2 == clazz3);
- }
- }
2.Constructor
Class类的newInstance()方法是使用该类无参的构造函数创建对象, 如果一个类没有无参的构造函数, 就不能这样创建了
可以调用Class类的getConstructor(String.class,int.class)方法获取一个指定的构造函数
然后再调用Constructor类的newInstance("张三",20)方法创建对象
- import java.lang.reflect.Constructor;
- import cn.itcast.bean.Person;
- public class Demo3_Constructor {
- /*
- @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Class<?> clazz = Class.forName("cn.itcast.bean.Person");
- /*Person p = (Person) clazz.newInstance();
- System.out.println(p);*/
- Constructor con = clazz.getConstructor(String.class,int.class);//获取有参的构造函数
- Person p = (Person) con.newInstance("张三",23); //创建对象
- System.out.println(p); //打印对象
- }
- }
3.Field
Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取
通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限
用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import cn.itcast.bean.Person;
- public class Demo4_Field {
- public static void main(String[] args) throws Exception {
- Class<?> clazz = Class.forName("cn.itcast.bean.Person");
- Constructor con = clazz.getConstructor(String.class,int.class);//获取有参的构造函数
- Person p = (Person) con.newInstance("张三",23); //创建对象
- /*Field f = clazz.getField("name");
- System.out.println(f);*/
- Field f = clazz.getDeclaredField("name"); //暴力反射
- f.setAccessible(true); //去除权限
- f.set(p, "李四");
- System.out.println(p);
- }
4.Method
Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以获取类中的指定方法
调用invoke(Object,Object...)可以调用该方法
Class.getMethod("eat")invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10)
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import cn.itcast.bean.Person;
- public class Demo5_Method {
- /**
- *4.Method
- Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以获取类中的指定方法
- 调用invoke(Object, Object...)可以调用该方法
- Class.getMethod("eat") invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10)
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Class<?> clazz = Class.forName("cn.itcast.bean.Person");
- Constructor con = clazz.getConstructor(String.class,int.class);//获取有参的构造函数
- Person p = (Person) con.newInstance("张三",23); //创建对象
- Method m = clazz.getMethod("eat");
- m.invoke(p);
- Method m2 = clazz.getMethod("eat", int.class);
- m2.invoke(p, 10);
- }
- }
- 黑马程序员--java 反射
- 黑马程序员之反射
- 黑马程序员之反射
- 黑马程序员__java_反射
- 黑马程序员_反射
- 黑马程序员 反射
- 黑马程序员--Java反射
- 黑马程序员--反射
- 黑马程序员-java-反射
- 黑马程序员:反射技术
- 黑马程序员_java反射
- 黑马程序员---反射
- 黑马程序员-反射
- 黑马程序员---反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员:反射
- 黑马程序员_反射
- Step into Scala - 32 - Test
- 《C++Primer》读书笔记--类模板
- Java单元测试(Junit+Mock+代码覆盖率)
- XML小练习:利用DOM解析XML(初级,实用性不强)
- css相关问题(一)
- 黑马程序员----反射
- MRC环境下block内存泄漏问题
- Oracle学习笔记(4)------------简单查询
- CSS的z-index详解
- Innodb redo log 与 binlog 的区别
- Android-eclipse使用技巧
- Android中Bitmap,byte[],Drawable相互转化
- XML小练习:利用DOM解析XML(利用递归,实用性强)
- 查找一个String 字符串的某个值,然后替换