下面介绍一个例子,是关于如何在Java里面做四则运算,比如求出来(3+4)*7-10的值 。一般的做法是分析输入的运算表达式 , 自己来模拟计算过程 。考虑到括号的存在和运算符的优先级等问题,这样的计算过程会比较复杂,而且容易出错 。另外一种做法是可以用JSR 223引入的脚本语言支持 , 直接把输入的表达式当做JavaScript或是JavaFX脚本来执行,得到结果 。下面的代码使用的做法是动态生成Java源代码并编译,接着加载Java类来执行并获取结果 。这种做法完全使用Java来实现 。
01private static double calculate(String expr) throws CalculationException{
02String className = "CalculatorMain";
03String methodName = "calculate";
04String source = "public class " + className
05+ " { public static double " + methodName + "() { return " + expr +"; } }";
06//省略动态编译Java源代码的相关代码,参见上一节
07boolean result = task.call();
08if (result) {
09ClassLoader loader = Calculator.class.getClassLoader();
10try {
11Class? clazz = loader.loadClass(className);
12Method method = clazz.getMethod(methodName, new Class?[] {});
13Object value = https://www.04ip.com/post/method.invoke(null, new Object[] {});
14return (Double) value;
15} catch (Exception e) {
16throw new CalculationException("内部错误 。");
17}
18} else {
19throw new CalculationException("错误的表达式 。");
20}
21}
上面的代码给出了使用动态生成的Java字节代码的基本模式,即通过类加载器来加载字节代码 , 创建Java类的对象的实例,再通过Java反射API来调用对象中的方法 。
Java字节代码增强
Java 字节代码增强指的是在Java字节代码生成之后,对其进行修改 , 增强其功能 。这种做法相当于对应用程序的二进制文件进行修改 。在很多Java框架中都可以见到这种实现方式 。Java字节代码增强通常与Java源文件中的注解(annotation)一块使用 。注解在Java源代码中声明了需要增强的行为及相关的元数据 , 由框架在运行时刻完成对字节代码的增强 。Java字节代码增强应用的场景比较多,一般都集中在减少冗余代码和对开发人员屏蔽底层的实现细节上 。用过JavaBeans的人可能对其中那些必须添加的getter/setter方法感到很繁琐,并且难以维护 。而通过字节代码增强,开发人员只需要声明Bean中的属性即可,getter/setter方法可以通过修改字节代码来自动添加 。用过JPA的人,在调试程序的时候 , 会发现实体类中被添加了一些额外的 域和方法 。这些域和方法是在运行时刻由JPA的实现动态添加的 。字节代码增强在面向方面编程(AOP)的一些实现中也有使用 。
程序猿专用十大在线编译器(IDE)整理1. CodeSandbox(基于 React 的在线代码沙盒平台) 我常用的
① 主流的脚手架都支持,比如在线create-react-app,vue-cli等(在线 fork 修改),支持 github 登录(项目导入),也支持 cli 上传例子,例子可以在线访问和下载,当然也支持内嵌到其他博客等网页中 。
② 地址:
③ 图示
2. CodePen(前端代码编辑运行的网站)
① CodePen 是一个完全免费的前端代码托管服务,主要功能有:
② 地址:
③ 图示
3. JSRUN(支持手机端的在线JS编辑器)
① jsrun是一款支持手机端的在线JS编辑器, HTML/CSS/Javascript在线代码运行工具,js代码在线测试调试,是runjs的升级版支持vue.js/angular.js的在线编辑器
② 地址:
③ 图示
4. jsFiddle(前端代码编辑运行的网站)
① jsFiddle 是一个Web开发人员的练习场,可在线编辑和测试 HTML、CSS、JavaScript代码片段 。在 jsFiddle 编辑的代码,可以保存,也可分享给其他人,还可嵌入到其他网页
推荐阅读
- redisshell执行,rediscli执行命令
- 泉州正版用友erp管理系统费用,用友erp软件多少钱一套
- 文件上传模块python,pythonftp上传文件
- ios15有什么坏处,ios15有什么不好
- java输出简单语句代码,java输出简单语句代码有哪些
- 游戏王格斗英雄合体卡,游戏王实体卡英雄卡组
- java中国象棋演示代码,用java编写中国象棋棋盘
- php数据库无法浏览 php数据库无法浏览怎么解决
- gis中平移功能在哪里,arcgis如何平移坐标