Java反射使用方法
//简单的例子
public class ReflextionMain {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException { EqualsMain refOne = new EqualsMain();//类全称为: equals.EqualsMain
System.out.println(refOne.getClass().getName());//equals.EqualsMain
System.out.println(EqualsMain.class.getName());//equals.EqualsMain
System.out.println(EqualsMain.class.getPackage().getName());//equals /**
* 对应的类
*/
Class<?> classOne = Class.forName("equals.EqualsMain");
System.out.println(classOne.getName());//equals.EqualsMain EqualsMain equOne = (EqualsMain) classOne.newInstance();
equOne.setId("5");
System.out.println(equOne.getId());//5 /**
* 所有的构造函数
*/
Constructor<?>[] constructors = classOne.getConstructors();
EqualsMain equTwo = (EqualsMain) constructors[0].newInstance("123");
EqualsMain equThree = (EqualsMain) constructors[1].newInstance(); System.out.println(equTwo.getId() + "|||" + equThree.getId());//123|||null System.out.println(classOne.getClassLoader().getClass().getName());//sun.misc.Launcher$AppClassLoader /**
* 名称为id的字段
*/
Field fieldOne = classOne.getDeclaredField("id");
fieldOne.setAccessible(true);
fieldOne.set(equOne, "456");
System.out.println(fieldOne.get(equOne));//456 /**
* 父类
*/
Class<?> superClass = classOne.getSuperclass();
System.out.println(superClass.getName());//java.lang.Object /**
* 包含的字段
*/
Field[] fields = classOne.getDeclaredFields();
for (Field field : fields){
System.out.println(field);//private java.lang.String equals.EqualsMain.id
} /**
* 包含的方法
*/
Method[] methods = classOne.getDeclaredMethods();
/**
* 打印内容如下:
* public static void equals.EqualsMain.main(java.lang.String[])
* main
* void
* 9
* [java.lang.String[] arg0]
* public boolean equals.EqualsMain.equals(java.lang.Object)
* equals
* boolean
* 1
* [java.lang.Object arg0]
* public int equals.EqualsMain.hashCode()
* hashCode
* int
* 1
* []
* public java.lang.String equals.EqualsMain.getId()
* getId
* class java.lang.String
* 1
* []
* public void equals.EqualsMain.setId(java.lang.String)
* setId
* void
* 1
* [java.lang.String arg0]
*/
for (Method method : methods){
System.out.println(method);//函数代码写法
System.out.println(method.getName());//函数名
System.out.println(method.getReturnType());//函数返回类型
System.out.println(method.getModifiers());//函数访问修饰符
System.out.println(Arrays.toString(method.getParameters()));//函数参数
} /**
* 实现的接口
*/
Class<?>[] interfaces = classOne.getInterfaces();
for (Class clazz : interfaces){
System.out.println(clazz);//interface java.io.Serializable
} /**
* 打印内容如下:
* map中的数据
* ----------------------
*/
Method methodMain = classOne.getMethod("main", java.lang.String[].class);
methodMain.invoke(classOne.newInstance(), (Object) new String[]{"999"});
}
}
public class EqualsMain implements Serializable {
private String id;
public EqualsMain(String id){
this.id = id;
}
public EqualsMain(){};
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (null == obj) return false;
if (this.id.equals(((EqualsMain)obj).getId())){
return true;
}else {
return false;
}
}
public static void main(String[] args){
EqualsMain equalsMain1 = new EqualsMain("10");
EqualsMain equalsMain2 = new EqualsMain("20");
EqualsMain equalsMain3 = new EqualsMain("10");
Map<Object , String> map = new HashMap<>();
map.put(equalsMain1, "map中的数据");
System.out.println(map.get(equalsMain3));
System.out.println("----------------------");
}
}
Java反射使用方法的更多相关文章
- 通过Java反射调用方法
这是个测试用的例子,通过反射调用对象的方法. TestRef.java import java.lang.reflect.Method; import java.lang.reflect.In ...
- 深入解析Java反射-invoke方法
博客原文:http://www.sczyh30.com/posts/Java/java-reflection-2/ 上篇文章中回顾了一下Java反射相关的基础内容.这一节我们来深入研究Method类中 ...
- JAVA反射调用方法
1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable ...
- 解析Java反射 - invoke方法
最近工作中涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,倒 ...
- Java反射之方法反射demo
package reflect; import java.lang.reflect.Method; public class ClassDemo3 { public static void main( ...
- Java 反射调用方法 - 不跳过安全检查、跳过安全检查和普通方法性能比较测试
java中反射提供灵活性同时,给运行效率带来了一定影响.写个代码测试一下 package com.xzlf.reflectTest; import java.lang.reflect.Method; ...
- java反射拼接方法名动态执行方法
近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者s ...
- Java反射桥接方法解析
在阅读mybaits源码的反射模块时,看到了如下的一段代码: /** * 添加 Method 数组到 uniqueMethods * @param uniqueMethods * @param met ...
- java反射-获取方法信息
例子代码如下: package com.reflect; import java.lang.reflect.Method; public class ClassUtill { /* * 打印类的信息, ...
随机推荐
- JavaScript交互式网页设计笔记 • 【目录】
章节 内容 实践练习 JavaScript交互式网页设计作业目录(作业笔记) 第1章 JavaScript交互式网页设计笔记 • [第1章 JavaScript基本语法] 第2章 JavaScript ...
- .NET 编码的基础知识
.NET 编码的一些基本概念和分析 简单的类型概念 Hex (16进制) byte 字节 范围是:0~255,二进制下的范围就是00000000~11111111,相当于1字节. byte[] 字节数 ...
- Nginx入门--从核心配置与动静分离开始
写在前面 优化我们项目,服务器部署,不仅仅可以是分布式,Nginx一样可以通过动静分离,负载均衡来减轻我们服务器的压力.Nginx的知识链,学习周期相对比较长,博主也是刚刚入门,这篇就先从实现基础的动 ...
- CSS实战 模拟 新闻列表
总结:所使用的知识点:1.padding应用以及box-sizing: border-box自动内减撑大的盒子 2.ul>li 的使用,去除黑圆圈 3.a标签的使用,去除默认样式<下划线& ...
- android 报错 net::ERR_CLEARTEXT_NOT_PERMITTED
这是从27版本后不允许使用http方式来请求 ,需要使用https 解决办法: 加入一个开关即可 android:usesCleartextTraffic="true"
- SQL高级优化(六)之MySQL索引
一.索引概述 1. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ...
- live-server使用指南
一.安装 npm -g install live-server 二.配置 --port=NUMBER` - 选择要使用的端口,默认值:PORT env var或8080--host=ADDRESS` ...
- .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- 《剑指offer》面试题39. 数组中出现次数超过一半的数字
问题描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, ...
- [GKCTF2020]EZ三剑客-EzNode&[GYCTF2020]Ez_Express
写在前面 Nodejs基础一点没有做题还是很难下手的,要学的还很多 [GKCTF2020]EZ三剑客-EzNode 知识点 1.settimeout溢出 2.沙盒逃逸 题解 打开题目,看源代码 app ...