livem 2009-12-20 13:00
浏览 178
已采纳

Java源码的一个小问题

在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修饰的;照理来说,它们都是实例方法?!!
  再者,从上面看来,这些都是类内的方法调用,应该不用理会什么类方法或者实例方法吧。

  • 写回答

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.可以更好的区分,不加也是可以通过编译的(编程的规范是非常显然不会搞混的可以不加,否则就加)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?