使用反射破坏单例

预防措施:

使用反射破坏单例https://www.zhihu.com/video/1087688627387117568

获取和修改成员变量(Field)

获取成员变量的方法:

获取公开的成员变量:

获取所有成员变量:

获取指定对象中成员变量的值:

修改对象中成员变量的值:

获取和修改成员变量https://www.zhihu.com/video/1087688719217000448

获取和调用成员方法

获取公开的成员方法:

https://www.zhihu.com/video/1087688966215368704

获取所有成员方法:

结论:

使用getMathods()函数,可以获取所有公开的方法, 包括从父类继承的公开的函数;

使用getDeclaredMethods函数,可以获取所有函数,包括私有和公开的,但是只能得到这个类中的函数;

通过指定对象调用方法:

获取和调用成员方法https://www.zhihu.com/video/1087689054249844736

读取文件

public class Demo2 {public static void main(String[] args) throws IOException {// 1、获取表示Demo2这个类的Class对象Class clazz = Demo2.class;//2、使用Class类的方法加载文件//注意:这个方法的参数中,文件的绝对路径的根目录就是src目录(实际上编译后是bin目录)InputStream input = clazz.getResourceAsStream("/com/kuaixueit/1.txt");System.out.println(input);byte[] byts = new byte[1024];int len = input.read(byts);System.out.println(new String(byts, 0, len));}}

读取文件https://www.zhihu.com/video/1087689174173368320


反射练习

获取一个对象的所有字段,把其中String类型的字段值中的”三”都改成“四”

反射练习https://www.zhihu.com/video/1087689388510703616


向ArrayList<Integer>对象中添加一个字符串对象

public class Test2 {//1.5.2.向ArrayList<Integer>对象中添加一个字符串对象public static void main(String[] args) throws Exception {ArrayList<Integer> list = new ArrayList<>();/* 思考:这个集合已经使用泛型,限制只能添加Integer对象,* 所以不能直接添加字符串;* 因为前面学习时知道,泛型仅仅在编译期有效,编译后的字节码中没有泛型(泛型的擦除)。* 所以可以考虑使用反射技术;因为反射就是操作字节码的,字节码里面没有泛型的约束* 在字节码中,集合的add方法,接受的参数都是Object类型的;* */list.add(12);//1、获取这个对象的class对象Class clazz = list.getClass();//2、通过clazz获取add方法Method m = clazz.getMethod("add", Object.class);System.out.println(m);//3、通过这个方法对象,在对象list上面调用m.invoke(list, "快些大数据!哈哈哈哈哈");System.out.println(list);}
}

向ArrayList<Integer>对象中添加https://www.zhihu.com/video/1087689428864040960

演示动态修改功能

需求:有个程序,每间隔1秒输出一句话:你好!

我们需要通过更改配置文件,不重启程序,就直接将输出的内容改为:Hello!;

配置文件:

public class Test3 {
//  需求:有个程序,每间隔1秒输出一句话:你好!
//  我们需要通过更改配置文件,不重启程序,就直接将输出的内容改为:Hello!;public static void main(String[] args) throws Exception {while(true) {//线程休眠一秒Thread.sleep(1000);ISay s = (ISay)createObject();s.say();}}public static Object createObject() {try(InputStream is = new FileInputStream("className.properties");){//创建一个Properties对象,用来操作配置文件Properties p = new Properties();//通过输入流is,将配置文件中的数据加载到Properites对象中p.load(is);//调用方法,根据键获取值String className = p.getProperty("className");//根据配置文件中的内容,创建具体的类Class clazz = Class.forName(className);//根据类,使用反射的方式创建对象Object obj = clazz.newInstance();return obj;}catch(Exception e) {e.printStackTrace();return null;}}
}
interface ISay{public void say();
}
class SayJpa implements ISay{public void say() {System.out.println("这是日语的你好!");}
}
class SayEn implements ISay{public void say() {System.out.println("Hello!");}
}
class SayZh implements ISay{public void say() {System.out.println("你好!");}
}

总结使用反射的一般步骤:

  1. 获取要操作的Class类对象;
  2. 根据具体需求,获取相应的成员(构造函数、成员变量、一般函数)
  3. 具体操作得到的功能

bat 调用class文件_【Java视频教程】day42-??什么是Class???相关推荐

  1. bat 调用class文件_[Golang实现JVM第五篇]静态方法调用的实现

    一直以来又长又臭的调用链简直就是Java语言的标志性特色,方法调用可谓是Java世界里表达一切逻辑的基石.现在我们终于具备了实现它的基础. JVM中的5条方法调用指令 在JVM中触发方法调用的指令有5 ...

  2. bat 调用class文件_拯救写框架的程序员!用字节码替代反射,实现任意函数调用...

    作者 | 阿里巴巴文娱高级开发工程师 兰摧 技术类别:JAVA,后端技术,中间件开发,框架开发 技术亮点:字节码实现类似反射的功能,速度接近JAVA原生的调用 一.背景 我们在写一些框架或者中间件时, ...

  3. jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题

    在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...

  4. python文件调用python文件_自己写的python文件如何相互调用

    自己写的python文件如何相互调用?Python中的模块库十分常用,对于常用的模块可以自己动手自定义,但是如何进行调用呢? 模块相互调用 同级目录调用时的两种方法import module prin ...

  5. node.js调用.c文件_在Node.js中分派S3文件

    node.js调用.c文件 Some of our intranet backends use S3 storage and GraphQL APIs. It's a common scenario ...

  6. java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...

    本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...

  7. java web调用exe文件_从网页WEB上调用本地应用程序(java)

    自己写了个java的桌面程序,想通过web页面调用直接打开登录页面,传账号和密码两个参数. 在网上看了很多资料,大多处理方法是自定义个协议然后通过协议来打开本地exe文件,但是这样传的参数怎么解析? ...

  8. java jna调用dll文件_关于java jna调用dll的问题

    public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32)Native.loadLibrary(" ...

  9. bat 调用class文件_Logback 配置文件这么写,TPS 提高 10 倍!

    作者:何甜甜在吗 链接:juejin.im/post/5d4d61326fb9a06aff5e5ff5 通过阅读本篇文章将了解到: 1.日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 2. ...

最新文章

  1. 改进C#代码之24:通过定义并实现接口替代继承
  2. mysql 开启远程访问
  3. Linux 下 ps 命令的使用详解
  4. SQL注入学习——sqli-labs闯关(Basic Challenges)
  5. java web开发技巧_java web开发技巧
  6. 第十章:Java_IO流
  7. sonar 规则之漏洞类型
  8. python2.7安装pip_python2.7 安装pip的方法步骤(管用)
  9. geek_How-To Geek正在寻找安全作家
  10. NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
  11. vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver
  12. iframe中元素的获取
  13. Java web 部分参考手册(CHM)资源
  14. 【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
  15. TopCoder 规则入门
  16. 苹果开发者账户续费 支付授权失败(终极解决方案)
  17. 湖南德山监狱重刑犯凿墙脱逃 警方悬赏5万缉凶
  18. DS18B20 Proteus
  19. 手机6120C 玩仙剑dos版
  20. 我的2014作的一手好死,2015求轻虐

热门文章

  1. Python_XPath
  2. 7-63 情人节 (15 分)(c++stl)
  3. 远程查看室内亮暗情况
  4. virtualbox linux通用网卡,详解VirtualBox + CentOS 虚拟机网卡配置
  5. python txt文件排序,使用Python在.txt文件中按數值(降序)排序高分列表
  6. 表格下拉_【职场充电】要说制作一个漂亮的表格,高手都爱WPS
  7. 《剑指offer》第一题(重载赋值运算符)
  8. web页面找不到资源文件,报404,但是资源文件存在且路径没错
  9. 微信红包功能(含示例demo)
  10. windows 程序设计及API