文档章节

执行纯字符串中的java代码,无需热编译,巧用javascirpt

畅想的杨海天
 畅想的杨海天
发布于 2014/08/27 10:07
字数 500
阅读 235
收藏 0

最近想怎么才能不用热编译去执行出想要的纯字符串的java代码。后来发现可以通过字符串执行javascript。

后来一想...javascript貌似也能执行java里面的类和方法...那....结合了会怎么样

package com.lianxi;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

public class Lianxi4 {

public String aa;

public static void a(){

System.out.println("======a");

}

public void b(){

System.out.println("------------------b"+aa);

}

public static void main(String[] args) {

             String name="haha";

//根据字符串,进行java方法的调用

try{

ScriptEngineManager manager = new ScriptEngineManager();

   ScriptEngine jsEngine;  

   jsEngine = manager.getEngineByExtension("js");

                   //这里的字符串采用的是js的写法,但可以调用java代码,发现连java.lang这个包也是要手动引入的

   jsEngine.eval("importPackage(com.lianxi,java.lang);"+//引入了包

        "var l=new Lianxi4();l.aa='123';l.b();" +//创建了java对象...给l对象的aa属性赋值,并调用l的b()方法

        "for(var j=0;j<=10;j++){System.out.println('---------====');}"//执行输出...在控制台也循环输出

        );

}catch(Exception e)

{

e.printStackTrace();

}

}

}


这个方式虽然可以实现通过字符串执行java代码,但里面用到的对象都要重新new出来...而且这个相当于一个独立的方法...和main方法中上面定义的参数没有关系...想要获取到该方法中的其他用到的参数来拼接字符串中的方法,比如要输出上面定义的String name...那就需要再封装一套类似el表达式的方式    比如${name}; 用此方式去实现动态字符串获取方法中的其他用到的参数,进行替换

此方法只适用于jdk1.6及以上

© 著作权归作者所有

畅想的杨海天
粉丝 7
博文 2
码字总数 1470
作品 0
朝阳
程序员
私信 提问
进入Android Dalvik虚拟机之Dalvik虚拟机的特点

Google于2007年底正式发布了Android SDK,Dalvik虚拟机也第一次进入了人们的视野。它的作者是丹.伯恩斯坦(Dan Bornstein)。Dalvik虚拟机作为Android平台的核心组件,拥有如下几个特点: 体...

柳哥
2015/01/08
0
0
JVM性能优化, Part 2 ―― 编译器

ImportNew注:本文是JVM性能优化 – 第2篇 《JVM性能优化, Part 2 ―― 编译器》第一篇 《JVM性能优化, Part 1 ―― JVM简介 》 作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器...

梁杰_Jack
2014/10/30
0
0
Java 已老,Kotlin 或将取而代之!

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! Java已经成为历史。它无法发展成现代语言,同时保证向后兼容性。但它为我们带来了最好的JVM生态系统,并引导了许多优秀语言...

CSDN
2018/05/12
0
0
java.util.regex Pattern 正则

/**String 中 replaceAll(),matches(),split() 等方法,都是调用Pattern中的方法。学习了,瞬间觉得Pattern强大了 public String replaceAll(String regex, String replacement) {return Pat......

happycode
2014/04/02
0
1
SpringBoot实战(四)之使用JDBC和Spring访问数据库

这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库。 H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个...

youcongtech
2018/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Odoo 自定义Widgets 基础教程(章节2)

大家好, 本文将进一步解释odoo widget 的相关原理,其中首先会讲述:1. 什么是widgets 中的继承;2. 为什么有很多 init : function 语法;3. widgets 系统结构; 首先,让我们来看看结构:(...

openerp
15分钟前
0
0
我的Linux常用软件

我的Linux常用软件 本帖记录我在Linux下常用的软件,系统是Deepin Linux, 以备查询用, 不定期更新。 Sougou Pinyin 这个不用多说, 装系统第一个要找输入法。 TeamViewer Linux有时候需要远...

Frank1126lin
22分钟前
0
0
TypeScript + eslint 格式化代码及其它

缘起 之前使用 tslint 校验代码格式,后来发现 ts 官方已经放弃这个转而使用 eslint,研究了一下把相应配置调整了一下。 目标: 使用 eslint、prettier 格式化 TypeScript 代码 使用 husky、...

郁也风
22分钟前
0
0
虎牙在全球 DNS 秒级生效上的实践

本文整理自虎牙中间件团队在 Nacos Meetup 的现场分享,阿里巴巴中间件受权发布。 这次分享的是全球 DNS 秒级生效在虎牙的实践,以及由此产生的一些思考,整体上,分为以下5各部分: 背景介绍...

阿里云云栖社区
41分钟前
1
0
centos7上记录sftp操作

ftp客户端中使用sftp协议如何记录操作日志? 经过实践,secure-crt上链接sftp session的操作不会被记录下来,命令行应该很少会用,毕竟门槛在呢。 而其他ftp客户端则会被记录下来,包括进入目...

gaolongquan
43分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部