-
再续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个答案 按时间排序 按投票排序
-
其区别在于(与静态与否无关,更非笔误):
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>'\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
-
我相信,这不过是sun工程师的一次笔误而已。
因为类方法大家通常会加上类的名字,而如果对类方法调用不加上的话是可以编译通过的,我的意思说过了,如果不加上,IDE会给个提醒而已,不过这可不是编译错误。2009年12月20日 13:49
-
return Integer.valueOf(parseInt(s,radix));
因为valueOf是类方法,所以要加上Integer。
而普通的实例方法调用可以不加。
如果不加上该方法的话,程序应该是可以运行的,不过我想,如果是在编译中的话,至少会提示一个警告信息的吧。2009年12月20日 11:36
相关推荐
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用...
"网络蚂蚁"是一款著名的多线程下载工具,其Java版的源码对于学习和理解Java编程、网络编程以及多线程技术具有很高的参考价值。在这个主题中,我们将深入探讨网络蚂蚁Java版源码中的关键知识点。 1. **Java编程基础*...
《网络蚂蚁Java源码解析与探讨》 网络蚂蚁(NetAnts)是一款经典的多线程下载工具,它以其高效、稳定的特点,在早期互联网时代深受用户喜爱。本篇将深入探讨网络蚂蚁的Java源码,揭示其背后的编程理念和技术实现。 ...
首先,Java源码是学习任何Java程序设计的基础。通过阅读网络蚂蚁的源码,我们可以了解到如何在Java中实现一个实际的应用程序,特别是涉及网络通信的复杂应用。源码中的类结构、方法设计以及异常处理等都是Java面向...
《疯狂Java flashget源码解析》 在编程领域,源码是理解软件工作原理的最直接途径。"疯狂Java flashget源码"提供了一个模仿知名下载工具FlashGet的多线程下载功能的Java实现,这对于Java开发者,尤其是对多线程编程...
在IT行业中,文件上传和下载是常见的操作,...以上就是Java中实现文件分块上传和下载的核心知识点,涵盖了从基础的文件处理到高级的断点续传和安全策略。理解并掌握这些技术,可以有效地构建高效、安全的文件管理服务。
下面将详细解析这个"文件批处理模块java源码"的相关知识点。 首先,我们讨论文件批处理的核心概念。文件批处理是指一次性处理多个文件或一组文件的过程,通常用于大数据处理、日志分析、数据迁移等场景。Java作为多...
《IP Messenger(飞鸽传书)日本版Java源码解析》 IP Messenger,又被称为“飞鸽传书”,是一款在局域网内实现即时通信的软件。它以其简单易用、小巧高效的特点,在IT行业内备受青睐。特别是其开源版本,为开发者提供...
这个压缩包提供的源码实例为初学者提供了一个实用的起点,了解如何在Java中实现文件上传和下载。 一、文件上传 1. **Servlet和Multipart解析**:文件上传通常涉及到HTTP协议中的multipart/form-data编码,Java中的...
这个"上传客户端JAVA源码"的项目可能是一个简单的FTP(文件传输协议)客户端实现,用于从本地计算机向远程服务器上传文件。下面我们将深入探讨相关知识点。 首先,`FtpClient.java` 文件很可能是该FTP客户端的核心...
总的来说,通过这个项目,开发者可以学习到JAVA编程的多种实用技术和理论知识,同时也可以提升在实际项目开发中的问题解决能力。对于想要从事JAVA软件开发或者即时通讯应用开发的人来说,这是一个宝贵的实践平台。
Java.util.logging或log4j等库可以用于记录系统运行时的信息,便于问题排查。 通过这个Java即时通讯与文件传输系统的源码,开发者不仅可以学习到如何构建一个实际的通信平台,还能深入理解Java的网络编程、多线程、...
Java OPC UA连接KepServer源码解析与应用 在工业自动化领域,OPC UA(OPC统一架构)已经成为数据交换的标准协议,它提供了一种安全、可靠的数据传输方式。Kepware的KepServer是一款流行的OPC服务器,支持多种设备和...
本知识点围绕着“JAVA源码ftp简易服务器”展开,从基础知识、搭建过程、特点与优势、常见问题及解决方案几个方面进行详细解读。 首先,搭建一个基于JAVA的简易FTP服务器需要利用现有的开源项目或编写自己的服务器端...
项目源码的解析和应用,不仅对理解Java多线程编程有重要的指导意义,同时也是网络编程、文件操作以及异常处理等知识点的综合运用。 首先,关于多线程编程,Java语言提供了丰富的线程API,从基本的Thread类到更为...