关于自己写的java.lang.String能不能被加载的问题

首先自己在包中写的名字包含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();
    }
}

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/82019820
今日推荐