Java SE知识点总结(5:异常处理机制)

目录

五:异常处理机制

1.异常概述

2.异常处理

常见异常

如何查找异常位置

try,catch,finally用法

异常类介绍

Throwable类介绍

编译时异常与运行时异常的区别

如何区分编译时异常与运行时异常

异常处理之throws

自定义异常


五:异常处理机制

1.异常概述

什么是异常:程序执行报错或者是出现了不正常的现象

  1. 编译错误:没有遵循Java语法规则

  2. 逻辑错误:程序结果不是我们所期待的结果

  3. 运行时错误(重点):运行时候抛出,有可能抛出,需要提前解决的

2.异常处理

常见异常

  1. java.long.ArrayIndexOutOfBoundsException---------数组索引越界异常(下标索引越界:复数或者太大)

  2. java.long.NullPointerException---------空指针异常(只创建引用;未new出实例)

  3. java.long.NumberFormatException---------类型转换异常

  4. java.long.StackOverflowError---------栈溢出错误

  5. java.long.OutOfMemoryError---------内存溢出错误

  6. java.long.UnknownError---------未知错误

如何查找异常位置

  1. 抛出异常时会有线程名称:类的完整名字加上线程名字

  2. 还有报错的类型,java.lang.ArrayIndexOutOfBoundsException:数组索引越界

  3. 还有报错的行数:15行

  4. 补充:如果程序在某一行发生了异常;那么程序会在这一行中断;后面的代码不会继续执行

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
        at Test08.main(Test08.java:4)

try,catch,finally用法

  1. 因为某一行代码抛出异常后,会中断jvm,程序便不会继续执行,那么如何解决呢?

  2. 第一种方式:使用try,catch解决

    try{
       //从try里面开始执行
       //可能发生异常的代码块
       //如果发生异常会自动生成一个异常对象,该异常对象会被提交给java运行时系统
       //然后去catch里面匹配,如果成果就可以继续向下执行,执行catch里面的代码块
       //如果匹配不成功,jvm还是会中断,同时报错
    }catch(ArrayIndexOutOfBoundsException e){
       //从上而下匹配,因此最好是,范围从小到大依次捕获
        System.out.println("数组下标越界啦!");
        e.printStackTrace();
        //该方法可以输出具体的异常信息
    }catch(Exception e){
       //如果e捕捉到了,就执行本代码块中的代码
    }finally{
       //无论是否报错,都运行这里面的代码
    }
  3. 顺序异常,catch捕获异常一定要范围从小到大(最后在写Exception e)

异常类介绍

  1. Throwable是超类,所有异常都会间接的继承该类

    try{
       //可能发生异常的代码块
    }catch(Exception e){
        System.out.println("您的程序执行报错啦!");
    }
  2. Error类(错误)与Exception类(异常)继承与Throwable类

  3. 类之间的继承关系可以使用,Ctrl+Ait+u(idea)生成类图

  4. 异常类继承了Throwable类,含有Throwable类中的方法和属性

Throwable类介绍

  1. getMessage方法:返回异常信息内容,该方法为String类型

  2. printStackTrace方法:输出异常信息,该方法为void类型

  3. Throwable方法概览

 

编译时异常与运行时异常的区别

  1. 编译时异常:.java文件源代码编译成 .class文件(在编译时发生异常,无法编译为.class文件)

  2. 编译时异常idea(编译软件)会用红色感叹号表示

  3. 编译时异常强制性要求try,catch去捕获一下异常

  4. 运行时异常:.java文件源代码已经编译成 .class文件,java程序在运行时有可能会发生的异常

  5. 运行时异常不需要强制性要求try,catch捕获异常

如何区分编译时异常与运行时异常

  1. RuntimeException类下的所有子类都为运行时异常

  2. 如果异常没有继承到RuntimeException类就是编译时异常

 

 

异常处理之throws

  1. throws为抛出异常的意思

  2. 当thorws异常加在某方法上时,若调用该方法,那么该方法的调用者必须try/catch或者throws抛出

  3. 意思就是如果有异常,如果不捕获,就必须抛出(往上抛出)

  4. 最后会抛到main(String[] args)方法

  5. 如果再抛出,那么就是jvm(java虚拟机)处理该异常了

  6. 说的简单一点就是:如果方法加上了throw + 编译时异常;并且如果谁调用了该方法,那么就必须处理该异常或者继续向上抛出

自定义异常

public class Main{
    public static void mian(String[] args) throws LoginException{
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的用户名和密码!");
        String userName = scanner.next();
        String pwd = scanner.next();
        login(userName,pwd);
    }
    
    public static void login throws LoginException(String userName, String pwd){
        if(("mayikt".equals(userName)&&"123456".equals(pwd))){
           //如果用户输入的用户名或者密码不正确,就抛出该异常
            throw new LoginException("用户输入的名称或者密码不正确!");
        }
    }
}
​
class LoginException extends Exception{
    public LoginException(String message){
        super(message);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值