Java反射:new一个宝可梦吧
最近写Spring Boot的测试用例会发现经常会有用到@RunWith(SpringRunner.class)的设置注解,关于SpringRunner.class的理解也有点似是而非。其实这种写法是Java反射相关的知识,于是动手总结一下常用的反射使用方式。
假设极客君编写了一个口袋妖怪接口,如下所示:
package com.cdcgeek.bean;
/**
* 口袋妖怪接口定义
*/
public interface PocketMonster {
// 攻击方法,口袋妖怪天生战斗民族
public void fight();
}
然后创建一个皮卡丘类和暴鲤龙类都实现口袋妖怪接口,代码分别如下所示:
package com.cdcgeek.bean;
/**
* 皮卡丘类
*
* @Author CDCeek
*/
class Pikachu implements PocketMonster {
// 名称
private String name;
// 等级
private Integer rank;
public Pikachu() {
}
public Pikachu(String name, Integer rank) {
this.name = name;
this.rank = rank;
}
@Override
public void fight() {
System.out.println("吃我十万伏特!");
}
}

同一个包下面的暴鲤龙类,如下所示:
package com.cdcgeek.bean
/**
* 暴鲤龙类
*/
public class Tyrannosaurus implements PocketMonster {
// 名称
private String name;
// 等级
private Integer rank;
public Tyrannosaurus() {
}
public Tyrannosaurus(String name, Integer rank) {
this.name = name;
this.rank = rank;
}
@Override
public void fight() {
System.out.println("破坏死光!");
}
}

下面开始使用反射来召唤宝可梦吧,常用的方法有三种,如下所示:
1.获取反射的类
Class clazz = class.forName("package com.cdcgeek.bean.Pikachu"); // 可以考虑从配置文件中读取,这样就不用hard code了
2.创建反射获得的类的无参实例
Pikachu monster = (Pikachu) clazz.newInstance();
3.通过获得有参构造来创建实例
Constructor c = clazz.getConstructor(String.class, Integer.class);
PocketMonster monster = (PocketMonster) c.newInstance("张无忌", 233);
温故而知新,又是一个美好的夜晚。
Java反射:new一个宝可梦吧的更多相关文章
- java反射机制一个例子
import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try ...
- 【译】7. Java反射——私有字段和私有方法
原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...
- JAVA反射改动常量,以及其局限
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/barryhappy/article/details/24442953 问题,以及一个解决方式 今天公 ...
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...
- 一个例子让你了解Java反射机制
本文来自:blog.csdn.net/ljphhj JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运 ...
- 【Java】利用注解和反射实现一个"低配版"的依赖注入
在Spring中,我们可以通过 @Autowired注解的方式为一个方法中注入参数,那么这种方法背后到底发生了什么呢,这篇文章将讲述如何用Java的注解和反射实现一个“低配版”的依赖注入. 下面是我们 ...
- Java反射机制demo(六)—获得并操作一个类的属性
Java反射机制demo(六)—获得并操作一个类的属性 获得并操作一个类的属性?! 不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊! 但是毫无疑问,这些东西在Java的反射机制 ...
- Java反射机制demo(五)—获得并调用一个类中的方法
Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...
- Java反射机制demo(四)—获取一个类的父类和实现的接口
Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...
随机推荐
- java进阶(23)--List接口
一.基本概念 1.有序可重复 2.有下标 3.包含ArraList.LinkedList.Vector 二.List中特有的方法 且常用 (以下军均为数组通用方法) 1.void add(int ...
- 和低效 IO 说再见,回头补一波 Java 7 的 NIO.2 特性
其实在这之前已经写过一篇关于 Java 7 的新特性文章了,那篇文章主要介绍了 Java 7 的资源自动关闭.Switch String 实现原理.异常捕获 try-catch.新的二进制书写方式等, ...
- MarkDown系列教程
编辑了一个Markdown的系列教程,前一部分是摘编自 菜鸟教程 网站 目录 第一篇 Markdown 使用教程 入门
- 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令
一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用 Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解 ...
- Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Spring Boot 第六弹,拦截器如何配置,看这儿~
持续原创输出,点击上方蓝字关注我吧 目录 前言 Spring Boot 版本 什么是拦截器? 如何自定义一个拦截器? 如何使其在Spring Boot中生效? 举个栗子 思路 根据什么判断这个接口已经 ...
- python排序算法总结和实现
------------------希尔排序------------- 一直没搞懂希尔排序怎么搞得 def Shell_sort(L): step = len(L)/2 while step > ...
- 安装、验证安装 Oracle Database XE 11gR2
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- Go 接口类型
接口作用 Go语言中的接口是一种类型,类似于Python中的抽象基类. Go语言中使用接口来体现多态,是duck-type的一种体现. 如,只要一个东西会叫,会走,那么我们就可以将它定义为一个动物的接 ...
- 对lambda表达式的字节码实现个人理解 - 简单描述
暂且抛开具体的代码实现,谈谈个人的理解. 常规的方法调用,具体由哪条指令来执行,实际都是在JVM的规则中就定下来了,比如构造方法使用invokeSpecial,静态方法使用invokeStatic.现 ...