在内存中编译和执行java源文件

在内存中编译和执行java源文件,java,compilation,javac,.class-file,Java,Compilation,Javac,.class File,假设我有一个字符串,其中包含.java文件的内容。是否有任何API允许我将此源文件编译成虚拟的.class文件(即生成内容并将其存储在内存中,而不是在磁盘上创建实际的物理.class文件)?然后这个“虚拟的”.class将被加载并在JVM中执行 编辑1:我想这样做的唯一原因是,有时我的应用程序可能没有写入权限。为此使用。我认为诀窍在于定义一个自定义文件。Java确实有一个动态编译文件的选项,但我不知道有一个选项不会将类文件持久化到磁盘。您可以始终使用类加载器动态加载这些类,然后使用它们。您可以通

假设我有一个
字符串
,其中包含
.java
文件的内容。是否有任何API允许我将此源文件编译成虚拟的
.class
文件(即生成内容并将其存储在内存中,而不是在磁盘上创建实际的物理
.class
文件)?然后这个“虚拟的”
.class
将被加载并在JVM中执行

编辑1:我想这样做的唯一原因是,有时我的应用程序可能没有写入权限。

为此使用。我认为诀窍在于定义一个自定义文件。

Java确实有一个动态编译文件的选项,但我不知道有一个选项不会将类文件持久化到磁盘。您可以始终使用
类加载器
动态加载这些类,然后使用它们。您可以通过重写该方法在内存中加载类

< P>可选地,这个文件管理器可以将兄弟姐妹视为一个提示。 将输出放在何处。这个提示的确切语义是 未指明。例如,JDK编译器javac将放置类 与原始源文件位于相同目录中的文件,除非 提供类文件输出目录。为了促进这种行为, 当 调用此方法


另一种选择是使用这样的解释器来为您运行java代码。它执行类似脚本的代码,并且可以在repl模式下工作。

可能不会,但您可以(至少在Linux上)在无磁盘文件系统(例如
tmpfs
)上创建该文件,这几乎与在内存上工作一样快。也许您可以编写自己的
类加载器
“我的应用程序可能没有写权限。”这是因为它被Java或DYM OS安全设置沙盒了吗?@andrewhompson两者都有。它可能会被Java沙盒,因为我的应用程序将从互联网上下载。因为用户可能会决定将jar文件(我的应用程序)放在Windows中的某个目录中,如C:\“从internet下载”。因此,您指的是小程序或JWS应用程序。?另外,它们是Java提供
SecurityManager
的唯一工具。很抱歉,我误解了您的问题。不,它是桌面应用程序,因此写入权限仅由操作系统设置引起。