-------------------------------------------android培训、期待与您交流 -------------------------------------
反射:把class映射成java类
Constructor构造器
1、 得到所有的构造方法
Constructor[] ctc=Class.forName(“”).contructors();
2、 得到某个构造方法
Constructor ctc=Class.forName().getConstructor(StringBuffer.class)
3、 创建对象
String str=(String)Ctc.newInstance(new StringBuffer(“abc”));
注:class.newInstance()与constructor.newInstance()的区别:前者只能调用无参的构造函数创建实例对象,后者可以调用无参和有参的构造函数创建实例对象
Field:成员函数的反射
//创建测试类 public class ReflectPoint { private int x; public int y; public String str1="ball"; public String str2="basketball"; public String itcast="itcast"; public ReflectPoint(int x, int y) { this.x = x; this.y = y; } } public static void main(String[] args) throws Exception{ ReflectPoint r=new ReflectPoint(3, 5); Field x=r.getClass().getField("y"); // f.setAccessible(true); System.out.println(x.get(r));//field不是类上的值,而是对象上的值,所有要去对象上的值 Field y=r.getClass().getDeclaredField("x");//获取私有的属性 y.setAccessible(true);//获取权限 System.out.println(y.get(r)); Field[] fileds=r.getClass().getFields();//替换字符 for (Field field : fileds) { if(field.getType()==String.class){//字节码比较用== String oldstr=(String)field.get(r); String newstr=oldstr.replaceAll("a", "b"); field.set(r, newstr);//重新设值 } } }
Method:方法的反射
public class ReflectPoint { private int x; public int y; public String str1="ball"; public String str2="basketball"; public String itcast="itcast"; public ReflectPoint(int x, int y) { this.x = x; this.y = y; } public static void staticMethodReflect(){ System.err.println("aaaaa"); } public void methodReflect(String str){ System.err.println(str); } @Override public String toString(){ return x+":"+y; } } //调用methodReflect方法 Method method=r.getClass().getMethod("methodReflect",String.class);//第一个参数是方法的名称,第二个参数是输入形参的class类型 method.invoke(r,"aaaa");//反射的方法是对象上的方法 所以传入对象和实现参数 //静态方法的调用 Method method2=r.getClass().getMethod("staticMethodReflect",String.class); method2.invoke(null,"bbbb");//静态方法的调用
数组的反射
如:
Public static void main(string[] arg){ …….. } Method method2=r.getClass().getMethod("main",String[].class); method2.invoke(null,new object[]{new String[]{"abc","bcd"}});
//jdk为了兼容以前的版本,在反射时,如果方法有数组形参,在调用时,编译器会隐式的把参数打成一个包,所以在调用时要再次进行包装
相关推荐
黑马程序员 - 毕向东 - Java基础教学 - 第01天 个人观看视频总结文档
黑马程序员 - 毕向东 - Java基础教学 - 第02天 个人观看视频总结文档
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1491352
黑马程序员-java32期培训视频(基础+就业)黑马程序员-java32期培训视频(基础+就业)
黑马程序员 - Java基础教学 - 04 - 数组、进制转换、二维数组
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案
黑马程序员--毕向东全套Java视屏,讲解的相当全面,各位如果需要,尽快下载哦! 另外如果视频链接存在打不开的问题,请留言,必定及时更新链接。
黑马程序员 - Java基础教学 - 05 - 面向对象(1).doc
黑马程序员 - Java基础教学 - 03 - 变量的作用域、for循环、break、continue、内存结构
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
黑马程序员 - Java基础教学 - 06 - 面向对象(2) - 关于静态static的那些事.doc
Java源码包100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar EJB 模拟银行ATM流程及操作源代码 ...
黑马QT讲义,适合QT入门,使用,教程很比较基础,新手可以看看,另外视频链接在哔哩哔哩中。
java程序员,面试必须知识,常见面试题
黑马程序员-SpringCloud-学习笔记01-认识微服务
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
黑马头条-第2天.md
黑马点评-完整代码资源
黑马点评-redis实战项目-heima-review