10 异常
10.1异常介绍及分类
异常捕获 选中后alt+tab+t->选中try-catch
异常就是程序执行中不正常的情况 注意语法和逻辑错误并不是异常
异常分类有两种 error和exception error是错误 虚拟机无法解决的严重问题 exception是其他因为编程错误或者外在因素导致的一般性的问题 exception又分为两大类 运行时异常 编译时异常 前者指程序运行时发生的异常 后者指编译器检查出的异常


顾名思义 非受检异常就是在编译时不需要强制处理的异常 所以也叫运行时异常 受检异常就是编译时异常
10.2 运行时异常
运行时异常是程序员应该避免的 包括


10.3 编译时异常

10.4 异常处理方式



理解:可以看到 如果有try-catch-finally 捕获到异常可以处理 但如果没有 就要将该异常throws到调用它的方法 进行处理 直到有对应的处理异常的地方 如果一直没有 就会将该异常throws到JVM进行处理
10.5 try-catch-finally
import java.util.Scanner;
class test{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String name=in.next();
try {
int num=Integer.parseInt(name);
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally一定执行");
}
}
}

多个catch语句
import java.lang.Object;
import java.util.Scanner;
class test{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String name=in.next();
int num=in.nextInt();
try {
int n=Integer.parseInt(name);
Father father=new Father();
father.fly();
int i=1/num;
}catch(NullPointerException e){
e.printStackTrace();
}catch (NumberFormatException e){
e.printStackTrace();
}catch(ArithmeticException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
finally {
System.out.println("finally一定执行");
}
}
}
class Father{
void fly(){
System.out.println("father flying");
}
void swim(){
System.out.println("father swimming");
}
}
class Son extends Father{
@Deprecated void fly(){
System.out.println("son flying");
}
@Override void swim(){
System.out.println("son swimming");
}
}
class Daughter extends Father{
}

try-finally相当于没有捕获异常 所以如果出现异常程序会直接崩掉
题目

先执行try 数组越界异常 进入对应catch块 执行语句(return不执行) 最后进入finally块 执行语句return执行 所以返回4
总结:finally对返回值的影响:看finally中有没有返回值


总结:

10.6 throws


10.7 自定义异常


package com.hspedu.customexception_;
public class CustomException {
public static void main(String[] args) /*throws AgeException*/ {
int age = 180;
//要求范围在 18 – 120 之间,否则抛出一个自定义异常
if(!(age >= 18 && age <= 120)) {
//这里我们可以通过构造器,设置信息
throw new AgeException("年龄需要在 18~120 之间");
}
System.out.println("你的年龄范围正确.");
}
}
//自定义一个异常
//1. 一般情况下,我们自定义异常是继承 RuntimeException
//2. 即把自定义异常做成 运行时异常,好处时,我们可以使用默认的处理机制
//3. 即比较方便
class AgeException extends RuntimeException {
public AgeException(String message) {//构造器
super(message);
}
}


![[Redis#2] 定义 | 使用场景 | 安装教程 | 快!](https://img-blog.csdnimg.cn/img_convert/5a3e88ff63655cf9a558ede00205c199.png)
















