`
cisumer
  • 浏览: 81026 次
  • 性别: 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语言-动态编译代码并热加载类,js热加载

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

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

    springboot+java类热加载

    springboot 、java类热加载、jarinjar、动态编译、自动引用依赖

    JAVA类加载

    Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 .class 文件按照需求和一定的规则加载进内存,并组织成为一个完整的 Java 应用程序。 Java 语言把每个单独的类 ...

    JAVA 运行环境安装包

    Java运行环境(Java Runtime Environment,JRE)是一种用于执行Java程序的软件环境。它包含了Java虚拟机(Java Virtual Machine,JVM),以及Java核心类库和运行时所需的其他组件。 JRE的主要作用是提供Java应用...

    深入理解java类加载机制

    我们将详细介绍Java虚拟机中类的生命周期并探讨类加载时的各种问题和应急措施。此外,我们还会探讨Java程序的类加载器和双亲委派机制,以及自定义类加载器和类卸载的实现原理和应用方法。 总的来说,本资源将为Java...

    Java类文件加密运行演示例子.rar

    其实,Java也是可以对类文件进行加密,然后由JVM直接加载的,加密方法可以选用高强度的算法,然后中间不经过任何转换,由JVM直接加载,在JVM中进行解密并加载类,这样就能有效避免类文件暴露从而被破解的问题。

    详解JAVA类加载机制(推荐)

    JAVA源码编译由三个过程组成: 1、源码编译机制。 2、类加载机制 ...系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类,当运行某个java程序时,会启动一个java虚拟机进程,两次运行

    Java类加密程序

    <br>运行方式 运行时,加密后的CLASS文件要能正常加载,需要使用我们提供的动态库hidea.dll。执行java时带上参数 -agentlib:<动态库文件所在路径>\hidea 注意:不要加文件后缀.dll,直接使用文件的...

    java加载类与反射机制

    Java 程序在运行期间可以动态加载、解析和使用一些在编译阶段并不确定的类型数据,这一机制被称为反射(Reflection)。反射库(reflection library)提供了一个非常丰富且精心设计的工具类,以便编写能够动态操纵Java...

    Java动态生成代码并编译载入.pdf

    有时候需要在运行时根据模板和数据动态生成 Java 代码,然后对其进行编译生成 Class 文件,然后再将这些类加载 进去,并使用反射来创建对象。

    JVM 运行时数据区域,垃圾回收机制,类加载机制三大功能详解.docx

    VM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 运行时数据区域: 在运行时数据区里存储类Class文件元数据...类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    Java中Class类工作原理详解

    在运行时,当我们想生成这个类的对象时,运行这个程序的 Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载。如果尚未加载,JVM就会根据类名查找.class文件,并将其载入。 一旦某个类的Class对象被载入内存...

    java虚拟机规范高清中文版本(java SE 8版本)

    第1章 :简单地介绍了Java虚拟机的历史并... 第5章:定义了Java虚拟机启动以及类和接口的加载、链接和初始化的过程; 第6章:定义了Java虚拟机指令集; 第7章:提供了一张以操作码值为索引的Java虚拟机操作码助记表。

    Java类文件加密专家

    agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录>\JLoader ...

    Java虚拟机类加载机制浅谈

    JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎。  虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、准备、解析和初始化,终会形成可以被虚拟机使用的Java类型,这是一个虚拟机的类...

    深入理解Java虚拟机精华知识点

    从架构角度来看,Java虚拟机主要包括类加载器、运行时数据区、执行引擎、垃圾收集器等部分。类加载器负责将字节码文件加载到内存中,运行时数据区用于存储程序执行时所需的数据,执行引擎则负责执行字节码文件,而...

    java类加密工具v2.1

    运行时,要能正确的加载加密后的class文件, 必须使用我们提供的动态链接库classloader.dll(windows操作系统)或者libclassloader.so(Linux、Unix操作系统)。 执行java时带上参数-agentlib:<动态文件所在路径>\...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

Global site tag (gtag.js) - Google Analytics