java反射sethaha_Java反射深度测试

通过反射API构造对象,并使用反射调用方式访问对象的public/private方法和字段。

package lavasoft.test;

/**

* 测试的业务类

*

* @author leizhimin 2010-5-6 20:16:10

*/

public class MyService {

private String msg;

public MyService() {

System.out.println("log: 无参构造方法lavasoft.test.MyService.MyService()被调用过了!");

}

public MyService(String msg) {

System.out.println("log: 有参构造方法lavasoft.test.MyService.MyService()被调用过了!");

this.msg = msg;

}

public String doSomething(String person, String something) {

System.out.println("log: 业务方法lavasoft.test.MyService.doSomething()被调用过了!");

return person + " is doing " + something + "!    " +

"附加消息:" + msg;

}

public String getMsg() {

System.out.println("log: lavasoft.test.MyService.getMsg()被调用过了!");

return msg;

}

public void setMsg(String msg) {

System.out.println("log: lavasoft.test.MyService.setMsg()被调用过了!");

this.msg = msg;

}

private String doPrivate() {

System.out.println("log: 私有方法lavasoft.test.MyService.doPrivate()被调用过了!");

return "私有方法doPrivate()被调用了!";

}

}

package lavasoft.test;

import Java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.*;

/**

* Java反射深度测试

*

* @author leizhimin 2010-5-6 20:26:49

*/

public class TestReflect {

public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchFieldException {

//通过反射方式创建对象

Class clazz = MyService.class;

MyService sv = (MyService)clazz.getConstructor().newInstance();

sv.setMsg("通过Class方式创建一个对象,并调用对象上的方法!");

//通过反射方式调用对象的public方法

Method m_setMsg =    clazz.getMethod("setMsg",String.class);

m_setMsg.invoke(sv,"通过反射调用了sv对象上的一个方法!");

Method m_do    = clazz.getMethod("doSomething",String.class ,String.class);

String re = (String)m_do.invoke(sv,"张三" ,"吃饭");

System.out.println(re);

//通过反射方式调用对象的private方法

Method m_doPrivate = clazz.getDeclaredMethod("doPrivate");

m_doPrivate.setAccessible(true);

m_doPrivate.invoke(sv);

//通过反射方式访问对象private字段

Field f_msg = clazz.getDeclaredField("msg");

f_msg.setAccessible(true);

f_msg.set(sv,"hahahahahahahaha");

System.out.println(sv.getMsg());

}

}

log: 无参构造方法lavasoft.test.MyService.MyService()被调用过了!

log: lavasoft.test.MyService.setMsg()被调用过了!

log: lavasoft.test.MyService.setMsg()被调用过了!

log: 业务方法lavasoft.test.MyService.doSomething()被调用过了!

张三 is doing 吃饭!    附加消息:通过反射调用了sv对象上的一个方法!

log: 私有方法lavasoft.test.MyService.doPrivate()被调用过了!

log: lavasoft.test.MyService.getMsg()被调用过了!

hahahahahahahaha

Process finished with exit code 00b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

回顾在《监控系统简介:使用 Prometheus 与 Grafana》一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型、PromQL 以及 Grafana 可视化工具的基本用法。今天这一篇我们将在 ASP.NET Web API 项目中进行实战&#xf…

剧透人生!你什么时候结婚换工作甚至狗带,Facebook都知道

来源:大数据文摘即将换工作?要结婚了?有亲人朋友要去世了?你关心的这些人生重大节点,有人希望比你提前知道它们何时发生,并基于此对你精准投放广告。惊悚?这是Facebook在2010年以来提交的一系列…

如何在 NET 程序万种死法中有效的生成 Dump (下)

一:背景 上一篇我们聊到了如何通过 procdump 抓取 cpu爆高 和 内存暴涨 两种情况,这一篇再聊聊如何去抓程序 挂死 和 意外退出。二:程序挂死 1. 定义程序挂死 简单的说就是程序没有响应,既然没响应了,可能 死锁, 可能 …

C++程序运行时内存布局之--无继承情况下的虚函数

2019独角兽企业重金招聘Python工程师标准>>> 虚函数是C实现多态的关键,没有虚函数,C只能是OB,不能完成OO。 本文介绍的是没有继承情况下,带有虚函数的类在内存中布局,以及其实例(对象&#xff0…

纠结学哪种编程语言?请看这个回答

各位童鞋,如果最近/未来几年有人还纠结学习哪种编程语言,那你可以请他/她参考一下这个 Quora 帖子的最高赞回答:> 能找一份工作:Java> 能找一份高薪工作:C> 啥样工作都能找到:Python> 总能找到…

NET问答: 有最干净利落的读写文件方式吗?

咨询区 ApprenticeHacker:在 C# 中有很多种读写文件的方式 (文本文件,非二进制)。为了践行 do more, write less 的思想,现寻找一种最简单最少代码量的方式,因为在我的项目中有太多的功能需要读写文件了。回答区 vc 74&#xff1a…

写好一份数据分析报告的13个要点

先说说写一份好的数据分析报告的重要性,很简单,因为分析报告的输出是你整个分析过程的成果,是评定一个产品、一个运营事件的定性结论,很可能是产品决策的参考依据,既然这么重要那当然要写好它了。我认为一份好的分析报…

oracle11g安装和基本的使用,手把手看图教你用起来。

前面技术架构和系统选型说到了使用oracle,看到园友们一些评论。我也不想卖弄,不想争论什么数据库好。喜欢就是理由,用了多年了为何不可。 我可以想象,大家没有使用oracle的原因可能有以下几点: 被oracle价格吓破胆的有…

java高并发类_Java 高并发之魂

前置知识了解Java基本语法了解多线程基本知识知识介绍Synchronized简介:作用、地位、不控制并发的后果两种用法:对象锁和类锁多线程访问同步方法的7种情况:是否是static、Synchronized方法等Synchronized的性质:可重入、不可中断原…

.NET 开源配置组件 AgileConfig 初体验

介绍在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善&…

来领资料咯!计算机专业教科书礼包

现在计算机行业越来越火爆,技术的更新也越来越快,不好好充实自己的话,就会被淘汰。小编这几年一直有意识地收集计算机行业相关的书籍,现在已经拥有5G左右的资料,如C、Java、Python、机器学习、网页开发Web Dev、数据分…

Asp.Net Core 5 REST API - Step by Step(一)

翻译自 Mohamad Lawand 2021年1月19日的文章 《Asp.Net Core 5 Rest API Step by Step》 [1]在本文中,我们将创建一个简单的 Asp.Net Core REST API Todo 应用程序,在其中我们可以添加、编辑、删除和查看待办事项,并且将使用 SQLite 来存储数…

身为程序员碰到最奇葩的需求是怎样的?

梁大折腾部门老大:你,做个微信小游戏吧我:啥样的?老大:反正你就做个小游戏吧,这个火我:?????柔情领导:那个运维啊,你来把他…

15个未来高科技产品会让你无法想象!这些开脑洞的设计太牛了!

导读:从衣食住行到生活的方方面面,未来必将会有天翻地覆的变化。大数据、云计算、物联网和人工智能这些年的发展,让我们对并不遥远的未来有了更多想象和期待。那些我们现阶段不可企及的所思所想,将在未来成为大部分人的日常。这么…

解决 .NET Core 在 Linux Container 中获取 CurrentCulture 不正确的问题

背景在将公司一款基于 .NET Framework 的控制台程序迁移到 .NET Core 3.1 时,发现程序中本地化的部分失效,症状类似于对 Thread.CurrentThread.CurrentCulture.Name 的值进行 Substring() 操作时抛出 ArgumentOutOfRangeException 异常。该程序在 Window…

机器学习资料升级版来了!!!

机器学习一直是一个热门的领域。上次分享的机器学习资料【资源】机器学习资料包来袭受到大家的广泛好评,今天小编打算分享一份机器学习升级版的资料,有斯坦福大学-深度学习基础教程、机器学习实战、人工智能与大数据、Tagging等。顺序最下优化算法Error …

K-Means算法的10个有趣用例

K-means算法具有悠久的历史,并且也是最常用的聚类算法之一。K-means算法实施起来非常简单,因此,它非常适用于机器学习新手爱好者。首先我们来回顾K-Means算法的起源,然后介绍其较为典型的应用场景。起源1967年,James M…

C# $的用法

今天闲来无事,就随便在网上乱看,突然想到Jquery的$符号很强大,那么C#有没有这个东西呢,一查,果然有。经查证发现,这个是在C#6.0出现的一个新特性,也就是一个小语法糖,其作用相当于对…

想转行人工智能?机会来了!!!

一个坏消息:2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。这意味着职场新人和准备找工作的同学们,为了在今后十年内不被淘汰,你们要补课了,从初中…

tankwar java_TankWar 单机(JAVA版) 版本0.3 画出坦克

其实就是通过自定义的panel 重写里面的paint方法 使用Graphics类画一个圆然后把自定的panel添加到窗口中由于想到tank不能只画一个 所以我们封装一个tank类 里面有一个draw方法 用来画 坦克通过实例化tank 调用draw方法就能实现画tank了具体代码如下:Tank类pac…