首页 > 编程语言 >java异常捕获-cnblog

java异常捕获-cnblog

时间:2024-10-13 08:48:59浏览次数:3  
标签:java 抛出 捕获 System cnblog try 异常 public

java异常捕获

image-20241013085657386

1 异常概述

异常是一个程序执行期间发生的事件,他中断了正在执行的程序

2 异常的抛出和捕获

做一个案例 字符串转int异常

package nb;

public class Naaa {
    public static void main(String[] args) {
        String a = "tttt";
        int age = Integer.parseInt(a);
        System.out.println(age);
    }
}

报错类型是字符串转数字

"C:\Program Files\Java\jdk-17\bin\java.exe"  -Dfile.encoding=UTF-8 -classpath C:\bak\java\java1\out\production\java1 nb.Naaa
Exception in thread "main" java.lang.NumberFormatException: For input string: "tttt"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	at java.base/java.lang.Integer.parseInt(Integer.java:668)
	at java.base/java.lang.Integer.parseInt(Integer.java:786)
	at nb.Naaa.main(Naaa.java:6)

Process finished with exit code 1

3 使用try catch finally 捕捉异常

package nb;

public class Naaa {
    public static void main(String[] args) {
        try {
            String a = "tttt";
            int age = Integer.parseInt(a);
            System.out.println(age);
        }
        catch (Exception e){
            System.out.println(e);
        }
        System.out.println(111);
    }
}

image-20241012073504359

可以看到异常被抛出了,并且程序顺利执行了异常后面的语句

3.1 finally语句块

无论程序异常是否发生,最终都会执行finally语句

在4种特殊情况finally语句不会被执行

在finally语句块中发生了异常
在前面的代码中使用了System.exit()
程序所在的线程死亡
关闭cpu

4 java常见的异常类

IOException:当发生某种I/O异常时,抛出此异常。此类是失败或中断的I/O操作生成的异常的通用类。
IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数。
NullPointerException:当应用程序试图访问空对象时,则抛出该异常。
SQLException:提供关于数据库访问错误或其他错误信息的异常。
IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常。
ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。
ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常。
ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
NoSuchMethodException:无法找到某一特定方法时,抛出该异常。
SecurityException:由安全管理器抛出的异常,指示存在安全侵犯。
RuntimeExceptionRuntimeException:是那些可能在Java虚拟机正常运行期间抛出的异常的超类。

5 自定义异常

在程序中自定义异常,大致可以分成3步

创建自定义异常类
在方法中通过throw关键字抛出异常对象
如果在当前抛出异常的方法中处理异常,可以使用try{}catch(){}捕获异常

创建一个自定义异常的案例

package nb;

public class Das {
     static int a(int b) throws Exception{
        if (b>0){
            throw new Exception("全体目光向我看齐");
        }
         return b;
     }

    public static void main(String[] args) {
        try {
            int c = a(1);
            System.out.println(c);
        }catch (Exception e){
            System.out.println(e);
        }
    }
}

image-20241012211335204

6 在方法中抛出异常

package nb;

public class Sab {
    static void a() throws NegativeArraySizeException{
        int[] arr = new int[-2];
    }

    public static void main(String[] args) {
        try {
            a();
        }catch (NegativeArraySizeException e){
            System.out.println("抛出异常");
        }
    }
}

image-20241012214259062

延时案例a出现了异常抛出,在主方法中进行实现,同时也可以继续向上抛出

7 关闭资源

try catch resources能够很轻易的关闭在try catch 中使用的资源

如果资源对象是在try catch语句中声明的,jvm会自动调用close方法关闭资源

举一个案例

package nb;

class Resource implements AutoCloseable{
    void a(){
        System.out.println("你好");
    }

    @Override
    public void close() throws Exception {
        System.out.println("关闭资源");
    }
}
public class Pkd {
    public static void main(String[] args) {
        try(Resource resource = new Resource()){
            resource.a();}
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

image-20241012220212435

需要注意try的语法更换

标签:java,抛出,捕获,System,cnblog,try,异常,public
From: https://blog.csdn.net/qq_62943420/article/details/142893663

相关文章

  • 2024java最新面试题-10张图!彻底搞定Java线程状态转换
    Java线程状态有几个?Java线程状态是如何转换?Java线程状态转换什么情况会进入锁的等待队列?Java线程状态转换什么情况会进入锁的同步队列?一提到Java线程状态,不少读者立马想到线程状态转换图,但细想,印象又不深刻,只记得有那么几个状态。再要你说出Java线程状态是如何转换的,脑子里......
  • JavaScript中的流程控制(顺序结构、分支结构、循环结构)
    流程控制1.概念在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的,很多时候要通过控制代码的执行顺序来实现我们完成的功能简单的理解:流程控制就是控制代码,按照一定的结构顺序来执行流程控制的分类:顺序结构分支结构循环结构2.顺序流程控......
  • 每日OJ题_牛客_比那名居的桃子_滑动窗口/前缀和_C++_Java
    目录牛客_比那名居的桃子_滑动窗口/前缀和题目解析C++代码Java代码牛客_比那名居的桃子_滑动窗口/前缀和比那名居的桃子(nowcoder.com)描述:        小红有一天看到了一只桃子,由于桃子看上去就很好吃,小红很想把它吃掉。已知吃下桃子后,每天可以获得ai​的......
  • 基于springboot的蔬菜农场信息管理系统java项目商城销售系统
    基于Java和SpringBoot的蔬菜农场信息管理系统是为了实现蔬菜农场的现代化、高效化管理而设计的。该系统在种植管理方面,可详细记录蔬菜的种植信息,包括蔬菜品种、种植日期、种植区域、种植方法等,方便农场工作人员对种植过程进行精准把控。生长监测模块能实时记录蔬菜的......
  • 基于java+springboot的书洞小程序设计图书阅读交流分享系统
    基于Java和SpringBoot的书洞小程序是一款为阅读爱好者打造的便捷图书交流与分享平台。该小程序在图书资源展示方面丰富多样,用户可以浏览各类图书的详细信息,包括书名、作者、出版社、出版年份、书籍简介等,同时配有书籍封面图片,让用户能更直观地了解图书内容。社交互动......
  • 如何在 IDEA 中导入 Java 项目的 Git 仓库并启动
    目录前言1.从Git仓库导入Java项目2.配置Maven2.1配置Maven仓库和设置文件2.2加载依赖3.配置Tomcat并运行项目3.1配置Tomcat3.2配置ServerURL3.3启动项目4.常见问题与解决方法4.1Maven依赖无法下载4.2Tomcat部署失败4.3项目启动后无法访问结......
  • Java项目:227基于Springboot + vue实现的仓库管理系统
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍本项目为前后端分离的项目;系统分为用户、管理员和超级管理员三个角色本系统包含登录、主页、个人中心、用户信息管理、仓库信息管理(出库、入库)、物品分类管理、物品信息......
  • JavaScript原型链污染探讨
    如果你想弄明白什么怎样才可以实现JavaScript的原型链污染,那么你首先需要弄清楚两个东西,那就是__proto__和prototype。到底什么才是__proto__和prototype?那我们先来看看比较官方的说法吧:__proto__:是每个对象的隐藏属性,指向创建该对象的构造函数的原型对象(prototype)。它是对象......
  • idea-java序列化serialversionUID自动生成
    简介java.io.Serializable是Java中的一个标记接口(markerinterface),它没有任何方法或字段。当一个类实现了Serializable接口,那么这个类的对象就可以被序列化和反序列化。序列化是将对象的状态转换为字节流的过程,这样可以方便地将对象存储到文件中或者通过网络传输。反序列化......
  • JavaWeb基础-学习笔记03
    03Maven、MyBatis、HTML1.Maven1.1Maven概述Maven是专门用于管理和构建Java项目的工具,它的主要功能有:提供了一套标准化的项目结构标准化的项目结构:eclipse、myeclipse、IDEA...(不同IDE之间,项目结构不一样,不通用)Maven提供了一套标准化的项目结构,所有IDE使用Maven构......