toString();具体是怎么实现的

paulkim 2010-03-18 01:22:00
我想知道有些java代码,一直到最后的话,只有toString(), ArrayList(), 等这样,
我想知道这些事具体怎么实现的。想知道这些代码是怎么写的。
有谁知道的话,能共享吗?
...全文
324 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 paulkim 的回复:]
哦,知道了。谢谢。那就是我们只能够知道这里,其他的部分是由jvm管理的意思吧?
[/Quote]
算是吧,实际我们编写的程序与操作系统之间夹了个jvm这一层,而不是直接对接,而jvm向下作出兼容各种操作系统的版本,向上提供统一的服务环境,才使得java可以一处编译处处运行。
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
toString方法已经在Object类里实现了呀。
paulkim 2010-03-18
  • 打赏
  • 举报
回复
哦,知道了。谢谢。那就是我们只能够知道这里,其他的部分是由jvm管理的意思吧?
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
这几个方法都是在本地实现的方法,与操作系统有关,我们只管声明调用即可,具体是什么操作系统,该怎么调用,是jvm替我们隔离和决定的。
paulkim 2010-03-18
  • 打赏
  • 举报
回复
他还使用了toString的方法,上面的怎么会继承toString 方法啊,object.java不是最上面的吗。而toString不是吧?
paulkim 2010-03-18
  • 打赏
  • 举报
回复
我可能说错了,我的意思是里面的wait(),finalize(), notifyAll()。。。这些方法。
不知道这些是在哪里定义的。
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
没看错吧。。。
源码中Object没有继承任何类。
他的好多方法都是native本地的。
paulkim 2010-03-18
  • 打赏
  • 举报
回复
那你继承我,我继承你,岂不会绕来绕去?难道我理解错了?
paulkim 2010-03-18
  • 打赏
  • 举报
回复
可是在java.lang下的object.java里有很多继承了或者throw了很多方法,那object也是继承了别的?
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
Object不就是java.lang下的object.java吗
serializable接口属于标识性接口,没有任何方法约定,任何类实现该接口,都会被jvm当成是可以被序列化、串行化的类。
rmi规范里的java.rmi.Remote接口也属于类似的标识性接口。
BearKin 2010-03-18
  • 打赏
  • 举报
回复
不同的类里有不同的toString实现方法 比如Date是输出个日期

public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}

而List则是打印包含的元素的toString

public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("[");

Iterator<E> i = iterator();
boolean hasNext = i.hasNext();
while (hasNext) {
E o = i.next();
buf.append(o == this ? "(this Collection)" : String.valueOf(o));
hasNext = i.hasNext();
if (hasNext)
buf.append(", ");
}

buf.append("]");
return buf.toString();
}

实现这个方法的目的通常都是为了便于调试
paulkim 2010-03-18
  • 打赏
  • 举报
回复
最大的类是java.lang下的object.java吗?那里面也有很多方法啊,看里面又有throwable,又有Serializable,可到了java.io下的serializable.java的时候,就只有,public interface Serializable {
}
感觉有点晕啊。
这里的最顶端的object在哪里啊?是怎么个流程啊。
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 paulkim 的回复:]
刚才我看了,找了一个进去,一直到package java.lang.reflect文件夹里了。
比如说 array.java的文件,这个文件里面有很多function,可是这个文件里面没有import任何东西,这些是怎么运行的啊?有什么原理吗?
[/Quote]
没有import,代表这个类中所用的类均为同包或java.lang下的。
aSysBang 2010-03-18
  • 打赏
  • 举报
回复
所有的类都是object的子类
而object有toString()方法
其他子类(如date) 都会重写toString()方法
建议看源代码
paulkim 2010-03-18
  • 打赏
  • 举报
回复
刚才我看了,找了一个进去,一直到package java.lang.reflect文件夹里了。
比如说 array.java的文件,这个文件里面有很多function,可是这个文件里面没有import任何东西,这些是怎么运行的啊?有什么原理吗?
dinghun8leech 2010-03-18
  • 打赏
  • 举报
回复
去jdk的安装目录,里面有个src.zip。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧