Java异常

1.异常引入

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        //通过try...catch...异常处理机制来处理异常,从而保证程序的健壮性
        int a = 10;
        int b = 0;
        int num = 0;
        try {
            num = a / b;//尝试执行
        } catch (Exception e) {//捕获错误
            System.out.println("异常信息是"+e.getMessage());
        }
        System.out.println("程序继续执行");
        System.out.println("num="+num);//程序抛出ArithmeticException异常,程序结束执行

    }
}

2.异常介绍

  • 为基本概念:Java语言中,将程序执行中发生的不正常现象称为异常,语法错误和逻辑错误不是异常。
  • 异常的分类:
  • Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:栈溢出。Error错误是严重错误,程序会崩溃。
  • Exception:其他原因编程错误或偶然的外在因素导致的一般性问题,可以通过针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等,Exception分为两大类,运行时异常和编译时异常。

3.异常体系

Java异常

4.五大运行时异常(RuntimeException)

4.1NullPointException空指针异常

当程序试图在需要对象的地方使用null时,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        String name = null;
        System.out.println(name.length());
        //Exception in thread "main" java.lang.NullPointerException
    }
}

4.2ArithmeticException数学运算异常

当出现异常的运算条件的时候,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        int count = a/b;
        System.out.println(count);
        //Exception in thread "main" java.lang.ArithmeticException: / by zero
    }
}

4.3ArrayIndexOutOfBoundsException 数组下标越界异常

用非法索引访问数组时抛出的异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        for (int i = 0; i

4.4ClassCastException类型转换异常

当试图将对象强制转换为不是实例的子类时,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        A b = new B();//向下转型
        B b1 = (B)b;//向下转型

        C c2 = (C)b;
        //Exception in thread "main" java.lang.ClassCastException: exception.B cannot be cast to exception.C
    }
}

class A{}
class B extends A{}
class C extends A{}

4.5NumberFormatException数字格式不正确异常

当程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        String str = "Hello world";
        int num = Integer.parseInt(str);
        //Exception in thread "main" java.lang.NumberFormatException: For input string: "Hello world"
    }
}

5.常见编译异常

编译异常是指在编译代码期间就必须进行处理的异常,否则代码不能通过编译

常见的编译异常

SQLException//操作数据库时,查询表可能发生异常

IOException//操作文件时发生的异常

FileNotFoundException//当操作文件,而文件不存在时,发生异常

ClassNotFoundException//加载类,而该类不存在时,发生异常

EOFException//操作文件,到文件末尾,发生异常

IIIegalArguementException//参数异常

6.异常处理机制

6.1处理方式

try-catch-finally//在代码中捕获发生的异常,自行处理

throws//将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM

6.2try-catch-finally

try{
    //代码/可能有异常
}catch{
    //捕获到异常
    //当异常发生时
    //当系统将异常封装成Exception对象e,传递给catch
    //得到异常对象后自行处理
}finally{
    //不论是否有异常,一定会执行的代码块
}

6.3throws异常处理

如果一个方法中可能生成某种异常,但并不能确定如何处理这种异常,则此方法应显示声明抛出异常,表明该方法不对这些异常进行处理,而由该方法的调用者进行处理。

在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

6.4自定义异常

当程序中出现了错误,但是该错误信息并没有在Throwable子类中描述处理,则这个时候可以自己设计异常类,用于描述该错误信息。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 *
 * 案例:在接收Person对象的年龄的时候,要求是在18-120岁之间,否则抛出一个自定义异常,
 * 该自定义异常继承RuntimeException
 */
public class exception {
    public static void main(String[] args) {
     int age = 800;
     if (!(age>=18 && age

6.5throw和throws的区别

意义 位置 后面跟的东西 throws 异常处理的一种方式 方法声明处 异常类型 throw 手动生成异常对象的关键字 方法体中 异常对象

Original: https://www.cnblogs.com/nanfengashuai/p/15080500.html
Author: Blueshadow
Title: Java异常

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588351/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • PHP上传文件类型检查

    Original: https://www.cnblogs.com/wxweven/archive/2012/11/13/2768410.htmlAuthor: wxwevenTi…

    Java 2023年6月9日
    066
  • JAVA的类型转换(基本类型)

    类型转换 由于java是强类型语言,所以在进行某些运算的时候,需要用到类型转换。 低–>高指的是字节大小,从小到大。 小数的优先级大于整数 数值进行类型转换时不要…

    Java 2023年6月9日
    084
  • SpringBoot接口-如何优雅的对接口返回内容统一封装?

    在以SpringBoot开发Restful接口时,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息。@pdai SpringBoot接口 – 如何优雅的对接…

    Java 2023年6月6日
    076
  • vs 2005 thread 无法调试

    两种办法: 1、打开项目属性,在”Debug”一项里,把”Enable the Visual Studio hosting process&#8…

    Java 2023年6月14日
    086
  • 碎碎念六三

    08.01 八月,早安。 既要有宏观全局视野,又要能足够细致,明察秋毫。 人要活在现实中,又不可局限于现实里。 08.02 我不求深刻,只要简单。 在太阳底下等了30分钟的公交[破…

    Java 2023年6月9日
    070
  • Linux命令(一)

    文件列表 ls #表示查看当前目录下的文件 ls -a #表示查看当前目录下的所有文件(包含隐藏文件) ls -l #表示查看当前目录下的详细信息 ll #表示查看当前目录下的详细…

    Java 2023年6月6日
    077
  • 二叉搜索树,一个简单但是非常常见的数据结构

    前言 今天leetcode的每日一题450是关于删除二叉搜索树节点的,题目要求删除指定值的节点,并且需要保证二叉搜索树性质不变,做完之后,我觉得这道题将二叉搜索树特性凸显的很好,首…

    Java 2023年6月9日
    082
  • String 部分方法使用

    package com.Mxhlin.String; import java.util.Locale; /** * @author Mxhlin * @Email fuhua277…

    Java 2023年6月7日
    076
  • Spring-Cloud-Gateway 从升级到放弃

    Built on Spring Framework 5, Project Reactor and Spring Boot 2.0 Able to match routes on a…

    Java 2023年5月30日
    066
  • WC2022入职集训课程【研发管理】

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月5日
    080
  • 拜托,面试官别问我「位图」了

    这是之前面试的时候面试官问到过的一个问题,今天正好看到 布隆过滤器,写篇文章总结一下 我们先看一下流程,流程懂了,问题就解决 90%了 我们都知道一个 int 占 4字节,一个字节…

    Java 2023年6月9日
    090
  • 《Java2 实用教程(第五版)》教学进程

    《Java2 实用教程(第五版)》教学进程 目录 《Java2 实用教程(第五版)》教学进程 预备作业1:你期望的师生关系是什么? 预备作业2 :学习基础和C语言基础调查 预备作业…

    Java 2023年5月29日
    098
  • CURL详解

    参数组参数描述 url url 需要抓取的一到多个URLs; 多个下面通配符的方式: 1、http://{www,ftp,mail}.aiezu.com; 2、http://aie…

    Java 2023年6月8日
    092
  • 前端微信登录获取code,userInfo,openid

    getUser(e) { wx.getUserProfile({ desc: ‘用户完善会员资料’, success: res => { let userInfo = res…

    Java 2023年6月15日
    089
  • Project Lombok (即 Lombok)学习记录

    参考文档 什么是 Project Lombok ? 下载 Project Lombok 支持的安装方式 安装 Project Lombok lombok.jar 安装 eclips…

    Java 2023年6月9日
    075
  • Java动手又动脑-数组1

    动手又动脑数组第一阶段 posted @2022-03-18 07:52 HelloHui 阅读(10 ) 评论() 编辑 Original: https://www.cnblog…

    Java 2023年6月9日
    052
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球