首页 > 编程语言 >Java异常

Java异常

时间:2024-01-17 20:56:46浏览次数:26  
标签:Java 错误 捕获 try catch 异常 运行

Java异常

一、java异常概念和分类

1、Java概念

异常(Exception)就是程序在运行过程中出现的一些错误,我们通过面向对象的思想,把这些错误也用类来描述,那么一旦产生一个错误,即就是创建了某一个错误的对象,这个对象就是我们所说的异常对象。以下是常见的异常:

(1)IndexOutOfBoundsException:

  • ArrayIndexOutOfBoundsException
    数组角标越界异常 角标不在数组范围内
  • StringfIndexOutOfBoundsException
    字符串角标越界异常 角标不在字符串范围内

(2)NullPointerException
    空指针异常 对null调用其成员。
(3)ArithmeticException
    数学运算异常 非法的数学运算。
(4)ClassCastException
    类型转换异常 将类进行错误的强制转换。
(5)NumberFormatException
    数字格式化异常 将数字字符串进行解析。
(6)InputMismatchException
    输入不匹配异常 在输入时输入非法数据。
(7)ParseException
    时间解析异常 非法的时间格式。
(8)StackOverFlowError
    栈内存溢出异常 函数递归。
(9)OutOfMemoryError
    堆内存异常 数组空间开辟过大 程序中对象太多。

异常分类

img

  • Throwable

    是java中所有异常和错误的超类,其两个子类为 Error(错误) 和 Exception(异常)

    • Error: 是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错误一般表示代码运行时JVM出现问题。通常有Virtual MachineError(虚拟机运行错误)、NoClassDefFoundError(类定义错误)等。比如说当jvm耗完可用内存时,将出现OutOfMemoryError。此类错误发生时,JVM将终止线程。非代码性错误。因此,当此类错误发生时,应用不应该去处理此类错误。

    • Exception

      是程序本身可以捕获并且可以处理的异常。其中可分为运行时异常(RuntimeException)和非运行时异常,也叫做受检异常

      • 非检查异常:也称为“运行时异常”,此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。编译器不会检查运行时异常,在抛出运行时异常时编译器不会报错,当运行程序的时候才可能抛出该异常。Error及其子类和RuntimeException 及其子类都是非检查异常。
      • 检查异常也称为“编译时异常”,编译器在编译期间检查的那些异常。由于编译器“检查”这些异常以确保它们得到处理,因此称为“检查异常”。如果抛出检查异常,那么编译器会报错,需要开发人员手动处理该异常,要么使用try-catch捕获,要么使用throws语句重新抛出,否则编译不通过。除了RuntimeException之外,所有直接继承 Exception 的异常都是检查异常。

    从程序执行的过程来看编译时异常和运行时异常

    • 编译时异常:程序在编译时发生的异常(javac 源文件名.java)
    • 运行时异常: 程序在运行时发生的异常(java 字节码文件名)

二、java异常的处理

try - catch - finally

将可能出现异常的代码放到try{}中, 运行时, 如果代码发成了异常的话,就会生成一个对应的异常类的对象。这个产生的异常对象会与catch的异常类型相匹配,匹配成功后就被 catch 捕获,然后运行catch{}中的代码, 一般catch中的代码为处理异常的代码, 比如返回异常的信息和返回异常的详细信息等. 一旦异常处理完成,就会跳出当前的try-catch结构。无论有没有发生异常finally中的代码都会最后被执行。catch多个异常类型的时候, 如果有子父类关系,小的范围写上面大的范围写下面。

public static void main(){
    try{//try监控区域
        System.out.println(1/0);
    }catch(ArithmeticException){//catch捕获异常
        System.out.println("程序出现异常,分母不能为0");
    }finally{//处理善后工作
        System.out.println("finally");
    }
}

throws 关键字和 throw 关键字在使用上的几点区别如下

  • throws 用来声明一个方法可能抛出的所有异常信息,throw 则是指拋出的一个具体的异常类型。
  • 通常在一个方法(类)的声明处通过 throws 声明方法(类)可能拋出的异常信息,而在方法(类)内部通过 throw 声明一个具体的异常信息。
  • throws 通常不用显示地捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw 则需要用户自己捕获相关的异常,而后再对其进行相关包装,最后将包装后的异常信息抛出。
public static void main(){
    test(1,0);
    
    //假设在方法中,处理不了这个异常。方法上抛出异常
    public static void test(int a,int b){ 
    	if(b==0){
            //使用throw 语句用来直接拋出一个异常,后接一个可拋出的异常类对象(主动的抛出异常,一般在方法中)
    		throw new ArithmeticException();
        }
    }
    
    public void readFile() throws IOException {
        //定义方法时声明异常
        FileInputStream file = new FileInputStream("read.txt"); //创建 FileInputStream 实例对象
        int f;
        while ((f = file.read()) != -1) {
            System.out.println((char) f);
            f = file.read();
        }
        file.close();
    }
    //声明异常后需要用try,catch捕获异常
    try {
        t.readFile(); // 调用 readFHe()方法
    } catch (IOException e) {// 捕获异常
        System.out.println(e);
    }
}

标签:Java,错误,捕获,try,catch,异常,运行
From: https://www.cnblogs.com/daimadaxia/p/17971147

相关文章

  • Java期末知识点总结(不全)
    Java知识点Lesson1认识javaLesson2-3认识对象:封装数据为类1.类中有成员变量(属性/字段)+成员函数(方法),类是对象的模板/缔造者/抽象/类型2.局部变量和成员变量的区别:(1)定义位置不同:定义在类中的变量成员变量,定义在方法或{}中的是局部变量(2)内存中位置不同:成员变量在堆......
  • Java基础知识整理,驼峰规则、流程控制、自增自减
    写在开头本文接着上一篇文章续写哈。[Java基础知识整理,注释、关键字、运算符](https://blog.csdn.net/qq_43506040/article/details/135633325)在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。一、命名......
  • aigc java接口
    AIGCJava接口科普简介AIGC(ArtificialIntelligenceGeneralControl)是一种人工智能通用控制接口,提供了与各种人工智能算法进行集成的能力。在Java编程语言中,我们可以使用AIGCJava接口来实现与AIGC的交互。本篇文章将向您介绍AIGCJava接口的使用方法,并提供代码示例来帮助您更......
  • copilotjava
    使用Copilot生成Java代码介绍Copilot是一款由GitHub开发的人工智能代码生成工具,可以帮助开发者更高效地编写代码。在本文中,我将向你介绍如何使用Copilot生成Java代码。无论你是一名经验丰富的开发者还是刚入行的小白,都可以从本文中学习到如何使用Copilot提升你的开......
  • Python 运行时抛出了一个异常请检查疑难解答页面 stable diffusion
    Python运行时抛出异常解决方法简介在Python开发过程中,我们经常会遇到各种异常情况。当Python运行时抛出一个异常时,我们需要检查疑难解答页面来找到解决方法。本文将向你介绍如何处理这种异常情况,并提供一套具体的步骤和代码示例。解决异常的步骤下面是解决Python运行时......
  • java api开发stable diffusion
    JavaAPI开发StableDiffusion教程1.概述在Java开发中,API(ApplicationProgrammingInterface)是非常重要的一部分。通过API,我们可以使用现有的库、框架或者服务,实现所需的功能。本文将详细介绍如何使用JavaAPI进行StableDiffusion开发,帮助刚入行的小白快速上手。2.整体流程f......
  • Flink Java Demo
    1.新建Maven项目<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://......
  • Java异步编程详解
    在现代应用程序开发中,异步编程变得越来越重要,特别是在处理I/O密集型任务时。Java提供了一套强大的异步编程工具,使得开发者能够更有效地处理并发任务。本篇博文将深入探讨Java中异步编程的方方面面,通过具体例子详细说明异步编程的实践。异步编程的背景在传统的同步编程模型中,任务......
  • 利用javascript获取并修改伪元素的值
    HEAD中添加style标签强制覆盖初始属性这个方法是利用内部css样式的高优先级来覆盖外部css,好处是简单易理解,实现简单。坏处就是吃相太难看,过于粗暴。varstyle=document.createElement('style');style.innerHTML=".test::before{color:green}";//添加样式内容的话也可以用上面提......
  • java继承
    java三大特征:封装、继承、多态封装:对象代表什么就得封装什么样的数据,并提供数据对应的行为。继承java中提供了一个extends关键字,用这个关键字可以让一个类和另外一个类建立起继承关系publicclassStudebtextendsPerson(){}例如上段代码中,Student类就叫子类(派生类),Person......