日期:2014-05-19  浏览次数:20685 次

java 自定义String类,为什么会默认执行自定义的String类呀
在com.test包中 定义String类,重写toString()放回"my String!"
  public static void main(java.lang.String[] args) {
  String str=new String();
  System.out.println(str.toString());
  }
执行输出为 my String
根据java虚拟机类装载器的装载原理不应该会执行我自定义的String类
应该会先去启动类装载器中装载String类,如果装载到 就不会再装载我自定义的String
类了

------解决方案--------------------
如果你的String在你的包下。当然会先找你的。
如果没有就去找classpath下的
------解决方案--------------------
String类时final修饰的.去API看看吧.
------解决方案--------------------
你试试定义到相同包看看。其实你们是不同的类。
------解决方案--------------------
在com.test包中 定义String类?
String是final的,你自己的String咋个能继承API的String呢
------解决方案--------------------
包名都不相同,类的名字是要包含包的名称的。虽然你的类叫String,但是与java.lang.String是不相同的
------解决方案--------------------
java 默认会先在你当前的包下找String类,找不到再去它自带的包下找
------解决方案--------------------
最根本的原因,你这里其实是
com.test.String str=new com.test.String();
和java.lang.String不是一个类
------解决方案--------------------
首先在你当前的包下找String类,找不到再到自带的包下找。
------解决方案--------------------
up
------解决方案--------------------
你的String跟API里的String不是同一个类!!!!!!
------解决方案--------------------
请不要误导楼主,类的加载顺序请看ClassLoader的原理,是递归委托parent去加载的

这里根本就是2个不同的类,“默认在当前包找”这个是想当然的吧
------解决方案--------------------
看看你 import的时候 导入的是哪个包咯