`
cisumer
  • 浏览: 82110 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Java运行时编译和加载类

    博客分类:
  • J2SE
阅读更多

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类

    在Java编程中,动态编译和加载类是一种高级特性,它允许程序在运行时编译源代码并将其加载到Java虚拟机(JVM)中。这种能力对于开发灵活性高、可扩展性强的应用程序非常有用,比如在服务器端处理动态生成的代码、...

    Java类动态加载(一)——java源文件动态编译为class文件

    通过自定义ClassLoader和利用`JavaCompiler` API,我们可以实现Java源文件的动态编译和加载,从而实现程序运行时的灵活扩展。在实际应用中,我们需要注意类加载的性能影响,以及类加载器之间的隔离问题,以确保系统...

    java 动态编译.java文件,动态运行类 _1.3

    在Java编程中,动态编译和运行类是一项重要的技术,特别是在需要实时更新代码或实现热部署的场景下。本文将详细讲解如何在Java中实现动态编译.java源代码文件并执行编译后的类。 首先,我们需要理解Java的编译过程...

    Java语言-动态编译代码并热加载类

    在Java编程中,动态编译代码并热加载类是一项重要的技术,它允许程序在运行时修改或添加新的类,而无需重启应用。这种能力对于快速迭代开发、调试和性能优化非常有用。本主题将深入探讨Java中的动态编译与热加载机制...

    java编译和运行

    此外,Classpath变量用于指定Java加载类库的位置,包括当前目录(用"."表示)和上一级目录(用".."表示)。如果未设置Classpath,Java会默认搜索当前目录。 Java与C/C++相比,具有显著优势。C/C++需要程序员手动...

    springboot+java类热加载

    在Java中,类加载器负责查找并加载类到Java虚拟机中。我们可以通过自定义类加载器来实现热加载。例如,`MemoryClassLoader.java`可能就是一个自定义类加载器的实现,它可以在内存中动态加载或更新类。 **JarinJAR**...

    java 动态编译.java文件,动态运行类

    6. **运行编译后的类**:如果编译成功,我们可以使用`ClassLoader`加载新生成的类并实例化。注意,类加载器应指向编译输出的目录。 ```java URLClassLoader classLoader = new URLClassLoader(new URL[]{new File(...

    编译和运行java程序的小工具

    总的来说,“编译和运行Java程序的小工具”是一个便捷的开发辅助软件,它通过集成编译和运行过程,使得Java开发变得更加轻松快捷。无论是新手学习还是资深开发者快速测试,都能从中受益。如果你是Java开发者,不妨...

    Java程序的编译、加载与执行.zip

    总结,Java程序的编译、加载与执行是一个复杂而高效的过程,涵盖了编译器、JVM、类加载器、解释器、垃圾收集器等多个组件的协同工作。理解这一过程对于优化Java应用程序的性能和解决运行时问题至关重要。

    java 动态编译.java文件,动态运行类 _1.2

    总结来说,Java的动态编译涉及使用`JavaCompiler`接口和`StandardJavaFileManager`来调用Javac,以及在运行时加载和实例化新生成的类。这个功能为开发者提供了更大的灵活性,可以在运行时根据需求编译和执行代码。在...

    Java动态编译Java代码,运行在内存中,并执行

    *1.创建 URLClassLoader 类加载器 * 2.获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 ...创建DynamicClassLoader来加载类 ,defineClass这个方法

    java的编译路径与运行路径

    运行路径是指Java虚拟机(JVM)在运行时查找并加载类文件的路径。当执行`java`命令时,JVM会遍历类路径中的所有目录和JAR文件来寻找所需的类。 在直接运行一个类(如`java HelloWorld`)时,JVM会从当前目录(".")...

    javac编译成功用java运行class文件出现“找不到或无法加载主类”的问题解决起来很简单.doc

    "解决 Java 编译成功后运行 Class 文件出现“找不到或无法加载主类”的问题" 在 Java 开发中,经常会遇到一个问题,即 javac 编译成功后,用 java 运行 Class 文件却出现“找不到或无法加载主类”的错误信息。这种...

    java jar反编译工具 java Class反编译工具

    总的来说,JD-GUI作为一款强大的Java反编译工具,为开发者提供了一种有效的方式来探索和学习已编译的Java代码,帮助他们解决问题、提高代码理解力,从而提升开发效率。无论你是初学者还是经验丰富的开发者,JD-GUI都...

    java动态编译java源文件

    Java动态编译指的是在程序运行时将Java源代码编译为字节码并加载到Java虚拟机(JVM)中的过程。这种技术在许多场景下非常有用,例如在开发环境中进行快速迭代、AOP(面向切面编程)或运行时代码生成等。Java的`javax...

    动态编译字符串成java,并且添加class到jvm

    在Java编程中,动态编译字符串成Java代码并将其加载到JVM(Java虚拟机)是一种高级技巧,常用于运行时代码生成、元编程或插件系统等场景。这一技术的核心在于利用Java的反射API和Java Compiler API。下面将详细阐述...

    动态生成、编译、运行java文件

    `Class.forName()`用于加载类,`Class.newInstance()`创建类的实例,`Method`和`Constructor`类则用于访问和调用类的方法和构造器。 在实际应用中,动态生成、编译和运行Java代码的示例包括: 1. **元编程**:例如...

    Java 运行时监控

    其次,"Java运行时监控,第2部分 编译后插装和性能监控"涉及到动态编译和AOP(面向切面编程)技术。编译后插装是一种在程序运行时动态插入监控代码的技术,例如使用ASM或ByteBuddy库。这种技术可以无侵入地收集代码...

    Java之——类热加载

    传统的Java应用程序在启动时,由JVM(Java虚拟机)通过类加载器将类加载到内存中,一旦加载完成,除非程序退出,否则这些类通常不会被重新加载。然而,在开发过程中,我们可能希望在不重启应用的情况下,对已加载的...

Global site tag (gtag.js) - Google Analytics