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 { /* * 打印类的信息, ...
随机推荐
- Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端
TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...
- Hadoop HA(高可用) 详细安装步骤
什么是HA? HA是High Availability的简写,即高可用,指当当前工作中的机器宕机后,会自动处理这个异常,并将工作无缝地转移到其他备用机器上去,以来保证服务的高可用.(简言之,有两台机器 ...
- HDU 1863 畅通工程 (并查集)
原题链接:畅通工程 题目分析:典型的并查集模版题,这里就不详细叙述了.对算法本身不太了解的可以参考这篇文章:并查集算法详解 代码如下: #include <iostream> #inclu ...
- git和命令行 配置proxy请求
GIT中的操作 设置全局代理 git config --global http.proxy socks5://127.0.0.1:8088 git config --global http.proxy ...
- jmeter和JDK安装教程(Windows)
1.JDK的安装及环境变量配置 1.JDK的下载安装 JDK官网下载地址:https://www.oracle.com/java/technologies/downloads 然后注册账号,开始下载, ...
- 《剑指offer》面试题50. 第一个只出现一次的字符
问题描述 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. 示例: s = "abaccdeff" 返回 "b" s = "&q ...
- Java加减乘除计算器实现
加减乘除计算机的实现 public static void main(String[] args) { while(true) { System.out.println("依次输入要计算的2 ...
- 【记录一个问题】笔记本ThinkPad X1-Extreme安装ubuntu 18后,更新nvidia显卡驱动后出现显示问题,无法再登录
如题 更新的过程如下: sudo ubuntu-drivers autoinstall sudo reboot 后续准备在recovery模式中尝试删除驱动.
- axios请求的封装
/* axios的请求封装 */ //axios的原生写法get,post请求 //第一个参数为请求地址,第二个参数为请求的参数,params是将参数拼接在url的后面 ...
- gin中获取查询字符串参数
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := ...