Java学习day-14:异常机制和自动拆箱和装箱
一、异常:
1.异常的概念:
就是在程序的运行过程中所发生的不正常的事情,它会中断正在运行的程序;例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
2.异常的分类:
所有异常的根类为Throwable,Throwable下面又派生了两个子类:Error和Exception。
(1)error是程序无法处理的错误,表示运行应用程序中比较严重的问题;Error表明系统JVM已经处于不可恢复的崩溃状态中。我们不需要管它。
(2)Exception是程序本身能够处理的异常,Exception类是所有异常类的父类,其子类对应了各种各样可能出现的异常事件;又分为:RuntimeException运行时异常;CheckedException已检查异常;
(3)运行时异常:通常是由编程错误导致的,在编写程序时,并不要求必须使用异常处理机制来处理这类异常,经常需要通过增加“逻辑处理来避免这些异常”。
代码截图 结果(4)常见错误:
1) 算术异常ArithmeticException
2)空指针异常,没有创建对象(new)而调用了对象的属性或方法NullPointerException
3)类型转换异常ClassCastException
4)数组下标越界ArrayIndexOutOfBoundsException
5)输入类型与期望输入类型不匹配InputMsimatchException
(5)已检查异常: 所有不是RuntimeException的异常;被称为Checked Exception,如IOException、SQLException等以及用户自定义的Exception异常。
二、异常的处理方式:
1.捕获异常:
捕获异常是通过3个关键词来实现的:try-catch-finally;
(1)try-catch:
1)正常情况:
2)异常情况:异常出现的类型与捕获的类型匹配;
3)异常情况:异常出现的类型与捕获类型不匹配;
(2)try-finally:finally 是无论是否产生异常,都执行的代码,但是有一种
情况 finally 不执行,即退出 Java 虚拟机。
(3)try-catch-finally:
1)正常情况:执行try-finally;
2)异常情况:类型相匹配,执行try-catch-finally;
3)异常情况:类型不相匹配,执行try-finally
如果在 catch 中存在 return 语句,则先执行完 finally 语句再回头执行 return 语句
代码截图 结果2.声明异常:
(1)声明异常关键字throws;方法名的后面,用于声明该方法可能会产生一个异常如果方法声明的是 Exception 类型的异常或者是 CheckedException 异常,要求方法的调用处 必须做处理。
(2)继承关系中的声明异常:
1)父类的方法声明了 Exception 类型的异常,子类在重写方法时,可以声明也可以不声明。但是如果子类重写后的方法使用 super 关键字调用父类的方法,那么要求必须对异常进行处理。
2)如果父类的方法没有异常,那么子类的方法如果一定会有 Exception 或 Checked 异常,要求子类必须自己使用 try-catch 处理,或者给父类方法加上异常的声明。
3)如果子类在重写父类的方法时,产生的异常是RuntimeException 异常时,那么可以不用处理。
(3)throw抛出异常:写在方法里,再捕获异常前,必须有一段代码先生成异常对象并把它抛出。这个过程手动去做。
(4)两者的区别:
1)throws :用于声明方法可能会产生的;写在方法后面;
2)throw:手动抛出异常对象;写在方法里面;
3.自定义异常:
步骤:(1)继承Exception或RuntimeException;
(2)定义构造方法;
(3)使用异常;
代码截图 结果三、自动装箱和拆箱:
1.包装类:
Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class); 包装类均位于java.lang包。
(1)八种包装类和基本数据类型的对应关系:
(2)八个类中除了Character和Boolean以外,其他六个和基本数据类型一致,只是类名的首字母大写。
(3)包装类的继承关系:
(3)内存分析:
(4)包装类的用途:
1) 作为和基本数据类型对应的类型存在;
2)包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法;
代码截图 结果2.自动装箱;
基本类型就自动地封装到与它相同的类型的包装类中。
3.自动拆箱:
包装类对象自动转换成基本类型数据。