//简单的例子
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反射使用方法的更多相关文章

  1. 通过Java反射调用方法

    这是个测试用的例子,通过反射调用对象的方法.     TestRef.java import java.lang.reflect.Method; import java.lang.reflect.In ...

  2. 深入解析Java反射-invoke方法

    博客原文:http://www.sczyh30.com/posts/Java/java-reflection-2/ 上篇文章中回顾了一下Java反射相关的基础内容.这一节我们来深入研究Method类中 ...

  3. JAVA反射调用方法

    1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable ...

  4. 解析Java反射 - invoke方法

    最近工作中涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,倒 ...

  5. Java反射之方法反射demo

    package reflect; import java.lang.reflect.Method; public class ClassDemo3 { public static void main( ...

  6. Java 反射调用方法 - 不跳过安全检查、跳过安全检查和普通方法性能比较测试

    java中反射提供灵活性同时,给运行效率带来了一定影响.写个代码测试一下 package com.xzlf.reflectTest; import java.lang.reflect.Method; ...

  7. java反射拼接方法名动态执行方法

    近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者s ...

  8. Java反射桥接方法解析

    在阅读mybaits源码的反射模块时,看到了如下的一段代码: /** * 添加 Method 数组到 uniqueMethods * @param uniqueMethods * @param met ...

  9. java反射-获取方法信息

    例子代码如下: package com.reflect; import java.lang.reflect.Method; public class ClassUtill { /* * 打印类的信息, ...

随机推荐

  1. nginx高并发配置详解

    https://www.cnblogs.com/liqiu/p/3152206.html 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 ...

  2. 基于windows环境VsCode的ESP32开发环境搭建

    1. 基于windows环境VsCode的ESP32开发环境搭建,网上有各类教程,但是我实测却不行. 例如我在vscode内安装的乐鑫插件,扩展配置项是下图这样: 而百度的各类博文却都是这样: 经过网 ...

  3. 使用Kubernetes两年来的7大经验教训

    来源:分布式实验室译者:冯旭松在Ridecell公司管理基础设施团队几年后,我想在停下来休息时记录一些想法和经验教训. 1Kubernetes不仅仅是炒作 我在Kubernetes领域里活跃了很久,所 ...

  4. JAVA SOCKET 详解

    概述 本人在开发学习NETTY的过程中,需要了解很多的网络开发知识,在此我总结一些关于socket的基础知识,大部分是网络总结,在此篇的随笔中记录socket的知识,以便于记录,如有问题欢迎大家斧正. ...

  5. kali linux2020 虚拟机改root密码

    kali在2020版的更新中,好多小伙伴登不进root账号,这里来教大家怎样改root账户的密码 1.当我们打开虚拟机看到这个界面的时候,按e进入编辑模式 2.在编辑模式中,"quite s ...

  6. 个人作业2-6.4-Python爬取顶会信息

    1.个人作业2 数据爬取阶段 import requestsfrom lxml import etreeimport pymysqldef getdata(url): # 请求CVPR主页 page_ ...

  7. manjaro20WPS缺少字体

    宋体等 sudo pacman -S ttf-wps-fonts Ariel和Times New Roman https://askubuntu.com/questions/651441/how-to ...

  8. 简述BIO/NIO/AIO前世今生

    如下程序是简单实现了一个极其简单的WEB服务器,用来监听某个端口,接受客户端输入输出信息. 但这个程序有一个致命的问题就是连接会长时间阻塞 于是BIO版本出现了,改成了  一个连接 一个线程来处理请求 ...

  9. Elasticsearch使用系列-ES增删查改基本操作+ik分词

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 一.安装可视化工具Kibana ES是一个NoSql数据库应用.和其他数据库 ...

  10. proxy_buffer代理缓冲区

    目录 一:代理缓冲区 1.代理缓存区模块介绍 二:案例 1.配置文件 2.测试 3.重启 4.lb01服务器(负载均衡) 5.网址配置文件 6.测试 7.重启 8.DNS解析 9.网址测试 10.日志 ...