异常

程序没有按照设计的正常的逻辑执行,出现了不可预知的情况,就叫异常。

一旦程序出现异常,就会终止运行。

学习异常的目的:

  1. 当程序遇到处理不了的情况,抛出(产生)一个异常,终止程序
  2. 当发生异常时候,给出提示,让程序能继续执行

异常的分类

异常是java里的一种类,所有的异常类的根类是Throwable.

异常都是继承至Throwable, 分为两个大类:

一是Error错误,一般是虚拟机异常,这种错误我们的代码没有办法处理;

二是Exception异常, 我们的代码可以抛出异常或者是处理异常

Exception又分为两大类别:1. RuntimeException  运行时异常;2. 非运行时异常.

处理异常

一.抛出异常

1.在代码中用throw 抛出一个Exception类型或子类型的对象

2.在方法上面添加throws声明,后面的异常类型要大于等于代码中抛出的异常

//在方法上面需要添加throws申明,后面的异常类型要大于等于代码中throw的类型
    public String getSex(int sex) throws Exception {
        if(sex == 0){
            return "女";
        }else if(sex == 1){
            return "男";
        }else{
            //抛出异常,用throw关键字,后面跟上Exception类型(或子类)的对象
            //参数的字符串就是异常的消息
            throw new Exception("性别只能是1或0");
        }
    }

二.try catch关键字

当我们调用的方法抛出了非Runtime的异常,就会报编译错误,要求代码添加try catch语句来处理异常, catch语句可以有多个, 也可以只有一个(如果只有一个catch,这个异常类型要大于等于抛出的最大的那个异常类型)finally语句块的代码一定会被执行的(不管有没有异常都会执行)只要有非运行时异常时,try catch语句必不可少, 但是finally是可选的

try {
            createException.getName();
            createException.getSex(2);
            System.out.println("出现异常语句之后的代码");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //finally的代码一定会被执行(不管有没有异常)
            System.out.println("finally语句块");
        }


        System.out.println("try语句之后的代码");

此外,如果方法中抛出的继承至RuntimeException的类型异常, 不会强制要求添加throws 或 try catch, 不会导致编译错误只有在运行时有可能抛出异常。

集合

一些数据结构的统称集合,包含List, Set, Map

List

List是列表,用来存储一组数据,是一种可变长的数据结构,可以知道List中有多少个数据

List可以存放不同数据类型的数据,是一个有序列表,数据可以重复

List的基本使用add();get();size();

ArrayList        是采用数组方式实现的读和遍历比较快, 插入和删除数据比较慢

set

无序集合,元素不重复,没有索引(序号),不能通过下标访问

HashSet        采用hash表实现元素不重复无序的, 允许存null,不能按下标读取元素,只能遍历

使用        一般在对数据去重时,将数据存入HashSet可以达到去重的目的

哈希表

哈希表,也称散列表,是一种高效数据结构要保存的数据称为值, 根据hash算法给每个值算出一hash code保存数据就用hash code 跟value一一对应。

hash table存储数据        根据hash code从表里查找是否存在:不存在,直接添加;存在,再判断equals是否相等:false, 直接添加;true, 说明两个值是一样的,不添加

Hash code的 结论        两个值的hash code相同, 它们的equals不一定相同;两个值的equals相同, hash code不一定相同;两个值的hash code相同, equals也相同, 这两个值一定相同

Map

保存键值对数据(key - value);key不能重复, value可以重复;key和value都可以为null

HashMap        采用数组+链表+红黑树的数据结构来实现的;先根据hash code保存数组,如果出现hash碰撞,用链表链表,长度超过8,改用红黑树