复习笔记6-API

## 1.Object类
#### ①toString:返回对象的字符串表示形式
⭐为了被子类重写，以便返回对象具体的内容
#### ②equals:判断两个对象是否相等
⭐为了被子类重写，以便子类自己来定制比较规则（比如比较对象的内容）
直接比较两个对象的地址是否相同：==
```java
        // TODO Object类提供的常用方法
        Student s1 = new Student("赵敏",23);
        System.out.println(s1.toString());// Student{name='赵敏', age=23}
        System.out.println(s1);// Student{name='赵敏', age=23}


        Student s2 = new Student("赵敏",23);
        System.out.println(s2.equals(s1));// true
        System.out.println(s2 == s1);// false
```
#### ③clone(对象克隆)
当某个对象调用这个方法时，这个方法会复制一个一模一样的新对象返回
⭐需要实现Cloneable接口
```java
        // TODO Object类提供的对象克隆的方法
        // 对象克隆 protected Object clone()
        User u1 = new User(1,"张三","wo666",new double[]{99.0,99.5});

        User u2 = (User) u1.clone();

        System.out.println(u1.getId());
        System.out.println(u1.getPassword());
        System.out.println(u1.getUsername());
        System.out.println(u1.getScores());

        System.out.println("--------------------");

        System.out.println(u2.getId());
        System.out.println(u2.getPassword());
        System.out.println(u2.getUsername());
        System.out.println(u2.getScores());
```
浅克隆：引用类型拷贝的只是地址
深克隆：基本类型的数据直接拷贝，字符串数据拷贝的还是地址
## 2.Objecs类
#### ①equals:先做非空判断，再比较两个对象
#### ②isNull:判断对象是否为null,为null返回true，反之
#### ③nonMull:判断对象是否不为null,不为null则返回true，反之
## 3.包装类
就是把基本类型的数据包装成对象
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/c368e1e4-0c3e-89e9-21d4-0deb2ee7e715.png)
自动装箱：基本数据类型可以自动转换为包装类型
自动拆箱：包装类型可以自动转换为基本数据类型
⭐包装类的其他常见操作
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/1aae5d77-7c58-38a7-9b31-a9e897780044.png)
⭐ 泛型和集合不支持基本数据类型，只能支持引用数据类型
```java
        // ArrayList<int> list = new ArrayList<int>();
        ArrayList<Integer> list = new ArrayList<>();
```
## 4.StringBuilder/StringBuffer
代表可变字符串对象，相当于是一个容器，它里面装的字符串是可以改变的，就是用来操作字符串的(类似于String的功能)
#### ①方法
⭐append:添加数据并返回StringBuilder对象本身(添加内容)
⭐reverse:将对象的内容反转
⭐length:返回对象内容长度
⭐toString:把StringBuilder转换为String
## 5.StringJoiner
跟StringBuilder一样，也是用来操作字符串的，也可以看成是一个容器，创建之后里面的内容是可变的
#### 方法
⭐add:添加数据，并返回对象本身
⭐length:返回长度（字符出现的个数）
⭐toString:返回一个字符串（该字符串就是拼接之后的结果）
## 6.Math
代表数学，是一个工具类，里面提供的都是对数据进行操作的一些静态方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/dc103b61-1a5b-34f5-680d-cabe9fba925e.png)
## 7.System
代表程序所在的系统
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/f31bc53f-bc6f-4d81-bc26-d3f3688f7fdf.png)
## 8.BigDecimal
⭐解决小数运算失真的问题
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/a6d8d621-e818-d272-7d26-08fff49995c1.png)
## 9.Date
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/1b944b16-6fac-ff3c-f630-4744f1a529e5.png)
## 10.SimpleDateFormat
代表简单日期格式化，可以用来把日期对象，时间毫秒值格式化成我们想要的形式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/fea7e5be-e6c7-bfa9-5b73-98fac2ca162c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/fee792f9-2049-148c-5532-ae5b21d0c1ae.png)
## 11.Calendar
代表的是系统此刻时间对应的日历，通过它可以单独获取，修改时间中的年月日时分秒
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/4b9bd3fa-65e8-6df3-6034-6144b3fa571c.png)
## 12.注意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/e4e9d6e7-1b42-e4db-f7d0-a443182877ba.png)
## 13.
localDate:代表本地日期（年月日星期） 
LocalTime：代表本地时间（时分秒纳秒） 
localDateTime：代表本地日期，时间（年月日星期时分秒纳秒）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/679e66a8-be86-2085-0232-8a31e719fc87.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/518478fd-b571-44ed-0a62-b5ef684f2b4e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/660bf792-d6d2-e762-a9e2-47fdfd00a58a.png)
## 14.Zoneld ZoneDateTime 时区
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/4b655476-7c97-db2d-0b1e-543635cfd87a.png)
## 15.Instant
时间线上的某个时刻，时间戳
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/50fe5a78-b6a7-e6bf-4933-b0467ebc39cd.png)
## 16.DateTimeFormatter
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/4685464b-25f1-d12f-71c1-a692bdc01d50.png)
## 17.Duration Period
可以用于计算两个LocalDate对象相差的年数，月数，天数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/901620e0-ea2f-8831-f091-55e50e5ba43b.png)
## 18.Duration
可以用于计算两个时间对象相差的天数，小时数，分数，秒数，纳秒数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/17214f94-8e2f-ce06-215c-8461743af870.png)
## 19.Arrays
用来操作数组的工具类
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/b0eed529-2aca-2b19-969e-818f476d784f.png)
```java
        // 1.返回数组的内容
        int[] arr = {10,20,30,40,50,60};
        System.out.println(Arrays.toString(arr));// [10, 20, 30, 40, 50, 60]

        // 2.拷贝数组：指定范围，包前不包后
        int[] arr2 = Arrays.copyOfRange(arr,1,4);
        System.out.println(Arrays.toString(arr2));// [20, 30, 40]

        // 3.拷贝数组，可以指定新数组的长度
        int[] arr3 = Arrays.copyOf(arr,10);
        System.out.println(Arrays.toString(arr3));// [10, 20, 30, 40, 50, 60, 0, 0, 0, 0]

        // 4.把数组中的原数据改为新数据又存进去
        double[] prices = {99.8,128,100};
        // 把所有的价格都打八折，然后又存进去
        Arrays.setAll(prices, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) {
                // value 取索引
                return prices[value] * 0.8;
            }
        });
        System.out.println(Arrays.toString(prices));//  [79.84, 102.4, 80.0]

        // 5.对数组进行排序，默认升序排序
        Arrays.sort(prices);
        System.out.println(Arrays.toString(prices));// [79.84, 80.0, 102.4]
```