关于java中一些小技巧

来源:互联网 发布:apache webservice 编辑:程序博客网 时间:2024/05/24 23:11

如果直接写一个java.lang.String类,并写一个main方法,即


(改图为转载网络中的)

[java] view plain copy
  1. package java.lang;  
  2.   
  3. public class String {  
  4.   
  5.     public static void main(String[] args) {  
  6.         System.out.println("Hello String");  
  7.     }  
  8.   
  9. }  


运行之后会抛一个异常:

错误: 在类 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指向这个值,



原创粉丝点击