当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java运行时编译和加载类

发表于: 2012-01-04   作者:cisumer   来源:转载   浏览次数:
摘要: 1、ant javac 的原理sun.tools包下包含了很多命令的java实现,javac的使用见下例://sun.tools.javac.Main 该类负责实现javac命令,推荐使用反射方式创建该类实例(ant中就是用的反射)。sun.tools.javac.Main compiler =        &nbs

1、ant javac 的原理
sun.tools包下包含了很多命令的java实现,javac的使用见下例:
//sun.tools.javac.Main 该类负责实现javac命令,推荐使用反射方式创建该类实例(ant中就是用的反射)。
sun.tools.javac.Main compiler =
                    new sun.tools.javac.Main(System.err, "javac");
//编译后的class文件保存的地址
File dest=new File("classes");
dest.mkdir();
//开始编译,参数是执行javac命令是后面所根的参数,注意javac命令后参数以空格分隔,在此使用一个字符串数组保存。
compiler.compile(new String[]{"-classpath",".","-sourcepath",new File("temp").getAbsolutePath(),"-d","classes",""});

2、动态加载类
通过上面的方法动态的编译java类,在程序中使用的时候还需要进行加载。
所有的java类都是通过ClassLoader的对象来加载。在此可以使用其子类URLClassLoader加载:
//使用当前项目的路径为根路径
File baseDir=new File("");
URL url=new URL("file:/"+baseDir.getAbsolutePath()+"/classes/");
//通过指定class文件的路径告诉ClassLoader从何加载类
URLClassLoader loader=URLClassLoader.newInstance(new URL[]{url},ClassLoader.getSystemClassLoader());
//加载类,返回该类得Class实例。效果同Class.forName()。
clazz=loader.loadClass("org.jigger.Simple");

注意:使用自定义ClassLoader,无法使用Class.forName获取类对象,即无法使用系统类加载器加载该类

Java运行时编译和加载类

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
平时我们运行一个Java类的时候,我们可以加入一些命令行参数,如verbose 比如我们运行java -verbose
最近在做java动态加载这方面的工作,起初也遇到了很多困难。网上关于这方便的东西很零散,为了便于日
1,什么是类加载器? 加载类的工具. 2,类加载器有什么作用? 当程序需要的某个类,那么需要通过类加载器
本文原文为 http://blog.csdn.net/crazycoder2010/article/details/6288732 java ClassLoader的学习
转:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 类加载器是 Java 语言的一个创
首先抛出几个自己写程序经常会产生疑问的问题。 1、java类在什么时候加载? 2、类加载机制? 3、如
问题From: 前几天开发一个需求,涉及到industry_center服务化的改造,在预发布验证时,发现服务化
jvm classLoader architecture : a, Bootstrap ClassLoader/启动类加载器 主要负责jdk_home/lib目录
系统提供的类加载器主要有下面三个: 引导类加载器(bootstrap class loader):它用来加载 Java 的
在csdn看到一篇文章,原文地址http://bbs.csdn.net/topics/390973527。 java代码: public class St
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号