[新手学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 ...
随机推荐
- C# inline-asm / 嵌入x86汇编
C#可不可以嵌入汇编 可以 在我眼中C#作为一个介于中上层语言是不可能不可以 置入汇编代码的 为什么会被我认为中上层语言呢 从C#保留指针就可以看出 我知 道有很多人一定不会相信C#可以使用汇编代码 ...
- H5长按事件
let timeOutEvent = 0 $(function () { $('#debug').on({ touchstart: function (e) { setTimeout(function ...
- 初探单点登录 SSO
单点登录 单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用:同样,用户只需注销其中一个应用,就可以成功注销其他应用. ...
- Linux查看端口、进程情况及kill进程
看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是P ...
- 64位Linux下编译搭建Nginx1.5与PHP5.5(CentOS6.4)
(1)安装Nginx1.5.2更新Nginx和PHP的依赖包yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng \libp ...
- 【原】Jqxgrid在Java服务器端分页
研究这个后台分页一天多,特此写个文章记录备忘 jsp页面中有两个需要注意的地方:一个是source中beforeprocessing,另一个是rendergridrows中数据的获取. 说明:grid ...
- Windows 8.1 Preview 开发资源汇总
Microsoft Build 2013开发者大会已经结束,从Session安排上看主要以Windows 8.1为主.我相信大家有已经或多或少的体验过Windows 8.1 Preview了,关于操作 ...
- css3整理--filter
只在chrome的少数版本的浏览器中有实现,兼容性差,不适宜应用. filter语法: elm { filter: none | <filter-function > [ <filt ...
- 自制Console线(已测试CISCO3560可用)
D9的顺序是5口在上,4口在下.从右到左分别是1-5,6-9. 5 4 3 2 1 o o o o o o o o o 9 8 7 6 用万用表量出D9的口的对应颜色.然后按照下面的表.把颜色填写上. ...
- Python 中的进程、线程、协程、同步、异步、回调
进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...