在java.lang.Integer类中方法parseInt(String s)和valueOf(String s, int radix)的定义如下:
(1)
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
以及:
(2)
public static Integer valueOf(String s, int radix) throws NumberFormatException {
return Integer.valueOf(parseInt(s,radix));
}
问题:为什么(2)中(return那一行)的valueOf方法的调用要在前面用上Integer类型?
或者说,直接改写成这个样子又会什么问题呢?改写:
public static Integer valueOf(String s, int radix) throws NumberFormatException {
return valueOf(parseInt(s,radix));
}
在或者说,(1)中(return那一行)的parseInt方法的调用需要在前面加上Integer类型吗?
请各位指教指教
问题补充
类方法与实例方法的区别是:方法根据是否有static修饰可以分为类方法和对象方法(实例方法)。 访问时,类方法可以直接通过类名来引用,而实例方法必须通过对象名来访问,也就是说要想使用实例方法,就必须创建一个该类的对象。
再看看源码的java.lang.Integer类的定义:
package java.lang;
public final class Integer {
...
...
public static int parseInt(String s) { //方法(1)
return parseInt(s,10);
}
public static Integer valueOf(String s, int radix) { //方法(2)
return Integer.valueOf(parseInt(s,radix));
}
public static int parseInt(String s, int radix) {//方法(3)
...
...
}
public static Integer valueOf(int i) {//方法(4)
...
}
}
从上面来看,很明显,方法(1)调用的方法(3)parseInt(String s,int radix)是static修饰的;方法(2)调用的方法(4)valueOf(int i)也是static修饰的;照理来说,它们都是实例方法?!!
再者,从上面看来,这些都是类内的方法调用,应该不用理会什么类方法或者实例方法吧。
Java源码的一个小问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- JavaHero080 2009-12-21 05:04关注
[quote]从上面来看,很明显,方法(1)调用的方法(3)parseInt(String s,int radix)是static修饰的;方法(2)调用的方法(4)valueOf(int i)也是static修饰的;照理来说,它们都是实例方法?!!
[/quote]
他们都是static修饰的,所以都是[b]类方法[/b]
在这里,调用类方法,都应该使用Integer.method...但是因为都是在Integer类的内部,所以前面的Integer.可以省略。[quote]再者,从上面看来,这些都是类内的方法调用,应该不用理会什么类方法或者实例方法吧。
[/quote]
从类内调用,前面不用加Integer.可以直接调用类方法(static),不用加this.可以直接调用实例方法(非static)。[b]但是[/b],从类方法的内部,只能调用类方法而不能调用实例方法,因为在类方法的内部是没有this一说的。而在实例方法的内部则随便调用。加上Integer.或者this.可以更好的区分,不加也是可以通过编译的(编程的规范是非常显然不会搞混的可以不加,否则就加)。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报