系列文章目录
java编程思想:序
文章目录
- 系列文章目录
- 前言
- Object类
-
- 定义
- 具体方法
-
- public native int hashCode()
- boolean equals(Object obj)
-
- String toString()
- protected native Object clone()
- public final native Class> getClass()
- Objects类
- 包装类
-
- Comparable 接口
-
- Comparator 接口
-
- Cloneable 接口
-
- RandomAccess接口
- 序列化接口
-
- Serializable接口
- static和transient
- Random类
-
- Optional类
-
- 定义
- 具体方法
-
- 创建Optional
- 操作Optional
- 便利函数
- 日期
前言
学习之前应该掌握的英文单词:
Object类
定义
public class Object
Object类是所有对象的父类,如果一个类没有显示声明继承于哪个类,那么他将继承于Object类,
具体方法
public native int hashCode()
我们可以看到定义它是一个本地方法,在Object中返回当前对象的地址,当我们将自定义类插入到hash表中时必须重写该方法。
boolean equals(Object obj)
public boolean equals(Object obj) {
return (this == obj);
}
在Object类中equals方法比较两个对象的地址是否相同,在重写该方法之前必须重写hashCode方法,如果 x.equals(y) 返回 true, 那么 x.hashCode( ) 就必须与 y.hashCode( ) 具有相同的值。
equals方法重写的步骤
- 调用Object的equals方法
- 判断参数是否为null,为null返回false
- 判断该参数是否为同类
- 将参数转换为相应的类类型变量
- 进行域比较
String toString()
Object 类定义的toString 方法, 用来打印输出对象所属的类名和散列码。toString方法随处可见,因为只要对象与一个字符串通过操作符“+” 连接起来,Java 编译就会自动地调用 toString方法
protected native Object clone()
如果直接调用该方法会直接抛出错误,它也没有具体的实现,如果想以此实现克隆必须实现Cloneable接口并重新该方法,详情见下文。
public final native Class> getClass()
返回当前对象的Class对象引用,详情见 java泛型详解
Objects类
包装类
包装类即所有基本类型的对象形式,Integer、Long、Float、Double、Short、Byte、Character 、Void 和 Boolean,他们一旦创建就是不可变的,同时, 对象包装器类还是 final , 因此不能定义它们的子类
自动装箱和自动拆箱
自动装箱是指当一个基本类型赋给一个包装类时编译器会自动转型,自动拆箱是此过程的逆过程。有几点要注意:
- 自动装箱规范要求 boolean、byte、char 127, 介于 -128 ~ 127 之间的 short 和int 被包装到固定的对象中
- 如果在一个条件表达式中混合使用 Integer 和 Double 类型, Integer 值就会拆箱,提升为 double, 再装箱为 Double
- 装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时, 插人必要的方法调用。虚拟机只是执行这些字节码
Comparable 接口
内置的比较器,如果用户自定义类相使用工具类中的排序方法就应该实现该接口的int compareTo方法。
定义
public interface Comparable< T>
具体方法
int compareTo(T o)
Comparator 接口
自定义比较器,我们可以在使用工具类中的排序方法时自定义一个实现了该接口的比较器类传入实现比较灵活的自定义比较。
定义
@FunctionalInterface
public interface Comparator< T>
具体方法
- int compare(T o1, T o2)
- static > Comparator< T> reverseOrder()
生成一个比较器,将逆置 Comparable 接口提供的顺序。
- default Comparator< T> reversed( )
生成一个比较器, 将逆置这个比较器提供的顺序。
Cloneable 接口
定义
public interface Cloneable
该接口内没有任何内容,它仅仅代表一个标志。这个标志是给clone看的,如果有该标志clone就不会产生异常。
浅拷贝
浅拷贝是指只对对象内部的基本类型域进行值拷贝,对象域进行索引拷贝。
浅拷贝的实现
实现Cloneable 重写clone方法,并在重写方法内调用Object的clone方法
深拷贝
深拷贝是指即对对象内部的进本类型域进行值拷贝,也对对象域进行值拷贝
深拷贝的实现
在浅拷贝的基础上将类内的对象域手动深拷贝一下
RandomAccess接口
标记接口,它仅用来测试一个特定的集合是否支持高效的随机访问。
if (c instanceof RandomAccess)
{
use random access algorithm
else
{
use sequential access algorithm
}
序列化接口
Serializable接口
该接口也是一个标记接口,实现该接口的类表示该类可以被序列化,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象.,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量serialVersionUID,,其目的是以序列化对象进行版本控制,有关各版本反序列化时是否兼容。如果类没有显示定义这个静态常量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的实例变量做了修改,serialVersionUID 可能发生变化。故建议,显式声明.简单来说Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常.
- private static final long serialVersionUID
static和transient
static和transient修饰的成员变量不能被序列化
Random类
该类用于生成伪随机数,该类有一个无参构造,有一个接受一个int型种子的有参构造,所谓伪随机数就是通过算法生成的散乱的数字序列,所以如果两个random实例的种子一样那么他们产生的随机数序列也应该一样,如果使用无参构造函数创建random实例那么默认以系统时间的毫秒数作为种子.
定义
public class Random
extends Object
implements Serializable
具体方法
- boolean nextBoolean()
返回一个boolean值
- void nextBytes(byte[] bytes)
返回随即字节并存放到指定字节数组中
- double nextDouble()
返回0到1之间的double值
- float nextFloat()
返回0到1之间的float值
- int nextInt()
返回一个int值
- int nextInt(int bound)
返回一个0到bound的int值
- long nextLong()
返回一个long值
- void setSeed(long seed)
设置种子值
- Int/Double/LongStream ints/doubles/longs()
返回一个有效的无限流的伪随机 int/double/long值,double值在0和1之间
- Int/Double/LongStream ints/doubles/longs(int/double/long randomNumberOrigin, int/double/long randomNumberBound)
设置返回数值的上限和下限
- Int/Double/LongStream ints/doubles/longs(long streamSize)
设置流的大小
- Int/Double/LongStream ints/doubles/longs(long streamSize,int/double/long randomNumberOrigin, int/double/long randomNumberBound)
设置流的大小和返回数值的上下限
Optional类
Optional类是一个容器,可以用它来解决null问题
定义
public final class Optional<T>
extends Object
具体方法
创建Optional
- static < T > Optional< T > ofNullable(T value)
针对一个可能为空的值,为空时自动生成Optional.empt,否则将值包装到optional中
操作Optional
- Optional< T > filter(Predicate super T> predicate)
对 Optional 中的内容应用Predicate 并将结果返回。如果 Optional 不满足 Predicate ,将 Optional 转化为空 Optional 。如果 Optional 已经为空,则直接返回空Optional
- < U > Optional< U > map(Function super T,? extends U> mapper)
如果 Optional 不为空,应用 Function 于 Optional 中的内容,并返回结果。否则直接返回 Optional.empty。
- < U > Optional< U > flatMap(Function super T,Optional< U >> mapper)
同 map(),但是提供的映射函数将结果包装在 Optional 对象中,因此 flatMap() 不会在最后进行任何包装。
便利函数
- void ifPresent(Consumer super T> consumer)
如果存在值,则使用该值调用指定的consumer,否则不执行任何操作。
- T orElse(T other)
如果值存在则直接返回,否则返回other
- T orElseGet(Supplier extends T> other)
如果值存在则直接返回,否则使用Supplier生成一个替代对象
- < X extends Throwable> T orElseThrow(Supplier extends X> exceptionSupplier)
如果值存在则直接返回,否则使用Supplier生成一个异常
日期