通过Java反射机制调用方法
//20210204
写在前面:最近再把Java反射和注释知识点过一遍,在这里记一下重要的点,本文讲述反射机制创建对象并调用方法
主要任务:
使用类反射机制实现对象创建以及方法调用
与普通方式实现对象创建以及方法调用,并对比二者区别
程序源代码:
//此处实现String的反射调用,测试方法为equals方法
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MethodReflection {
public static void main(String[] args) throws Exception{
String test = new String("hello world");
System.out.println(test.equals("hello world"));
Class st = Class.forName("java.lang.String");
Constructor con = st.getDeclaredConstructor(String.class);//获取有参构造
Object obj = con.newInstance("hello world");
Method[] methods = st.getMethods();
// for (Method method : methods) {
// System.out.println(method.getName()+" "+ Modifier.toString(method.getModifiers()));
// }
System.out.println(methods[0].getName());
Object value = methods[0].invoke(obj,"hello world");
System.out.println(value.toString());
}
}
输出如下:
对比:
使用普通方法
优点:方便
缺点:不灵活,一旦需求改了就需要改源代码
使用反射机制
优点:灵活,可以把关键内容写进配置文件,java文件只是构造一个模板,需求要改的时候更改配置文件即可
缺点:不方便,程序冗长
附录:
小知识点——关于可变长度参数[...]:
Java中,一个方法可以传入不定长度的参数,使用参数类型+‘...’指定即可
例:
//'...'的使用举例
public static void test(String... args){
for(Stirng str : args){
System.out.println(str);//输出传入参数列表
}
}
public static void main(String[] args){
test("hello","world");
}
输出如下:
以上
希望对大家有所帮助
通过Java反射机制调用方法 相关文章
JavaSE_基本语法学习
JavaSE_基本语法学习 1.注释 注释有三种: 1. 单行注释//2. 多行注释/**/3. 文档注释 /** */ 2.标识符与关键字 java所有的组成部分都需要名字. 标识符:类名,变量名以及方法名都被称为标识符 关键字:除类名,变量名以及方法名外,其他基本为关键字 //abstract定
腾讯安全月报丨0误报通过赛可达认证、DDoS威胁报告发布、CASB方案上线……
腾讯智慧城市安全运营中心获IDC推荐,助力城市安全生态加快融通 1月,《IDC特殊研究:中国智慧城市安全运营中心市场洞察》发布,综合呈现了相关建设现状、实践成果、未来趋势及进阶建议。腾讯智慧城市安全运营中心凭借产品技术实力、方案创新能力及业界最佳实
Hutool Java 工具类库导出 Excel,超级简单!
首先在POM.xml中加入GAV dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.0.7/version/dependencydependency groupIdorg.apache.poi/groupId artifactIdpoi-ooxml/artifactId version4.1.1/version/dependencydependency gro
JavaScript 代码技巧mark
分享一些我常用的代码优化技巧,希望对你有帮助。 1. 多表达式多 if 判断 我们可以在数组中存储多个值,并且可以使用数组include方法。 1 // 长2 if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') { //logic}3 // 短4 if (['abc', 'def', 'ghi
【JAVA】之获取CSV文件数据以及获取Excel文件数据
一、获取CSV文件数据 import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.testng.SkipException;import org.t
java-response-乱码解决
(1)响应体设置文本 PrintWriter getWriter () 获得字符流,通过字符流的 write ( String s) 方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览 器端。 关于设置中文的乱码问题 原因:response缓冲区
Java注解和反射笔记
Java注解和反射笔记 1 注解 1.1 定义 Annotation是从JDK1.5开始引入的技术 作用 不是程序本身,可以对程序作出解释 可以被其他程序(编译器等)读取 格式 @注释名,可以添加一些数值 注解可以附加在package,class,method,field上面,可以通过反射机制实现
Java IO 的分类、使用场景、缓冲流、使用例子、文件拷贝
1、什么是IO I/O 是指Input/Output,即输入和输出。 Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。 Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。 Java程序在执行
10年程序员都不一定搞清楚的文件路径
在 Java 中,文件是很常用的概念,这其中文件路径是一个很基础的内容,因为文件的创建,读取,写入和删除等操作都是依赖于文件路径的。但是你仔细看一下Java中 File 的 API 你会发现有这样三个方法返回路径。 getPath(获取路径) getAbsolutePath(获取绝对
Java代码中的魔法值
1. 前言 重构老代码中遇到了不少类似下面这种写法: public void attend(String value) { if ("0".equals(value)) { //todo } else if ("1".equals(value)) { //todo } else { //todo } } 脑壳疼!从Java语法上无懈可击,但是从业务上却让人无法理解其中 0