gpt4 book ai didi

java - java 包会影响运行时行为吗?

转载 作者:行者123 更新时间:2023-12-01 15:43:02 24 4
gpt4 key购买 nike

如果我在包a.b.c中定义了一个java类,但我只是将编译后的类文件放在c:\,并且使用URLClassloader来加载它,会出现错误吗?

编辑-------------------------------------------------------- ---------------

package amarsoft.rcp.base.util.test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class JavaCompolierDemo {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String source = " package a.b.c; public class Test { public static void main(String args[]) { System.out.println(\"hello\"); } }";

// Save source in .java file.
File root = new File("C:\\java\\");
root.mkdir();
File sourceFile = new File(root, "\\Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();

// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
}

}

当我运行上面的代码时,定义的包a.b.c不会生成为目录a\b\c,Test.class将在c:\Test.class中

最佳答案

简短:

更长:您确实需要将工作目录设置为文件夹a
所在的文件夹(其中包含b)。否则它会按照您的要求给出错误。

<小时/>

编辑后我的编辑:
您需要自己创建包,当然是通过创建文件夹。并将您要编译的源文件放入该包中。

 File sourceFile = new File(root, "a\\b\\c\\Test.java");
sourceFile.getParent().mkdirs();
FileWriter fw = new FileWriter(sourceFile);
fw.write(source);
fw.flush();
fw.close();

....

如果您尝试编译 Java 源代码,但该源代码不在正确的包中,它将无法工作,并且您应该收到编译错误。我必须承认我从来没有这样编译过源代码。

关于java - java 包会影响运行时行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7695939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com