总述
数据,是一个程序最基本的要素,它的最终形式一定是基本数据类型。java是一种面向对象的语言,不能创建基础数据类型对象,也不能在使用泛型时兼容基本类型。为了解决这个问题,将基本类型视作对象进行处理。Java给每一个基本类型提供了包装类,放在java.lang包下。
所有对应基本类型,其包装类共有八个:
- Integer (int)
- Long (long)
- Short (short)
- Double (double)
- Float (float)
- Byte (byte)
- Character (char)
- Boolean (boolean)
其中非数字类两个,Character , Boolean
其余位数字类,继承数字类的父类Number
关系如下:
数字类
在说数字包装类之前,先来看看数字类的父类
Number
看源码:
package java.lang;
/**
* The abstract class <code>Number</code> is the superclass of classes
* <code>BigDecimal</code>, <code>BigInteger</code>,
* <code>Byte</code>, <code>Double</code>, <code>Float</code>,
* <code>Integer</code>, <code>Long</code>, and <code>Short</code>.
* <p>
* Subclasses of <code>Number</code> must provide methods to convert
* the represented numeric value to <code>byte</code>, <code>double</code>,
* <code>float</code>, <code>int</code>, <code>long</code>, and
* <code>short</code>.
*
* @author Lee Boynton
* @author Arthur van Hoff
* @version %I%, %G%
* @see java.lang.Byte
* @see java.lang.Double
* @see java.lang.Float
* @see java.lang.Integer
* @see java.lang.Long
* @see java.lang.Short
* @since JDK1.0
*/
public abstract class Number implements java.io.Serializable
源码的注释部分及类定义,从中可以看出抽象类的性质和继承关系,可以看到,它不仅是六个基础类型包装类的父类,同时也是大整形BigInteger和大浮点型BigDecimal的父类。且由于是抽象类,所有的子类必须重写实现它的所有方法。方法如下:
可以看到,它提供了六种数字基础类型的数值返回的抽象方法 , 所有继承他的子类,必须重写这些方法。
下面的六个包装类,由于实现结构相似,故仅列出具有代表性的两个,双精度浮点型和整型。
需要指出的是,他们都实现了Comparable接口,是可比较对象(数字类很好理解)
Integer
构造方法,常用方法以及常量如下:
构造方法
构造函数是初始化对象的入口,Integer类提供了两种构造方法,实际是规定了两种给对象赋值的方式,一种是直接传入对应基本类型的值,另一种是通过传入数值字符串来赋值。(注意:传入的字符串若不是数值字符串将会报错NumberFormatException)
常用方法
常用方法分为两中:静态方法和成员方法。
静态方法是伴随着类一同加载的,可通过类直接调用而不需要对象,扮演着工具方法的角色。例如其中的parseInt方法作用就是分解字符串为整数。调看源码不难发现,构造函数中利用字符串赋值,调用的就是这个方法。