`

动态生成编译运行java类

    博客分类:
  • java
 
阅读更多

本代码并非原创,是在我以前的学习笔记里面翻阅出来的,是csdn里面一位叫路人甲的朋友在论坛里面的回复,也许在这里发出来会帮助到很多朋友.其实十分简单就不加注释了,一共就3步,生成java文件,编译java文件,运行java类,

 

package  com.syj;

import  java.io.File;
import  java.io.FileWriter;
import  java.lang.reflect.Method;

public   class  CreateClass {
    
private   static  String CLASS_NAME  =   " CreateClassTest " ;
    
private   static  String CLASS_FILE  =  CLASS_NAME  +   " .java " ;

    
public   static   void  main(String args[]) {
        CreateClass mtc 
=   new  CreateClass();
        mtc.createClass();
        System.out.println(
" javac  "   +  CLASS_FILE);
        mtc.compileClass();
        System.out.println(
" java  "   +  CLASS_NAME);
        mtc.runClass();
    }

    
public   void  createClass() {
        
try  {
            
new  File(CLASS_FILE).delete();
            FileWriter aWriter 
=   new  FileWriter(CLASS_FILE,  true );
            aWriter.write(
" public   class    "   +  CLASS_NAME  +   " { " );
            aWriter.write(
" public   void   println()   { " );
            aWriter.write(
" System.out.println("= "   +  CLASS_NAME  +   " ="); " );
            aWriter.write(
" }} " );
            aWriter.flush();
            aWriter.close();
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }

    
public   void  compileClass() {
        String filePath 
=   new  File(CreateClass. class .getClassLoader()
                .getResource(
"" ).getFile()).getAbsolutePath();
        String[] source 
=  {  " -d " , filePath,  new  String(CLASS_FILE) };
        System.out.println(
" javac out: "
                
+  com.sun.tools.javac.Main.compile(source));
    }

    
public   void  runClass() {
        
try  {
            Class params[] 
=  {};
            Object paramsObj[] 
=  {};
            Class testClass 
=  Class.forName(CLASS_NAME);
            Object iClass 
=  testClass.newInstance();
            Method thisMethod 
=  testClass.getDeclaredMethod( " println " , params);
            thisMethod.invoke(iClass, paramsObj);
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }
}

需要引入%JAVA_HOME%/lib/tools.jar;这也是我遇到的tools.jar的唯一一个用途呵呵.

分享到:
评论

相关推荐

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

    在IT行业中,动态生成、编译以及运行Java文件是一项重要的技术,它允许程序在运行时创建新的Java代码并执行。这种技术广泛应用于元编程、插件系统、代码自动生成等场景,极大地提高了软件的灵活性和可扩展性。下面将...

    java动态编译指定java文件且将java文件生成jar

    本教程将深入讲解如何实现这个过程,主要关注`java动态编译`和`将class生成jar`这两个关键步骤,同时会涉及到`JavaCompiler` API的使用。 首先,让我们了解`JavaCompiler` API。这是Java标准库中的一部分,位于`...

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

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

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

    在Java编程中,动态编译和运行类是一项重要的能力,特别是在需要实时更新代码或实现热部署的场景下。本文将深入探讨如何利用Java的API来动态编译.java源文件,并执行编译后的类。 首先,Java的`javac`命令行工具是...

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

    在Java编程环境中,有时我们需要在程序运行时动态地编译.java源代码文件并执行新生成的类。这种功能在处理代码生成、插件系统或测试自动化等场景中非常有用。本篇文章将深入探讨如何实现Java的动态编译与运行。 1. ...

    动态编译、加载java类

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

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

    Java动态生成代码并编译载入是一个高级的编程技术,主要用于那些需要在应用程序运行时根据某些模板和数据动态地生成、编译和加载Java代码的场景。这种技术在需要高度定制化处理或是运行时参数化生成业务逻辑的系统中...

    编译运行java带jar包

    在Java编程环境中,有时...总结来说,编译和运行带有JAR包的Java程序涉及编译源代码、设置类路径、创建MANIFEST.MF文件指定主类、打包成JAR并最后运行JAR。通过使用IDE或构建工具,这个过程可以变得更加便捷和高效。

    命令行编译和运行java类

    ### 命令行编译和运行Java类 在日常的软件开发过程中,开发者经常会遇到需要在命令行环境下编译和运行Java程序的情况。本文将详细介绍如何在DOS(Disk Operating System)环境下,通过命令行工具编译和运行Java程序...

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

    Java动态生成代码并编译载入是Java编程中的一项高级技术,它允许程序在运行时创建新的类或接口,然后即时编译并加载到当前的Java虚拟机(JVM)中。这种技术主要依赖于Java的反射API和Java的编译器API(javac)或者更...

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

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

    java动态编译java源文件

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

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

    在Java编程环境中,有时我们需要在程序运行时动态地编译.java源代码文件并执行新编译的类。这种能力在诸如代码热更新、插件系统或者测试自动化等场景下非常有用。本文将深入探讨如何在Java中实现动态编译与运行。 ...

    JAXB 利用xsd文件生成java类

    - 运行`xjc`命令,如`xjc person.xsd`,生成Java类。 - 使用生成的Java类进行序列化和反序列化操作。 7. **JAXB的优势**: - 自动化:JAXB自动将XML映射到Java对象,减少了手动编码的工作量。 - 验证:基于XSD...

    java .class 类反编译软件

    在使用XJad进行反编译时,用户只需将`.class`文件拖入软件界面,XJad会自动进行解析并尝试生成对应的`.java`源文件。这个过程可能会涉及到对Java字节码指令的理解,如GETSTATIC、INVOKESPECIAL等,以及对类、方法、...

    Java在线编辑编译运行示例

    "Java在线编辑编译运行示例"是指利用网络平台提供的工具,可以直接在浏览器上编写、编译和运行Java代码,无需本地安装任何环境。这种方式方便了初学者学习和开发者快速测试代码,降低了入门门槛。 首先,我们来详细...

    java 动态编译打包 动态编译可以用于实现动态代码生成、动态加载、插件化等功能

    综上所述,Java动态编译打包是一种强大的技术,它使Java应用能够灵活地适应变化,实现动态代码生成、动态加载和插件化。通过理解和熟练运用这些技术,开发者可以创建出更具弹性和可维护性的软件系统。

    JAVA通过实体生成数据库表

    反射是Java语言的一个强大特性,它允许运行中的Java程序动态获取类的信息(如类名、属性、方法等)并进行操作。在实体类生成数据库表的过程中,反射被用来读取实体类的元数据,如字段名、类型等,然后根据这些信息...

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

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

Global site tag (gtag.js) - Google Analytics