0 0

再续Java源码的小问题解答5

  首先谢谢蔡华江的解答。

  不过,你说valueOf()是类方法,parseInt()是普通的实例方法,我觉得并不是这样的。

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

问题补充:
  首先谢谢蔡华江的解答。

  不过,你说valueOf()是类方法,parseInt()是普通的实例方法,我觉得并不是这样的。

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

问题补充:
  首先谢谢蔡华江的解答。

  不过,你说valueOf()是类方法,parseInt()是普通的实例方法,我觉得并不是这样的。

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

问题补充:
  首先谢谢蔡华江的解答。

  不过,你说valueOf()是类方法,parseInt()是普通的实例方法,我觉得并不是这样的。

  类方法与实例方法的区别是:方法根据是否有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修饰的;照理来说,它们都是实例方法?!!
  再者,从上面看来,这些都是类内的方法调用,应该不用理会什么类方法或者实例方法吧。
2009年12月20日 01:45

3个答案 按时间排序 按投票排序

0 0

其区别在于(与静态与否无关,更非笔误):
Integer.valueOf(String)返回Integer对象;
而Integer.parseInt(String)返回int。


不过自Java5开始引入了基本数据类型的自动装箱/拆箱,这两个方法的区别不是很大。

以下摘自java.lang.Integer的源代码:

    /**
     * Parses the string argument as a signed decimal integer. The 
     * characters in the string must all be decimal digits, except that 
     * the first character may be an ASCII minus sign <code>'-'</code> 
     * (<code>'&#92;u002D'</code>) to indicate a negative value. The resulting 
     * integer value is returned, exactly as if the argument and the radix 
     * 10 were given as arguments to the 
     * {@link #parseInt(java.lang.String, int)} method.
     *
     * @param s	   a <code>String</code> containing the <code>int</code>
     *             representation to be parsed
     * @return     the integer value represented by the argument in decimal.
     * @exception  NumberFormatException  if the string does not contain a
     *               parsable integer.
     */
    public static int parseInt(String s) throws NumberFormatException {
	return parseInt(s,10);
    }

    /**
     * Returns an <code>Integer</code> object holding the
     * value of the specified <code>String</code>. The argument is
     * interpreted as representing a signed decimal integer, exactly
     * as if the argument were given to the {@link
     * #parseInt(java.lang.String)} method. The result is an
     * <code>Integer</code> object that represents the integer value
     * specified by the string.
     * <p>
     * In other words, this method returns an <code>Integer</code>
     * object equal to the value of:
     *
     * <blockquote><code>
     * new Integer(Integer.parseInt(s))
     * </code></blockquote>
     *
     * @param      s   the string to be parsed.
     * @return     an <code>Integer</code> object holding the value
     *             represented by the string argument.
     * @exception  NumberFormatException  if the string cannot be parsed 
     *             as an integer.
     */
    public static Integer valueOf(String s) throws NumberFormatException
    {
	return new Integer(parseInt(s, 10));
    }

2009年12月23日 13:01
0 0

我相信,这不过是sun工程师的一次笔误而已。
因为类方法大家通常会加上类的名字,而如果对类方法调用不加上的话是可以编译通过的,我的意思说过了,如果不加上,IDE会给个提醒而已,不过这可不是编译错误。

2009年12月20日 13:49
0 0

return Integer.valueOf(parseInt(s,radix));
因为valueOf是类方法,所以要加上Integer。
而普通的实例方法调用可以不加。
如果不加上该方法的话,程序应该是可以运行的,不过我想,如果是在编译中的话,至少会提示一个警告信息的吧。

2009年12月20日 11:36

相关推荐

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用...

    网络蚂蚁Java版源码下载

    "网络蚂蚁"是一款著名的多线程下载工具,其Java版的源码对于学习和理解Java编程、网络编程以及多线程技术具有很高的参考价值。在这个主题中,我们将深入探讨网络蚂蚁Java版源码中的关键知识点。 1. **Java编程基础*...

    网络蚂蚁java源码

    《网络蚂蚁Java源码解析与探讨》 网络蚂蚁(NetAnts)是一款经典的多线程下载工具,它以其高效、稳定的特点,在早期互联网时代深受用户喜爱。本篇将深入探讨网络蚂蚁的Java源码,揭示其背后的编程理念和技术实现。 ...

    java源码:网络蚂蚁Java版.rar

    首先,Java源码是学习任何Java程序设计的基础。通过阅读网络蚂蚁的源码,我们可以了解到如何在Java中实现一个实际的应用程序,特别是涉及网络通信的复杂应用。源码中的类结构、方法设计以及异常处理等都是Java面向...

    疯狂Java flashget源码

    《疯狂Java flashget源码解析》 在编程领域,源码是理解软件工作原理的最直接途径。"疯狂Java flashget源码"提供了一个模仿知名下载工具FlashGet的多线程下载功能的Java实现,这对于Java开发者,尤其是对多线程编程...

    文件上下载(java源码)

    在IT行业中,文件上传和下载是常见的操作,...以上就是Java中实现文件分块上传和下载的核心知识点,涵盖了从基础的文件处理到高级的断点续传和安全策略。理解并掌握这些技术,可以有效地构建高效、安全的文件管理服务。

    文件批处理模块java源码

    下面将详细解析这个"文件批处理模块java源码"的相关知识点。 首先,我们讨论文件批处理的核心概念。文件批处理是指一次性处理多个文件或一组文件的过程,通常用于大数据处理、日志分析、数据迁移等场景。Java作为多...

    IP Messenger(飞鸽传书)日本版java源码.rar

    《IP Messenger(飞鸽传书)日本版Java源码解析》 IP Messenger,又被称为“飞鸽传书”,是一款在局域网内实现即时通信的软件。它以其简单易用、小巧高效的特点,在IT行业内备受青睐。特别是其开源版本,为开发者提供...

    java 源码(文件上传下载)

    这个压缩包提供的源码实例为初学者提供了一个实用的起点,了解如何在Java中实现文件上传和下载。 一、文件上传 1. **Servlet和Multipart解析**:文件上传通常涉及到HTTP协议中的multipart/form-data编码,Java中的...

    上传客户端JAVA源码

    这个"上传客户端JAVA源码"的项目可能是一个简单的FTP(文件传输协议)客户端实现,用于从本地计算机向远程服务器上传文件。下面我们将深入探讨相关知识点。 首先,`FtpClient.java` 文件很可能是该FTP客户端的核心...

    类似QQ的聊天软件JAVA版源码(附设计文档)

    总的来说,通过这个项目,开发者可以学习到JAVA编程的多种实用技术和理论知识,同时也可以提升在实际项目开发中的问题解决能力。对于想要从事JAVA软件开发或者即时通讯应用开发的人来说,这是一个宝贵的实践平台。

    Java即时通讯与文件传输系统源码.zip

    Java.util.logging或log4j等库可以用于记录系统运行时的信息,便于问题排查。 通过这个Java即时通讯与文件传输系统的源码,开发者不仅可以学习到如何构建一个实际的通信平台,还能深入理解Java的网络编程、多线程、...

    java -opc ua 连接kepserver 源码

    Java OPC UA连接KepServer源码解析与应用 在工业自动化领域,OPC UA(OPC统一架构)已经成为数据交换的标准协议,它提供了一种安全、可靠的数据传输方式。Kepware的KepServer是一款流行的OPC服务器,支持多种设备和...

    JAVA源码ftp简易服务器JAVA源码ftp简易服务器

    本知识点围绕着“JAVA源码ftp简易服务器”展开,从基础知识、搭建过程、特点与优势、常见问题及解决方案几个方面进行详细解读。 首先,搭建一个基于JAVA的简易FTP服务器需要利用现有的开源项目或编写自己的服务器端...

    java多线程与线程安全实践-基于Http协议的断点续传源码.zip

    项目源码的解析和应用,不仅对理解Java多线程编程有重要的指导意义,同时也是网络编程、文件操作以及异常处理等知识点的综合运用。 首先,关于多线程编程,Java语言提供了丰富的线程API,从基本的Thread类到更为...

Global site tag (gtag.js) - Google Analytics