如果直接写一个java.lang.String类,并写一个main方法,即
(改图为转载网络中的)
运行之后会抛一个异常:
错误: 在类 java.lang.String 中找不到主方法, 请将主方法定义为:
public static void main(String[] args)
java类的加载模式是“双亲委托模型”
先找Bootstrap ClassLoader----系统的
再找Extension ClassLoader----扩展的
最后找App ClassLoader ----容器中的jar包(例如:程序中的lib目录下的、tomcat中的)
三个中,只要有一个找到,就可以进行类的加载,再进行验证、初始化等等操作
如果最后都没有找到,会抛出ClassNotFoundException异常
所有:类加载中,先找到Bootstrap 中已经存在了java.util.String类了。就直接返回。但是在运行函数main的时候,发现系统类中,并没有main方法,所以就会抛出异常
String 的值是常量池中的值,所以采用“==”来比较是可以得到true的。但如果是用new String这种变量来比较,则不同,因为new一个对象的地址是放在堆里面的。所以就会得到false
当我们创建String s1 = "abc"这样一个对象之后,"abc"就存储到了常量池(也可叫做字符串池)中,
当我们创建引用String s2 = "abc" 的时候,Java底层会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,