欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 將字符串動(dòng)態(tài)生成字節(jié)碼的實(shí)現(xiàn)方法

 更新時(shí)間:2014年01月02日 08:43:06   作者:  
本篇文章主要是對(duì)Java將字符串動(dòng)態(tài)生成字節(jié)碼的實(shí)現(xiàn)方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助

可以生成可執(zhí)行的class文件

直接上能執(zhí)行代碼:

復(fù)制代碼 代碼如下:

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("內(nèi)部錯(cuò)誤。");
   }
  } else {
   // / new CalculationException("錯(cuò)誤的表達(dá)式。");
  }
  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;
  }
}

}

相關(guān)文章

  • 可能是全網(wǎng)最詳細(xì)的springboot整合minio教程

    可能是全網(wǎng)最詳細(xì)的springboot整合minio教程

    MinIO是全球領(lǐng)先的對(duì)象存儲(chǔ)先鋒,在標(biāo)準(zhǔn)硬件上,讀/寫(xiě)速度上高達(dá)183 GB/秒和171 GB/秒,下面這篇文章主要給大家介紹了關(guān)于springboot整合minio的相關(guān)資料,這個(gè)教程可能是全網(wǎng)最詳細(xì)的,需要的朋友可以參考下
    2022-06-06
  • 使用eclipse創(chuàng)建java項(xiàng)目的方法

    使用eclipse創(chuàng)建java項(xiàng)目的方法

    這篇文章主要為大家詳細(xì)介紹了使用eclipse創(chuàng)建java項(xiàng)目的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • SpringBoot的啟動(dòng)過(guò)程源碼詳細(xì)分析

    SpringBoot的啟動(dòng)過(guò)程源碼詳細(xì)分析

    這篇文章主要介紹了SpringBoot的啟動(dòng)過(guò)程源碼詳細(xì)分析,SpringBoot啟動(dòng)的時(shí)候,會(huì)構(gòu)造一個(gè)SpringApplication的實(shí)例,構(gòu)造SpringApplication的時(shí)候會(huì)進(jìn)行初始化的工作,需要的朋友可以參考下
    2023-11-11
  • 透過(guò)Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則圖文詳解

    透過(guò)Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則圖文詳解

    Java Bean是一種 Java 編程語(yǔ)言編寫(xiě)的可重用軟件組件,包括符合一定規(guī)范的Java 類、屬性和方法,用于描述和處理應(yīng)用程序中的數(shù)據(jù)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于透過(guò)Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Spring中基于xml配置管理Bean的步驟

    Spring中基于xml配置管理Bean的步驟

    Spring容器通常理解為BeanFactory或者ApplicationContext,我們知道spring的IOC容器能夠幫我們創(chuàng)建對(duì)象,對(duì)象交給spring管理之后我們就不用手動(dòng)去new對(duì)象,這篇文章主要介紹了Spring中基于xml配置管理Bean的步驟,需要的朋友可以參考下
    2023-11-11
  • SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)全過(guò)程

    SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)全過(guò)程

    Spring Security是一個(gè)功能強(qiáng)大且高度可定制的身份驗(yàn)證和授權(quán)框架,專門用于保護(hù)Java應(yīng)用程序的Web集成,下面這篇文章主要給大家介紹了關(guān)于SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • springboot-assembly自定義打包全過(guò)程

    springboot-assembly自定義打包全過(guò)程

    這篇文章主要介紹了springboot-assembly自定義打包全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java FastJson的簡(jiǎn)單用法

    java FastJson的簡(jiǎn)單用法

    FastJson是阿里的開(kāi)源JSON解析庫(kù),可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean,這里我介紹一下FastJson的使用,感興趣的朋友一起看看吧
    2021-09-09
  • Spring獲取當(dāng)前類在容器中的beanname實(shí)現(xiàn)思路

    Spring獲取當(dāng)前類在容器中的beanname實(shí)現(xiàn)思路

    這篇文章主要介紹了Spring獲取當(dāng)前類在容器中的beanname,實(shí)現(xiàn)思路只需繼承BeanNameAware接口,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringBoot升級(jí)3.2報(bào)錯(cuò)Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String的解決方案

    SpringBoot升級(jí)3.2報(bào)錯(cuò)Invalid value type for 

    這篇文章給大家介紹了SpringBoot升級(jí)3.2報(bào)錯(cuò)Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String的解決方案,文中有詳細(xì)的原因分析,需要的朋友可以參考下
    2023-12-12

最新評(píng)論