博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019-4-23 反射学习笔记
阅读量:6271 次
发布时间:2019-06-22

本文共 3783 字,大约阅读时间需要 12 分钟。

//1.通过权限定类名获得        try {            Class
studentClazz1 = Class.forName("com.reflact.Student"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //2.通过Java类型获得 Class
studentClass1 = Student.class; //3.通过实例对象获得 Class
studentClazz = new Student().getClass();
try {            Class
studentClazz = Class.forName("com.reflact.Student"); //可以获得指定形参的构造方法 Constructor
studentClazzConstructor = studentClazz.getDeclaredConstructor(int.class,String.class); //获得指定的形参构造方法后初始化对象 Student student = (Student)studentClazzConstructor.newInstance(1,"小明"); System.out.println(student); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }
//直接通过类对象创建实例    @Test    public void run2(){        Class
studentClass = Student.class; try { Student student = studentClass.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
//强制访问私有方法,创建实例    @Test    public void run3(){        Class
studentClass = Student.class; try { Constructor
studentConstructor = studentClass.getDeclaredConstructor(int.class); studentConstructor.setAccessible(true);//开启强制访问 Student student = studentConstructor.newInstance(1); student.setName("小明"); System.out.println(student); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }
@Test    public void run4(){        //获得类对象        Class
studentClass = Student.class; try { //创建实例 Student student = studentClass.newInstance(); //获得方法 Method setIdMethod = studentClass.getMethod("setId", int.class); //通过实例调用方法 setIdMethod.invoke(student,1); Method getIdMethod = studentClass.getMethod("getId"); int id = (int)getIdMethod.invoke(student); System.out.println(id); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }
//获得私有字段    @Test    public void run5(){        Class
studentClass = Student.class; try { Student student = studentClass.newInstance(); Field idField = studentClass.getDeclaredField("id"); idField.setAccessible(true); idField.set(student,1); int id = (int)idField.get(student); System.out.println(id); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } }

 

转载于:https://www.cnblogs.com/w410782823/p/10757903.html

你可能感兴趣的文章
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
第12章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
我们为什么从Python转到go?
查看>>
5.Azure负载均衡(上)
查看>>
轻松精通awk数组企业问题案例
查看>>
26.Azure备份服务器(下)
查看>>
从“网上说的能信么”说开去---学习的思考
查看>>
DHCP 日志分析
查看>>
.NET Micro Framework动态调用C/C++底层代码(原理篇)
查看>>
Windows Server 2012正式版RDS系列⒃
查看>>
Shell脚本之awk篇
查看>>
微软发布Azure Stack硬件需求
查看>>
python socket编程详细介绍
查看>>
Windows Server 2016第三个技术预览版新技术
查看>>
Everything 本地磁盘文件搜索工具下载!
查看>>
Python dict(字典) 详细总结
查看>>
RPF(Reverse Path Forwarding 反向路径转发)技术
查看>>
2016年收到的第一件礼物,被评上微软全球最有价值专家MVP(一)
查看>>
2016中国VR开发者论坛第一期
查看>>
Hyper-V 2016 系列教程5 Hyper-V 服务器基本属性
查看>>