[新手学Java]反射学习笔记
示例类
@SuppressWarnings("unused") public class Person { public String Name; private int Age; public Gender Gender; private static String Species = "人类"; public Person(){ Name="佚名"; Age=-1; } public Person(String name){ Name=name; } private Person(String name,int age){ Name=name; Age=age; } private Person(Gender g){ Gender=g; } public void Run(){ System.out.println(Name+" 跑!"); } public void Attack(){ System.out.println(Name+" 打!"); } public void Attack(String name){ System.out.println(Name+" 打 "+name+"!"); } private void Eat(String food){ System.out.println(Name+" 吃 "+food); } public void Introduce() { System.out.println("我叫"+Name+",我今年"+Age+"岁了。"); } public static void PlayGame(String gameName){ System.out.println("玩 "+gameName+" 游戏"); } public static void main(String[] args){ System.out.println("main"); for(String s:args) System.out.println(s); } } enum Gender{ Male,Female }
反射类的无参构造函数:
@Test //反射类的无参构造函数 public void constructor1() throws Exception{ Class clazz = Class.forName("pro.shaowei.reflect.Person"); Constructor c=clazz.getConstructor(); Person p = (Person) c.newInstance(); Person p1 = (Person) clazz.newInstance(); p.Introduce(); p.Run(); p1.Introduce(); p1.Run(); }
反射类的有参构造函数:
@Test //反射类的有参构造函数 public void constructor2() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Constructor c=clazz.getConstructor(String.class); Person p=((Person) c.newInstance("张三")); p.Introduce(); p.Run(); }
反射类的私有构造函数:
@Test //反射类的私有构造函数 public void constructor3() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); //反射私有构造函数时必须从使用 getDeclaredConstructor 方法 Constructor c=clazz.getDeclaredConstructor(String.class,int.class); c.setAccessible(true);//暴力反射 Person p=((Person) c.newInstance("张三",25)); p.Introduce(); p.Run(); }
反射类的公有无参方法:
@Test //反射类的公有无参方法 public void method1() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Method method=clazz.getMethod("Run"); method.invoke(p); }
反射类的公有有参方法:
@Test //反射类的公有有参方法 public void method2() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Method method=clazz.getMethod("Attack",String.class); method.invoke(p,"李四"); }
反射类的私有有参方法:
@Test //反射类的私有有参方法 public void method3() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Method method=clazz.getDeclaredMethod("Eat",String.class); method.setAccessible(true); method.invoke(p,"香蕉"); }
反射类的静态有参方法:
@Test //反射类的静态有参方法 public void method4() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Method method=clazz.getDeclaredMethod("PlayGame",String.class); method.setAccessible(true); method.invoke(p,"扫雷"); }
反射类的main方法:
@Test //反射类的main方法 public void method5() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Method method=clazz.getDeclaredMethod("main",String[].class); method.setAccessible(true); method.invoke(p,(Object)new String[]{"1","2"}); }
反射类公有的字段:
@Test //反射类公有的字段 public void field1() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Field field=clazz.getField("Name"); System.out.println(field.get(p)); field.set(p, "王五"); p.Introduce(); }
反射类私有的字段:
@Test //反射类私有的字段 public void field2() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Field field=clazz.getDeclaredField("Age"); field.setAccessible(true); System.out.println(field.get(p)); field.set(p, 7); p.Introduce(); }
反射类私有静态的字段:
@Test //反射类私有静态的字段 public void field3() throws Exception{ Class clazz=Class.forName("pro.shaowei.reflect.Person"); Person p=(Person) clazz.newInstance(); Field field=clazz.getDeclaredField("Species"); field.setAccessible(true); System.out.println(field.get(p)); field.set(p, "不死族"); System.out.println(field.get(p)); }
[新手学Java]反射学习笔记的更多相关文章
- Java 反射学习笔记
要学反射,先要了解Class这个类,Class是所有Java类的一个总称,Class的实例中存储的是一个类的字节码,获取Class的实例有三种方式: System.class new Date().g ...
- java反射学习笔记
1.java反射概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功 ...
- java 反射---学习笔记
一.java的动态性 反射机制 动态编译 动态执行JavaScript代码 动态字节码操作 二.动态语言 动态语言 程序运行时,可以改变程序结构或变量类型,典型的语言:python.ruby.java ...
- Java反射学习笔记01
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Java反射学习总结四(动态代理使用实例和内部原理解析)
通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加 ...
- Java NIO 学习笔记(七)----NIO/IO 的对比和总结
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
随机推荐
- React直出实现与原理
前一篇文章我们介绍了虚拟DOM的实现与原理,这篇文章我们来讲讲React的直出. 比起MVVM,React比较容易实现直出,那么React的直出是如何实现,有什么值得我们学习的呢? 为什么MVVM不能 ...
- Apple开发者网站中一些比较有用的文档
支持IPv6 DNS64/NAT64网络 关于plist文件中的键与值 Apple各种审核准则以及设计准则
- 【转】20个Cydia常见错误问题解决方法汇总
对于已经越狱的用户来说,经常会使用Cydia来安装一些酷炫或实用插件,但是有时候它总是会出现一些问题,以下收集了在Cydia经常遇到的问题,供大家参考: 一.主屏幕没有 Cydia 图标 1.设备需已 ...
- CENTOS 下 编译安装 tesseract-ocr 3.0.4 识别文字
网上搜集了不少资料,发现目前Tesseract转移到了Github上,因此下载方式和以前略有差别,下文是参考了诸位达人(再此表示感谢)和自己的实际操作过程形成的.(1)首先安装依赖的leptonica ...
- Java中利用标签跳出外层循环break
直接看代码: class ForLoop{ public static void main(String[] args){ //jump from outer loop outer:for(int i ...
- JS调用WebService
<html> <title>接口测试</title> <meta http-equiv="Content-Type" content=&q ...
- ART:Android 摆脱卡顿的希望?
与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各 ...
- 关于织梦系统不支持php中GD库的问题
大多数人在显成的PHP的CMS时,如织梦CMS,安装的时候不支持GD库,就导致整个网站的验证码不显示,以下是个人对此类问题的解决办法: 1.首先找到wamp的安装目录,找到PHP的文件夹,打开php. ...
- 64bit ubuntu 安装32bit的软件
在64bit的系统上安装32bit的软件时,会提示: file not found or no such file. 此时只需要安装 sudo apt-get install libc6-dev-i3 ...
- 二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...