Object 类
Object 类是所有类、数组、枚举类的父类。也就是说,Java 允许把所有类型的对象赋给 Object 类型变量。当定义一个类时没有使用 extends 关键字为它显式指定父类,则该类默认继承 Object。因为所有 Java 类都是 Object 类的子类,所以任何 Java 对象都可以调用 Object 类方法,Object 提供了以下几个常用方法:
- boolean equals(Object obj):判断指定对象与该对象是否相等。
- protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
- Class<?> getClass():该方法返回该对象的运行时类
- int hashCode():返回该对象的 hashCode 值。默认情况下,Object 类 hashCode() 方法根据该对象的地址计算。但很多类重写 Object 类的 hashCode() 方法,不再根据地址来计算其 hashCode 的值
- String toString():返回该对象的字符串表示。Object 的 toString 方法返回 “运行时类名@十六进制的 hashCode 值”格式的字符串。很多方法都重写了 Object 的 toString() 方法,用于返回可以表述该对象信息的字符串
接口 Comparable
- 什么是 Comparable 接口?
此接口强行对实现它的每个类的对象进行整体排序。此排序称为该类的自然排序,类的 compareTo 方法称为它的自然比较方法。实现此接口的对象列表可以通过 Collections.sort(或 Arrays.sort)进行自动排序。
Java 使用 Comparator 接口实现自定义排序
Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法:
- int compare(Object o1, Object o2) 返回一个基本类型的整型
- 如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
- 如果要按照降序排序,则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)
可以这样理解:
按照升序排序来理解,返回正数表示要交换o1和o2的位置,返回负数不交换。
Collection 接口
Object toArray() 和 T[] toArray(T[] a) 方法。
- list.toArray();
- list.toArray(T[] a);
第一个方法是将 list 直接转化为 Object 数组,第二种方法是将 list 转化为你所需要类型的数组。
不明真相的同学会这样写:
Collection<String> list = new ArrayList<String>();
for(int i = 0; i < 10; i++)
list.add(" " + i);
String[] str = (String[]) list.toArray();
运行时,发现报错:Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
原因是不能将Object[] 转化为 String[],转化的话,只能取出每一个元素再转化。Java 的强制类型转化只是针对单个对象的,想要偷懒将整个数组转化为另一个类型的数组是不行的。
实际上,List 转化为 array 利用第二种冲重构方法是比较方便的。用法如下:
String[] str = new String[list.size()];
list.toArray(str);
Math 类
Java 提供了 Math 类来实现复杂的运算。
- Math.random():产生大于等于 0 小于 1 的一个随机数。