# finally -> 01 【Obiect类、常用API】
## 1.Object类
### 1.1主要方法(两个 API中)
`java.lang.Object`类是Java语言中的根类,即所有类的父类。
- `public String toString()`:返回该对象的字符串表示。
- `public boolean equals(Object obj)`:指示其他某个对象是否与此对象“相等”。如果希望进行两个引用类型对象的比较,非常推荐使用Objects.equals方法(两个参数)。
这个方法可以极大地避免NullPointerException.
`注意`:
Object类当中定义了equals方法,默认就是进行地址值比较。
如果希望子类进行内容比较,不用Object默认equals方法,那么子类就需要:覆盖重写equals方法和hashCode方法。
##### 备注:hashCode方法必须和equals方法成双成对、形影不离、不离不弃。
### 1.2Objects类(工具类)
在JDK7中添加了一个Objects工具类,它提供一些方法操作对象(由一些静态的实用方法组成)
`public static boolean equals(Object a, Object b)`:判断两个对象是否相等。
## 2.Date类(日期与时间)
### 2.1 java.util.Date类
` java.util.Date`类 表示特定的瞬间,精确到毫秒
`public Date()`:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
`public Date(long date)`:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
`public long getTime()` 把日期对象转换成对应的时间毫秒值。
### 2.2 DateFormat类
`java.text.DateFormat` 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
**格式化**:按照指定的格式,从Date对象转换为String对象。
**解析**:按照指定的格式,从String对象转换为Date对象。
### 构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类`java.text.SimpleDateFormat`。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
`public SimpleDateFormat(String pattern)`:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
##### 参数pattern是一个字符串,代表日期时间的自定义格式。
java.text.DateFormat是一个抽象类,负责将String和Date之间来回转换。
格式化:Date --> String public String format(Date date):将参数日期时间对象,变成字符串的样子。
解析:String --> Date public Date parse(String str):将参数字符串转换成为对应的日期时间对象。
这是一个抽象类,不能直接new对象,常用的子类是:【java.text.SimpleDateFormat】
如果Date类当中的默认toString方法格式不喜欢,可以使用这个子类来自己指定格式。
SimpleDateFormat构造方法:
public SimpleDateFormat(String pattern):参数就是我们希望使用的格式。
参数字符串代表格式,只要记住一套即可:(严格区分大小写)
##### yyyy-MM-dd HH:mm:ss.SSS
yyyy四位数字代表:年
MM两位数字代表:月
dd两位数字代表:天
HH两位数字代表:小时
mm两位数字代表:分钟
ss两位数字代表:秒钟
SSS三位数字代表:毫秒
## 3.Calendar类
### 3.1 calendar类的使用
##### java.util.Calendar抽象类,作用就是自动根据毫秒数计算得到年月日、时分秒等各种日期时间信息,想用什么,就拿什么。
这是一个抽象类,不能直接new对象。常用的子类是(了解即可,不要去背):GregorianCalendar。
强烈建议不要自己new这个子类。(如果自己new子类,那么就要自己手动计算复杂的日期时间。)
推荐的、正确的、常用的Calendar获取姿势,通过静态方法:
##### public static Calendar getInstance():获取一个日历对象。
### 3.2 calendar类中常用方法
##### 1.public int get(int field):
根据参数指定的数据项,获取对应的数值。
参数代表:你想要哪一条数据?是年、月、还是日?
备注:不推荐直接参数使用int数字,不好记忆。推荐使用Calendar当中的常量。
##### 2.public void set(int field, int value):
设置指定的数据项,成为指定的数值。
参数field代表:你想设置年、月还是日还是其他?
参数value代表:你想设置成多少?
##### 3.public void add(int field, int amount):
对指定的数据项进行偏移量计算。
参数field代表:你想对哪个数据项进行修改?
参数amount代表:你想偏移(加减)多少?
##### 4.public Date getTime():
将Calendar转换成为Date对象。
##### 注意事项:
1. Date类当中的getTime是获取毫秒数,得到long值。
2. Calendar当中的getTime是获取Date对象。
## 4.System类
### 4.1调用方式
java.lang.System是一个与系统相关的工具类,本身是final太监类不能继承,构造方法被私有化了,不能new。
这个类只能通过静态形式调用方法。
##### 获取当前系统的毫秒数:
public static long currentTimeMillis():获取系统运行此时此刻的毫秒数(相对于Unix时间而言)。
### 4.2 底层复制数组方法
System提供的一个底层的复制数组的方法:
##### public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数src代表:源数组,也就是数据本来在哪
参数srcPos代表:源数组的起始索引
参数dest代表:目标数组,也就是数据需要拷贝到哪里去
参数destPos代表:目标数组的起始索引
参数length代表:代表长度,也就是总共复制过去几个元素
##### 备注:
1. 如果索引值或者长度超过了有效范围,那么将会发生ArrayIndexOutOfBoundsException
2. 不推荐自己使用for循环,推荐使用arraycopy方法。因为后者性能更高。
## 5.StringBuilder
### 5.1构造方法(有参和无参)
##### 1.java.lang.StringBuilder构造方法:
public StringBuilder():无参,内容空白。
public StringBuilder(String str):有字符串参数,代表初始内容,直接将参数内容放在底层数组当中。
StringBuilder已经覆盖重写了Object当中的toString方法,不显示地址哈希值,而是显示内容。
如果希望向StringBuilder当中追加更多内容,可以使用方法:
##### 2.public StringBuilder append(任意类型的数据):
追加参数数据进去,如果底层数组空间不够,将会自动扩容。
### 5.2字符串转换
字符串转换成为StringBuilder:
1. 构造方法:public StringBuilder(String str)
2. 成员方法:append后续追加进去也行。
StringBuilder转换成为字符串:
只要调用toString方法即可。
## 6.包装类
### 6.1 八种数据类型
包装类是引用类型,是八种类,和八种基本类型对应,全都位于java.lang包下,意味着不用导包。
byte Byte
short Short
int Integer 【特殊】
long Long
float Float
double Double
char Character 【特殊】
boolean Boolean
##### 基本数据类型只能用来存放数值,
但是对应的包装类功能更加丰富,就是将基本类型的数据套上一个“壳子”。
### 6.2自动装箱拆箱
从JDK 1.5+开始,Java当中添加了非常好用的特性:
自动装箱:自动地把基本类型转换成为对应的包装类 int --> Integer
自动拆箱:自动地把包装类转换成为对应的基本类型 Integer --> int
语法糖:底层原理其实没变,只不过是表面的写法更简单,这种优化叫做语法糖。
##### 将基本类型转换成为字符串:
1. "" + 基本类型数据【推荐,很简单,棒棒哒!Wonderful!】
2. String.valueOf方法
3. 先把基本类型变成包装类,然后调用toString(不推荐,太麻烦)
##### 将字符串转换成为基本类型:
包装类的转换方法:
public static XXX parseXXX(String str):将参数字符串转换成为基本类型
备注:XXX就代表基本类型名
##### `注意事项:`
1. 如果String转换成基本类型,格式对不上,那么将会发生NumberFormatException。
2. 八个包装类只有七个parseXXX方法,Character没有。