你这个问题提得不错。
如果我在a.java文件中想调用java.lang.String类
而我又把a.java 文件中加上
package java.lang
会出现什么问题呢?
测试如下程序
package java.lang;
public class a{
public static void main(String[] args){
System.out.println("hello");
}
}
测试结果:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.defineClass(ClassLoader.java:495)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:246)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
假设我在类Hello中:import Log.log;
类Hello和Log都是自己写的。
1)编写java文件
文件Hello.java
package Hello;
import Log.*;
public class Hello{
public static void main(String[] args){
System.out.println("hello");
Log log=new Log("hello");
log.printit();
}
}
文件Log.java
package Log;
public class Log{
private String s;
public Log(String str){
s=str;
}
public void printit(){
System.out.println(s);
}
}
2)编写SetEnv1.bat
set JAVA_HOME=c:\j2sdk1.4.0
set PATH=c:\j2sdk1.4.0\bin
3)编译Log.java并打包成Log.jar
md temp//临时目录存放Log.class
javac -d temp Log\*.java
cd temp
jar cvf Log.jar Log
cd..
4)编写SetEnv2.bat
set JAVA_HOME=c:\j2sdk1.4.0
set PATH=c:\j2sdk1.4.0\bin
set CLASSPATH=.;C:\Hello\Lib\Log.jar