JavaSE基础 (二十九)

异常/错误

程序运行过程中,可能会发生一些不被期望的效果,肯定会阻止我们的程序按指令去执行

这种不被预期出现的效果,肯定需要抛出来告诉我们

在JAVA中有一个定义好的Throwable(可以抛出的)

Error错误

通常是一些物理性的,JVM虚拟机本身出现的问题,程序指令是处理不了的

Exception异常

是一种不正常的现象,通常是给定的指令程序产生了一些不合规范的事情

Throwable

Error(错误)

StackOverflowError

OutOfMemoryError

Exception(异常)

RuntimeException(运行时)

IOExceotion

异常的分支体系

运行时异常(非检查异常)

Error和RuntimeException都算作运行时异常
javac编译的时候,不会提示发现的
在程序编写的时候不要求必须做处理,如果我们愿意可以添加处理手段(try throws)
要求大家出现这样的异常的时候,知道怎么产生及如何修改
1.InputMisMatchExceotin  输入不匹配
        int value = input.nextInt();// abc
2.NumberFormatException  数字格式化
        int value = Integer.parseInt("123.45")
3.NegativeArraySizeException 数组长度负数
        int Array = new int[-2]
4.NullPointerException 空指针异常
        int[][] array = new int[3][];
        array[0][0] = 10;
        Person p = null;
        p.getName();
5.AirthmeticExceotion 数字异常
  10/0  整数不允许除0 infinity小数除0会产生无穷
6.ClassCastException 造型异常
       Person p = new Teacher();
       Student s = (Student) p;
7.ArrayIndexOutOfBoundsException 数组索引越界
       int[] array ={1,2,3};
       array[5];
8.StringIndexOutOfBoundsException 字符串越界
       String str = "abc";
       str.charAt(5);
9.IndexOutOfBoundsException 集合越界
       List家族
       ArrayList list = new ArrayList();
       list.add();list.add();ist.add();
       list.get(5);
10.IllegalArguementException 非法参数异常
       ArrayList list = new ArrayList(-1);

编译时异常(检查异常)

除了Error和RuntimeException以外的其他异常
javac编译的时候 强制要求我们必须为这样的异常处理(try或throws)
因为这样的异常在程序运行中可能会产生问题
异常产生后后续的所有执行就被停止啦
1.InterruptException
            try{
                 Thead.sleep(5000);
            }catch(Exception e){

            }

添加处理异常的手段

处理异常不是异常消失了

处理异常指的是 处理掉异常之后 后续的代码不会因为此异常停止执行

两种手段

try{}catch(){}{finally{}}

try不能单独出现

后面必须添加catch或finally

catch有一组括号(NullPointerException)目的是为了捕获一组异常

catch可以有多个存在

捕获的异常直接没有任何的继承关系
捕获的异常需要从小到大捕获

finally 不是必须存在的 若存在则必须执行

fianl fianlly fianlizae 区别

fianl 特征修饰符 修饰变量 属性 方法 类

修饰变量 基本类型 值不能改变 引用类型 地址不能改变(如果变量没有初值 给一次赋初值的机会)

修饰属性 特点与修饰变量相似(要求必须给属性赋初值 否则编译报错)

修饰方法 不能被子类重写

修饰类 不能被其他子类继承

fianlly 处理异常的手段的一部分

try()catch(){}后面的一个部分

这个部分可有可无 如果只能含有一部分 且必须执行

finalize 是Object类中的一个protected方法

对象没有任何引用指向的时候—-会被GC回收

当对象回收的时候 默认调用finalize方法

若想看到回收的效果 可以重写 public void finalize(){}

处理异常放在方法内部可能还会有小问题

如果在方法内部含有返回值

不管返回值return关键字在哪里 finally一定会执行完毕

返回值的具体结果 看情况

throws 抛出

异常只能在方法上抛出 属性是不能处理异常的

方法 构造

方法 可以抛出不止一个异常,通过,隔开

抛出的异常与多个catch类似 要么没关系 要么先抛出小异常