Java 将字符串动态生成字节码的一种方法
来源:互联网 发布:anywhere软件的用法 编辑:程序博客网 时间:2024/06/16 14:20
可以生成可执行的class文件
直接上能执行代码:
public class Test {
/**
* @param args
*/
@SuppressWarnings("static-access")
public static void main(String[] args) {
try {
new Test().calculate("234 - ( 1 + 45 * 4 ) / 5");
} catch (Exception e) {
e.printStackTrace();
}
}
private static double calculate(String expr) throws Exception {
String className = "CalculatorMain";
String methodName = "calculate";
String source = "class " + className
+ " { public static void main(String[] args){System.out.println(calculate());} public static double " + methodName + "() { return "
+ expr + "; } }";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
null, null, null);
StringSourceJavaObject sourceObject = new Test.StringSourceJavaObject(
"Main", source);
Iterable<? extends JavaFileObject> fileObjects = Arrays
.asList(sourceObject);
CompilationTask task = compiler.getTask(null, fileManager, null, null,
null, fileObjects);
boolean result = task.call();
if (result) {
ClassLoader loader = Thread.currentThread().getClass()
.getClassLoader();
try {
Class<?> clazz = loader.loadClass(className);
Method method = clazz.getMethod(methodName, new Class<?>[] {});
Object value = method.invoke(null, new Object[] {});
return (Double)value;
} catch (Exception e) {
// throw new CalculationException("内部错误。");
}
} else {
// / new CalculationException("错误的表达式。");
}
return 0;
}
static class StringSourceJavaObject extends SimpleJavaFileObject {
private String content = null;
public StringSourceJavaObject(String name, String content)
throws URISyntaxException {
super(URI.create("string:///" + name.replace('.', '/')
+ Kind.SOURCE.extension), Kind.SOURCE);
this.content = content;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors)
throws IOException {
return content;
}
}
}
- Java 将字符串动态生成字节码的一种方法
- Java 将字符串动态生成字节码的一种方法
- 一种Java运行时动态生成class的方法
- 将java字节码%之百的生成可执行代码
- Java字节码的动态生成和增强
- 动态生成Java字节码之java字节码框架ASM的学习
- Java 动态生成二进制字节码
- java 动态代理 生成字节码文件
- JAVA/ 将任意数组内的值乱序(生成随机数)的一种方法
- 一种Java分割字符串的方法
- 将字符串按指定字符截断分组的一种方法
- 一种根据URL参数条件动态生成URL的方法
- ASM(三) 利用Method组件动态生成方法的字节码
- 介绍一种将ASCII码字符串转换为二进制字节数据的方法
- asm动态生成字节码
- java动态生成源文件和字节码方式
- 动态生成java字节码之java字节码框架asm
- Java生成字节码的意思
- Settings的数据库中加新的字段
- OpenGL入门学习——第十四课
- Win32控件使用大全
- vim for php ide
- The reality of developing web games with Flash, HTML5 and Unity(Flash HTML5 Unity之间的比较)
- Java 将字符串动态生成字节码的一种方法
- linux现网mysql5.1升级5.5教程
- 在C平台下每隔一定时间自动弹出web页面
- 图解VS2010打包全过程
- Sending Data Directly to a Printer
- 演化理解 Android 异步加载图片
- ActionScript 游戏编程易错清单
- OpenGL入门学习——第十五课
- js 判断空对象 {}