bat 调用class文件_【Java视频教程】day42-??什么是Class???
使用反射破坏单例
预防措施:
使用反射破坏单例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("你好!");}
}
总结使用反射的一般步骤:
- 获取要操作的Class类对象;
- 根据具体需求,获取相应的成员(构造函数、成员变量、一般函数)
- 具体操作得到的功能
bat 调用class文件_【Java视频教程】day42-??什么是Class???相关推荐
- bat 调用class文件_[Golang实现JVM第五篇]静态方法调用的实现
一直以来又长又臭的调用链简直就是Java语言的标志性特色,方法调用可谓是Java世界里表达一切逻辑的基石.现在我们终于具备了实现它的基础. JVM中的5条方法调用指令 在JVM中触发方法调用的指令有5 ...
- bat 调用class文件_拯救写框架的程序员!用字节码替代反射,实现任意函数调用...
作者 | 阿里巴巴文娱高级开发工程师 兰摧 技术类别:JAVA,后端技术,中间件开发,框架开发 技术亮点:字节码实现类似反射的功能,速度接近JAVA原生的调用 一.背景 我们在写一些框架或者中间件时, ...
- jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题
在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...
- python文件调用python文件_自己写的python文件如何相互调用
自己写的python文件如何相互调用?Python中的模块库十分常用,对于常用的模块可以自己动手自定义,但是如何进行调用呢? 模块相互调用 同级目录调用时的两种方法import module prin ...
- 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 ...
- java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...
本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...
- java web调用exe文件_从网页WEB上调用本地应用程序(java)
自己写了个java的桌面程序,想通过web页面调用直接打开登录页面,传账号和密码两个参数. 在网上看了很多资料,大多处理方法是自定义个协议然后通过协议来打开本地exe文件,但是这样传的参数怎么解析? ...
- java jna调用dll文件_关于java jna调用dll的问题
public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32)Native.loadLibrary(" ...
- bat 调用class文件_Logback 配置文件这么写,TPS 提高 10 倍!
作者:何甜甜在吗 链接:juejin.im/post/5d4d61326fb9a06aff5e5ff5 通过阅读本篇文章将了解到: 1.日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 2. ...
最新文章
- 改进C#代码之24:通过定义并实现接口替代继承
- mysql 开启远程访问
- Linux 下 ps 命令的使用详解
- SQL注入学习——sqli-labs闯关(Basic Challenges)
- java web开发技巧_java web开发技巧
- 第十章:Java_IO流
- sonar 规则之漏洞类型
- python2.7安装pip_python2.7 安装pip的方法步骤(管用)
- geek_How-To Geek正在寻找安全作家
- NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
- vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver
- iframe中元素的获取
- Java web 部分参考手册(CHM)资源
- 【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
- TopCoder 规则入门
- 苹果开发者账户续费 支付授权失败(终极解决方案)
- 湖南德山监狱重刑犯凿墙脱逃 警方悬赏5万缉凶
- DS18B20 Proteus
- 手机6120C 玩仙剑dos版
- 我的2014作的一手好死,2015求轻虐
热门文章
- Python_XPath
- 7-63 情人节 (15 分)(c++stl)
- 远程查看室内亮暗情况
- virtualbox linux通用网卡,详解VirtualBox + CentOS 虚拟机网卡配置
- python txt文件排序,使用Python在.txt文件中按數值(降序)排序高分列表
- 表格下拉_【职场充电】要说制作一个漂亮的表格,高手都爱WPS
- 《剑指offer》第一题(重载赋值运算符)
- web页面找不到资源文件,报404,但是资源文件存在且路径没错
- 微信红包功能(含示例demo)
- windows 程序设计及API