当前位置: 首页 > news >正文

网站设计宽屏尺寸东莞大岭山房价

网站设计宽屏尺寸,东莞大岭山房价,端游排行榜前十名网络游戏,艺术视频手机网站可以做吗在某些情况下#xff0c;我们需要动态生成java代码#xff0c;通过动态编译#xff0c;然后执行代码。JAVA API提供了相应的工具#xff08;JavaCompiler#xff09;来实现动态编译。下面我们通过一个简单的例子介绍#xff0c;如何通过JavaCompiler实现java代码动态编译…在某些情况下我们需要动态生成java代码通过动态编译然后执行代码。JAVA API提供了相应的工具JavaCompiler来实现动态编译。下面我们通过一个简单的例子介绍如何通过JavaCompiler实现java代码动态编译。 一、获取JavaCompiler JavaCompiler compiler ToolProvider.getSystemJavaCompiler(); 1 获取JDK提供的java编译器如果没有提供编译器则返回null 二、编译 //获取java文件管理类 StandardJavaFileManager manager compiler.getStandardFileManager(null, null, null); //获取java文件对象迭代器 Iterable? extends JavaFileObject it manager.getJavaFileObjects(files); //设置编译参数 ArrayListString ops new ArrayListString(); ops.add(-Xlint:unchecked); //设置classpath ops.add(-classpath); ops.add(CLASS_PATH); //获取编译任务 JavaCompiler.CompilationTask task compiler.getTask(null, manager, null, ops, null, it); //执行编译任务 task.call(); 1234567891011121314 当我们要编译的源代码中引用了其他代码我们需要将引用代码路径设置到-classpath中否则会编译失败。 三、执行 //要加载的类名 String className xxx.xxx.xxx; //获取类加载器 ClassLoader classLoader XXX.class.getClassLoader(); //加载类 Class? cls classLoader.loadClass(className);//调用方法名称 String methodName execute; //方法参数类型数组 Class?[] paramCls {...}; //获取方法 Method method cls.getDeclaredMethod(methodName , paramCls); //创建类实例 Object obj cls.newInstance(); //方法参数 Object[] params {...}; //调用方法 Object result method.invoke(obj, params); 12345678910111213141516171819 四、完整代码 //ClassUtil.java import java.io.FileWriter; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.util.ArrayList; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;public class ClassUtil {private static final Log logger LogFactory.getLog(ClassUtil.class);private static JavaCompiler compiler;static{compiler ToolProvider.getSystemJavaCompiler();}/*** 获取java文件路径* param file* return*/private static String getFilePath(String file){int last1 file.lastIndexOf(/);int last2 file.lastIndexOf(\\);return file.substring(0, last1last2?last1:last2)File.separatorChar;}/*** 编译java文件* param ops 编译参数* param files 编译文件*/private static void javac(ListString ops,String... files){StandardJavaFileManager manager null;try{manager compiler.getStandardFileManager(null, null, null);Iterable? extends JavaFileObject it manager.getJavaFileObjects(files);JavaCompiler.CompilationTask task compiler.getTask(null, manager, null, ops, null, it);task.call();if(logger.isDebugEnabled()){for(String file:files)logger.debug(Compile Java File: file);}}catch(Exception e){logger.error(e);}finally{if(manager!null){try {manager.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 生成java文件* param file 文件名* param source java代码* throws Exception*/private static void writeJavaFile(String file,String source)throws Exception{if(logger.isDebugEnabled()){logger.debug(Write Java Source Code to:file);}BufferedWriter bw null;try{File dir new File(getFilePath(file));if(!dir.exists())dir.mkdirs();bw new BufferedWriter(new FileWriter(file));bw.write(source);bw.flush();}catch(Exception e){throw e;}finally{if(bw!null){bw.close();}}}/*** 加载类* param name 类名* return*/private static Class? load(String name){Class? cls null;ClassLoader classLoader null;try{classLoader ClassUtil.class.getClassLoader();cls classLoader.loadClass(name);if(logger.isDebugEnabled()){logger.debug(Load Class[name] by classLoader);}}catch(Exception e){logger.error(e);}return cls;}/*** 编译代码并加载类* param filePath java代码路径* param source java代码* param clsName 类名* param ops 编译参数* return*/public static Class? loadClass(String filePath,String source,String clsName,ListString ops){try {writeJavaFile(CLASS_PATHfilePath,source);javac(ops,CLASS_PATHfilePath);return load(clsName);} catch (Exception e) {logger.error(e);}return null;}/*** 调用类方法* param cls 类* param methodName 方法名* param paramsCls 方法参数类型* param params 方法参数* return*/public static Object invoke(Class? cls,String methodName,Class?[] paramsCls,Object[] params){Object result null;try {Method method cls.getDeclaredMethod(methodName, paramsCls);Object obj cls.newInstance();result method.invoke(obj, params);} catch (Exception e) {logger.error(e);}return result;} } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 五、测试 public class ClassUtilTest {private static final Log logger LogFactory.getLog(ClassUtilTest.class);public static void main(String args[]){StringBuilder sb new StringBuilder();sb.append(package com.even.test;);sb.append(import java.util.Map;\nimport java.text.DecimalFormat;\n);sb.append(public class Sum{\n);sb.append(private final DecimalFormat df new DecimalFormat(\#.#####\);\n);sb.append(public Double calculate(MapString,Double data){\n);sb.append(double d (30*data.get(\f1\) 20*data.get(\f2\) 50*data.get(\f3\))/100;\n);sb.append(return Double.valueOf(df.format(d));}}\n);//设置编译参数ArrayListString ops new ArrayListString();ops.add(-Xlint:unchecked);//编译代码返回classClass? cls ClassUtil.loadClass(/com/even/test/Sum.java,sb.toString(),com.even.test.Sum,ops);//准备测试数据MapString,Double data new HashMapString,Double();data.put(f1, 10.0);data.put(f2, 20.0);data.put(f3, 30.0);//执行测试方法Object result ClassUtil.invoke(cls, calculate, new Class[]{Map.class}, new Object[]{data});//输出结果logger.debug(data);logger.debug((30*f120*f250*f3)/100 result);} 123456789101112131415161718192021222324252627 测试结果 16:12:02.860 DEBUG com.even.tools.ClassUtil - Write Java Source Code to: .../classes//com/even/test/Sum.java 16:12:03.544 DEBUG com.even.tools.ClassUtil - Compile Java File:.../classes//com/even/test/Sum.java 16:12:03.545 DEBUG com.even.tools.ClassUtil - Load Class[com.even.test.Sum] by sun.misc.Launcher$AppClassLoader73d16e93 16:12:03.547 DEBUG com.even.test.ClassUtilTest - {f110.0, f220.0, f330.0} 16:12:03.547 DEBUG com.even.test.ClassUtilTest - (30*f120*f250*f3)/100 22.0
http://www.huolong8.cn/news/27388/

相关文章:

  • 婚纱摄影类网站模板中国国建设监理协会网站
  • 招个网站建设维护采购招标网
  • 做网站卖产品投资大嘛购物网站怎么建立
  • php网站开发ppt实时视频网站怎么做
  • 自己设计好的网站怎么设置访问做外贸的人经常用什么网站
  • 手机商城网站模板个人备案经营网站备案
  • 鄞州区建网站外包租房网站开发需求文档
  • 网站开发会什么软件帮做ppt网站
  • 建设摩托车公司官方网站电子商务网站开发方式
  • 河北网站建设联系电话wordpress lampp建站
  • 做设计的地图网站有哪些济南网络平台设计
  • 网站的建设目标是什么意思wordpress首页文章缩略图
  • 山东省住房城乡建设厅网站首页耒阳市古雍网站建设店
  • 做网站手机适配需要加价吗成都水高新区建设局官方网站
  • 天津网站优化网站搭建工作室加盟
  • 科技公司企业网站源码天津企业建站系统
  • 常平建设局网站wordpress只备份数据
  • 小游戏网站开发者杭州建设网址
  • 屏山县龙华镇中心村建设招标网站微信公众号制作网站有哪些
  • 山西网站建设服务好我要做自媒体要怎么开始
  • html5官方网站开发流程哪个网站设计好
  • 做庭院的网站银川seo优化
  • 一个人可以建设网站吗公司网站建设的视频教程
  • 做生意网站泰安网络犯罪案件
  • 什么网站可以做海报网站排名网站优化
  • 验证网站所有权用手机做空间建网站
  • 深圳骏域网站建设专家88WordPress 先登录
  • 动易网站系统黄骅市天气预报最新
  • 产品设计培训机构排名空调seo是什么意思
  • 有什么做糕点的视频网站建设部人事考试网站官网