1.Object类:所有类的父类;若一个类没有指定父类,那么默认继承Object类
    成员方法:
    toString():返回该对象的字符串表示,对象的类型+@+内存地址值
    注意:
    a.通常情况下我们需要获得对象的属性等,所以一般需要对其进行覆盖重写,我们可以通过Alt+Insert来快速覆盖重写
    b.直接打印对象的时候,打印出的就是toString()方法的返回值,所以toString()方法用来重写我们想看到的关于该类的信息
    equals(Object obj):指示其他某个对象是否与此对象相等
    基本数据类型:比较值
    引用数据类型:比较的是两个对象的地址值
    注意:
    a.通常情况下我们需要比较两个变量的属性值是否相等,所以一般也需要对其进行覆盖重写
    b.在子类作为方法的参数传入时有多态的情况发生,因此需要在覆盖重写的时候将子类向下转型为本身的类型(别忘了向下转换都需要先instanceof检查的)。
    2.日期时间类:时间原点:1970-1-1 00:00:00
    毫秒值:计算当前日期到时间原点之间一共经历了多少毫秒 long类型的数据
    Date类:表示特定的时间,精确到毫秒
    作用:可以对日期和时间进行计算

    Date():则返回当前时间
    Date(毫秒值L):则返回毫秒值所相应的时间
    getTime(日期对象):将当前日期转化为毫秒值
    DateFormat类:抽象类,可以在Date对象和String对象之间按照指定的格式互相转化
    注:因为该类是抽象类,所以我们使用其子类SimpleDateFormat来多态创建对象使用。
    格式:DateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
    String format(Date date):按照指定模式,将Date日期格式化为符合模式的字符串
    例子:String str = df.format(date);
    Date parse(String source):把符合模式的字符串,解析为Date日期
    例子: 模式注意要相同
    String str = “2018-01-01 00:00:00”;
    Date date = df.parse(str);

    标识字母 含义
    y
    M
    d
    H
    m
    s

    对应的模式例子:”yyyy-MM-dd HH:mm:ss”
    Calendar类:抽象类,通过静态方法getInstance()获取Calendar子类对象

    1. - public int get(int field):返回给定日历字段的值。
    2. - public void set(int field, int value):将给定的日历字段设置为给定值。
    3. - public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
    4. - public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
    字段值 含义
    YEAR
    MONTH 月(从0开始,可以+1使用)
    DAY_OF_MONTH 月中的天(几号)
    HOUR 时(12小时制)
    HOUR_OF_DAY 时(24小时制)
    MINUTE
    SECOND
    DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)

    特点:每个字段都有相对应的常量数字
    3.System类:获取与系统相关的信息或系统级操作
    currentTimeMillis方法:返回以毫秒为单位的当前时间,可以计算程序运行所需要的时间
    格式:System.currentTimeMillis()返回值是long
    arraycopy方法:将数组中特定的数据拷贝到另一个数组中

    参数序号 参数名称 参数类型 参数含义
    1 src Object 源数组
    2 srcPos int 源数组索引起始位置
    3 dest Object 目标数组
    4 destPos int 目标数组索引起始位置
    5 length int 复制元素个数

    4.StringBulider类:字符串缓冲区,可以看作是长度可变的字符串
    底层:byte类型的数组,但是没有被final修饰,可以改变长度
    构造方法:

    1. - public StringBuilder():构造一个空的StringBuilder容器。
    2. - public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。

    常用方法:String append(任意数据的字符串形式):用以添加字符串
    可以链式编程 str.append(xx).append(xx).append(xx).append(xx)
    toString():将StringBulider类转换成String类(逆向转换可以通过构造函数的方法)
    5.包装类:将基本数据类型包装起来,成为类来使用
    基本类和包装类之间可以自动装箱拆箱
    String类型转换:
    其他类型转换为字符串可以通过String类的valueOf()函数实现,但一般通过直接加” “空字符串得到
    除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的包装类型

    6.Iterator类:用于获取集合中的元素
    成员方法:
    E next():返回迭代的下一个元素,并将指针后移一位
    boolean hasNext():如果仍有元素可以迭代,则返回 true
    注意:迭代器初始指向-1位置
    使用步骤:
    a.通过集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接收
    b.先用hasNext()判断是否存在,然后用next()获得集合中的元素
    例子:
    Collection coll = new ArrayList();
    Iterator it = coll.iterator();
    注意:迭代器接口Iterator也是有泛型的,泛型的类型与集合中的数据类型保持一致
    7.Collection接口:单列集合最顶层的接口
    image.png
    成员方法:

    boolean add(E e) 把给定的对象添加到当前集合中 。
    void clear() 清空集合中所有的元素。
    boolean remove(E e) 把给定的对象在当前集合中删除。
    boolean contains(E e) 判断当前集合中是否包含给定的对象。
    boolean isEmpty() 判断当前集合是否为空。
    int size() 返回集合中元素的个数。
    Object[] toArray() 把集合中的元素,存储到数组中。

    8.Collections接口:与上面的Collection类区分,是对于集合的一些操作

    public static boolean addAll(Collection c, T… elements) 往集合中添加一些元素。(这里用到了可变参数)
    public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
    public static void sort(List list) 将集合中元素按照默认规则排序。
    public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排序。

    sort()方法:
    不带比较参数:自定义数据类型,需要在自定义类中重写Comparable接口中的compareTo()方法。
    带比较参数:需要自己写一个实现类,并继承Comparator接口,重写其中的compare方法。
    9.List接口:继承Collection接口,是单列集合的重要分支
    特点:有序,带索引,有重复元素
    特有方法:void add(int index, E element):将指定元素添加到集合中的指定位置
    实现类:
    ArrayList和LinkedList集合,ArrayList底层是组数,LinkedList底层是链表
    LinkedList类:

    public void addFirst(E e) 将指定元素插入此列表的开头。
    public void addLast(E e) 将指定元素添加到此列表的结尾。
    public E getFirst() 返回此列表的第一个元素。
    public E getLast() 返回此列表的最后一个元素。
    public E removeFirst() 移除并返回此列表的第一个元素。
    public E removeLast() 移除并返回此列表的最后一个元素。
    public E pop() 移除并返回此列表的第一个元素。
    public void push(E e) 将指定元素插入此列表的开头。
    public boolean isEmpty() 如果列表不包含元素,则返回true

    注意:push和pop都是从开头操作
    10.Set接口:
    特点:无序,以某种规则存入,元素不重复,但是查找方便
    HashSet类:根据对象的哈希值来确定元素在集合中的存储位置
    底层数据结构:哈希表:哈希表是由数组+链表+红黑树实现
    哈希值:十进制的整数,由系统给出,可以通过hashCode()方法获得
    add()方法:在添加时会先检查数据的哈希code,若相同则比较值,相同则不添加
    注意:存储自定义集合元素:必须重写equals方法和hashCode方法,保证存储的唯一性
    LinkedHashSet:底层是哈希表加链表,即比HashSet多一条链表,记录元素顺序
    11.可变参数:参数列表数据类型已确定,参数的个数不确定的时候使用
    格式:修饰符 返回值类型 方法名(参数类型… 形参名){ }
    注意:这个形参可以当作数组名来使用,不过传递的时候可以不用传递数组
    12.Map集合:双列集合,有两个泛型代表键值和数字
    特点:key值不允许重复,key和value是一一对应的
    HashMap:底层是哈希表,查询速度快,但是无序存储
    LinkedHashMap:底层是哈希表+链表,保证迭代的顺序
    常用方法:

    V put(K key, V value) 把指定的键与指定的值添加到Map集合中
    V remove(Object key) 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
    V get(Object key) 根据指定的键,在Map集合中获取对应的值。
    boolean containsKey(Object key) 判断集合中是否包含指定的键。
    Set keySet() 获取Map集合中所有的键,存储到Set集合中。
    Set> entrySet() 获取到Map集合中所有的键值对对象的集合(Set集合)。

    put方法:当键值已经存在的时候,将新的value值替换原本的value值,并返回原本的value值;当键值不存在的时候,存储键值和value值,并返回null
    遍历HashMap:
    keySet():返回一个包含key值的Set集合,可以通过增强for循环或者Iterator迭代器遍历
    例子:SetkeySet = map.keySet();
    entrySet():在Map中有一个entry方法,此方法保存Map中的键值对,通过entrySet方法返回包含此键值对的Set集合,然后通过两种方法对集合遍历即可输出
    例子:Set> entrySet = map.entrySet()
    注意:存储自定义类为key时需要重写该类型中的equals和hashCode方法
    13.of方法:在List Set Map接口中都有,可以一次性添加多个元素
    格式:变量名.of(数据,数据,数据,数据)
    注意:
    a.该方法返回值是一个不可改变的集合,不能使用add和put方法
    b.在往set和map中存的时候,不能有重复的元素
    14.异常类
    ·异常类的参数可以添加异常提示语句
    Throwable体系:
    Error:严重错误Error,无法通过处理的错误,只能事先避免
    Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行
    异常的处理
    总结:异常分为编译期异常和运行期异常,分别继承两个不同的类Exception和RuntimeException
    其中Exception需要再代码中添加throws操作或者try……catch操作,而RuntimeException只需要抛出异常即可,由系统自己处理。
    15.抛出异常thorw:
    格式:throw new 异常类名(参数); (异常类必须是Exception或者Exception的子类对象)
    方式:
    如果是运行期异常(RuntimeException),那么我们需要通过thorw抛出异常的方式告知使用者产生的问题。我们不需要处理异常,交给JVM处理(打印异常对象,中断程序)
    如果是编译异常,那么我们必须处理这个异常,要么throws,要么try……catch
    Objects非空判断方法:

    1. public static <T> T requireNonNull(T obj) {
    2. if (obj == null)
    3. throw new NullPointerException();
    4. return obj;
    5. }

    可以通过此方法简化对空指针异常的处理 Objects.requireNonNull()
    16.声明异常throws:用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。
    格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
    注意:
    a.如果调用了一个声明抛出异常的方法,那么此方法也必须处理声明的异常。要么继续throws声明抛出,最终交给JVM处理;要么try……catch自己处理异常。
    b.如果抛出异常的对象又子父类关系,那么直接声明父类异常即可
    17.try……catch捕获异常:

    1. try{
    2. 编写可能会出现异常的代码
    3. }catch(异常类型 e){
    4. 处理异常的代码
    5. //记录日志/打印异常信息/继续抛出异常
    6. }


    运行:如果出现异常,那么执行catch中的代码,否则执行try中的代码
    finally代码块:特定的代码无论异常是否发生,都需要执行
    格式:finally用在catch后面,无论程序怎样,finally中的语句都会执行。
    用处:finally一般用于资源释放。无论程序是否异常,最后都要释放资源的。
    18.Throwable类:
    String getMessage() 获取异常的描述信息,原因
    String toString() 获取异常的类型和异常描述信息
    void printStackTrace() 打印异常的跟踪栈信息并输出到控制台(默认)

    19.多个异常处理:
    分别处理:就是一个一个try catch
    一次捕获,多次处理:

    1. try{
    2. 编写可能会出现异常的代码
    3. }catch(异常类型A e){ try中出现A类型异常,就用该catch来捕获.
    4. 处理异常的代码
    5. //记录日志/打印异常信息/继续抛出异常
    6. }catch(异常类型B e){ try中出现B类型异常,就用该catch来捕获.
    7. 处理异常的代码
    8. //记录日志/打印异常信息/继续抛出异常
    9. }


    注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
    一次捕获一次处理:直接catch(Exception e),覆盖所有子类的异常,比较方便。
    注意事项:
    a.不要再finally中写return语句,因为永远返回finally中的结果
    b.父类方法抛出多个异常的,子类方法只能抛出少于等于父类的异常,或者不抛出异常
    c.父类方法没有抛出异常,那么子类方法也不能抛出异常,只能捕获处理,不能声明抛出
    bc.简单来说,父类声明什么异常,子类就声明什么异常
    20.自定义异常
    自定义一个编译期异常: 自定义类 并继承于java.lang.Exception。
    自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException。
    格式同定义一个类类似,方法可以直接继承采用父类中的方法。