一起学JDK源码 -- Number类

java是强类型语言,它提供了八种基本数据类型, 其中有六种数字类型,分别是byte、short、int、long、float、double。看源码我们自然看不到这些类型的源码,我们要看的是这些类型的包装类的源码。今天我们就看看这些类型的包装类的共同的祖先Number类的源码。

基础知识:

1.包装类:java是一个面向对象的语言,但java的基本数据类型却不是面向对象的,这在实际的使用中会有诸多不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表。这八个和基本类型对应的类统称为包装类。
2.包装类的主要用途:同基本数据类型对应的类类型存在,方便涉及到对象的操作、每个类中包含每种基本数据类型相关属性如最大值、最小值等,以及相关的操作方法。
3.抽象类:用来表征对问题领域进行分析、设计中得出的抽象概念,使用abstract 修饰类名。抽象类不能创建对象。
4.抽象方法:只有方法声明,而没有具体方法体的方法。只能定义在抽象类中。用abstract修饰方法名。
5.接口:java语言中存在的有特定的语法和结构。用interface修饰接口名,接口中的方法都是抽象方法(jdk1.7以前,1.8及以后可以有默认方法)
接口中的变量都是常量。

Serializable:

public interface Serializable {
}

Serializable是一个接口,可以看到该接口中什么都没有,它是一个标识,实现了Serializable接口的类可以被序列化(可查看文章末尾序列化的定义)

serialVersionUID:

这个是用于对类进行版本控制的,对象反序列化(可查看文章末尾反序列化的定义)的时候会用到。

Number抽象类中的方法:

public abstract int intValue();

public abstract long longValue();

public abstract float floatValue();

public abstract double doubleValue();

public byte byteValue() {
    return (byte)intValue();
}

public short shortValue() {
    return (short)intValue();
}

可以看到这些方法都是xxxValue,目的就是将数据转换为相对应的类型,如intValue就是将数据转换为int类型,byteValue就是将数据转换为byte类型,这点从返回值我们也可以看出来

思考:

1.byte、short、int、long、float、double都是数字类型,java为什么要搞出这么多的数字类型出来。
2.Number是这些类型的父类,既然他们的范围不一样,那么转换时会不会出问题
答1:因为它们的长度各不相同,使用它们是系统开销也不相同。它们有不同的特点,适用于不同的地方。我们可以根据不同的需要,而选择类型。
答2:转换时当然会出问题,比如int类型的129你将它转换为byte时就会越界,得到的结果是-127。其它的大类型转换为小类型的时候也会有同样的问题,所以使用的时候要格外小心。

序列化:

把对象转换为字节序列的过程称为对象的序列化。转换后的字节序列通常存储于文件或数据库,用于网络传输等。

反序列化:

把字节序列恢复为对象的过程称为对象的反序列化。

查看所有目录

你可能感兴趣的:(一起学JDK源码 -- Number类)