首先自己在包中写的名字包含java,就不能加载, 报一下错误!
import org.junit.Test;
public class TestJava {
@Test
public void fun(){
System.out.println("hello wrold!!");
}
}
出现错误:
java.lang.SecurityException: Prohibited package name: java
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:658)
at java.lang.ClassLoader.defineClass(ClassLoader.java:794)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
所以自己写的java.lang.String也肯定不会被执行;自己写的类的package名称不可以”java”开头,否则不会被类加载器加载。对于自己写java.lang.String,肯定也不会被加载成功了,即使是自己写的类加载器。而后来我自己写的String类(无package),成功被加载。其实我认为,这时候的类名叫做”String”,只是非常普通的一个名字而已,因为所属的包不同,自己写的String和java类库中的java.lang.String并不冲突。
测试String类:
package testjava;
public class String{
public void string(){
System.out.println("hello hangzhou!!");
}
}
利用别的方法调用Sring类:
package testjava;
import org.junit.Test;
public class testjava {
@Test
public void fun() throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class clazz=Class.forName("testjava.String");
String s=(String) clazz.newInstance();
s.string();
}
}