首页 > 编程语言 >java中的异常,异常处理

java中的异常,异常处理

时间:2024-11-21 18:47:06浏览次数:3  
标签:java 处理 System catch int println 异常 out

什么是异常?

异常是程序运行过程中所遇到的错误或者不正常的情况,可能会导致程序终止或者出错。在Java中所有的异常都继承自一个throwable的类,它有error和exception两个子类,而且分为编译错误和运行时错误。

为什么需要异常处理?

出现异常后,导致程序后的代码都无法执行。从而造成程序的终止。 我们应该处理该异常,让程序能够运行下面得到代码。

java中异常处理的方式

第一种: try{ 可能发生异常的代码}catch(异常类 对象){捕获异常}

第二种: throws 抛出异常

try{}catch()

public class Test {
    public static void main(String[] args) {
        System.out.println("===============计算开始==================");
        try {
            int a = 10;
            int b = 0;
            int c = a / b;
            System.out.println("==============计算的结果:=========" + c);
        }catch(ArithmeticException e){
            System.out.println("捕获了算术异常.");
        }
        System.out.println("------------------程序结束---------------");
    }
}

try--catch捕获的原理

多个catch

public class Test {
    public static void main(String[] args) {
        System.out.println("===============计算开始==================");
        Scanner sc=new Scanner(System.in);
        try {
            System.out.println("输入一个数:");
            int a=sc.nextInt();
            System.out.println("输入另一个数:");
            int b=sc.nextInt(); //产生一个InputMismatchException异常对象
            int c = a / b;
            System.out.println("==============计算的结果:=========" + c);
        }catch(ArithmeticException e){
            System.out.println("捕获了算术异常.");
        }catch(InputMismatchException e){
            System.out.println("捕获输入异常");
        }
        System.out.println("------------------程序结束---------------");
    }
}

如果发生的异常种类比较多,那么就会造成写很多的catch. 如何解决这个问题?---多态解决。

找到所有异常类的父类:Throwable

package demo04;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        System.out.println("===============计算开始==================");
        Scanner sc=new Scanner(System.in);
        try {
            System.out.println("输入一个数:");
            int a=sc.nextInt();
            System.out.println("输入另一个数:");
            int b=sc.nextInt(); //产生一个InputMismatchException异常对象
            int c = a / b;
            System.out.println("==============计算的结果:=========" + c);
        }catch(Exception e){
            System.out.println("捕获所有的异常.");
        }
        System.out.println("------------------程序结束---------------");
    }
}

注意: 如果写了多个catch.大范围的异常catch必须写在小范围异常catch的下方。

package demo04;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        System.out.println("===============计算开始==================");
        Scanner sc=new Scanner(System.in);
        try {
            System.out.println("输入一个数:");
            int a=sc.nextInt();
            System.out.println("输入另一个数:");
            int b=sc.nextInt(); //产生一个InputMismatchException异常对象
            int c = a / b;
            System.out.println("==============计算的结果:=========" + c);
        }catch (ArithmeticException e){
            System.out.println("捕获算术异常");
        }
        catch(Exception e){
            System.out.println("捕获所有的异常.");
        }
        System.out.println("------------------程序结束---------------");
    }
}

Exception类中常用的方法

1. getMessage() :获取异常的信息。
2. toString(): 获取异常信息以及异常类型。
3. printStackTrace() :打印异常信息以及异常类型以及异常发生在哪一行。

finally

finally它可以和try catch 配合,也可以单独与try配合。 有没有异常都会被执行的代码。---主要使用在资源得到释放。

package demo04;

import demo03.Animal;

public class Test02 {
    public static void main(String[] args) {
        show(10,0);
    }
    public static int show(int a,int b)
    {
        try {
            int c=a/b; //ArithmeticException f=new ArithmeticException();
            return c; //return用来结束方法。
        } catch (Exception e) {//Exception e=f;
            System.out.println("异常捕获");
        }finally {
            System.out.println("释放资源"); //IO资源  JDBC资源 连接池资源
        }
        return 0;
    }
}

throws 处理异常

抛出异常。抛给调用者。写在方法的后面

public class Test {
    public static void main(String[] args) throws ArithmeticException {
          show(10,0); //调用者可以处理该异常对象。 也可以继续抛出. jvm
          System.out.println("~~~~~~~~~~~~~~~~~~~");
    }
    public static void show(int a,int b)throws ArithmeticException{
         int c=a/b;
    }
}

两种异常类型:

Exception异常: 编译异常

RuntimeException异常: 运行时异常

throw关键字

我们上面产生的异常对象,都是系统自动生成的。我们也可以通过throw这个关键字,人为创建一个异常对象。

语法: throw new 异常类型("异常的信息");

自定义异常类

jdk自带了很多异常类型。我们为了更好的知道异常类型。我们可以自己定义异常类。根据不同的异常名称,判断异常的错误。

public class 异常类名 extends RuntimeException{

      public 异常类名(String msg){
          super(msg);
      }
}

一些常见的异常问题:

1.什么是异常?简述Java的异常处理机制。

异常是程序运行过程中所遇到的错误或者不正常的情况,可能会导致程序终止或者出错。在Java中所有的异常都继承自一个throwable的类,它有error和exception两个子类,而且分为编译错误和运行时错误。

Java的异常处理机制,提供了try-catch和finally块来处理异常。

2.在Java的异常处理机制中,try程序块、catch程序块和finally程序块各起到什么作用?try-catch-finally语句如何使用?

try块:放置可能抛出异常的代码。

catch块:捕获并处理在try中抛出的异常,可有多个catch块来处理不同类型的异常。

finally块:无论是否发出异常,该块内的代码块都会执行,通常用于清理资源

3.谈谈final、finally的区别和作用     

final:是一个修饰符,用于变量,方法和类,表示不可修改的常量,不可重写和不可继承。

finally:是一个关键字,用于异常处理结构中的代码块,确保特定代码在异常发生与否都会执行。

4.如果try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行?

finally块中的代码始终会被执行,无论try块中是否有return,throw或者抛出异常。

5.Error和Exception有什么区别?

Error通常是指程序无法处理的情况,基本上不应在应用程序中捕获。

Exception是程序可以处理的情况,通过捕获和适当的错误处理,可以使程序继续运行。

6.什么是RuntimeException?列举至少4个RuntimeException的子类

 RuntimeException是指程序运行时错误

算术异常

数组索引越界

空指针

输入异常

标签:java,处理,System,catch,int,println,异常,out
From: https://blog.csdn.net/nie6668888/article/details/143952097

相关文章

  • 自然语言处理 (Natural Language Processing, NLP) 全方位解析
    自然语言处理(NaturalLanguageProcessing,NLP)全方位解析引言自然语言处理(NaturalLanguageProcessing,NLP)是一门跨学科的技术,结合了计算机科学、人工智能和语言学,旨在使计算机能够理解、解释和生成人类语言。随着人工智能技术的发展,NLP在各个领域中的应用越来越广......
  • 微信小程序处理后台返回的文件流生成图片
    原生js,文件流变成图片以前写过,今天在微信小程序中也遇到类似的问题 //形参arrayBuffer传入的就是后端返回的文件流arrayBufferToImage:function(arrayBuffer){constfileSystem=wx.getFileSystemManager();constfilePath=wx.env.USER_DATA_PATH+'/tem......
  • 点餐管理系统设计与实现(Java+SpringBoot+MySql)
              目录第1章 绪论1.1选题动因1.2目的和意义1.3论文结构安排第2章 开发环境与技术2.1MySQL数据库2.2 Tomcat介绍2.3 vue技术2.4 SpringBoot框架第3章 系统分析3.1可行性分析3.1.1操作可行性分析3.1.2经济可行性分析......
  • 【Flinkcdc问题解决】java.lang.NoClassDefFoundError: org/apache/flink/shaded/guav
    1.环境介绍Flink1.17+Flinkcdc2.2.12.问题描述使用Flink1.17和Flinkcdc2.2.1环境进行数据加工,但是报以上错误,原因是版本不匹配,flinkcdc2.2.1用的是guava18,但是flink1.17用的是guava30,导致冲突。3.问题解决添加flink-sql-connector-mysql-cdc依赖<dependen......
  • JavaScript网页设计案例:动态交互与用户体验提升
        随着前端开发技术的不断发展,JavaScript已经成为现代网页设计中不可或缺的工具。通过JavaScript,开发者可以为用户提供更为流畅、动态的交互体验,让网页不仅具备美观的视觉效果,更能提高用户的参与感和功能实用性。    本文将通过一个实际案例展示如何使用JavaS......
  • Java中子类构造时可以做的事
    在Java中,当子类的构造方法运行时,第一行默认会调用父类的构造方法(隐式调用super()),或者由显式调用指定的父类构造方法(如super(args...))。这是Java语言规范的一部分,目的是确保在子类实例化之前,父类部分的初始化能够完成。虽然这种调用机制是固定的,但仍有一些方式可以在构造方......
  • 【老白学 Java】Warship v2.0(一)
    Warshipv2.0(一)文章来源:《HeadFirstJava》修炼感悟。上一篇,简版的「Warship」项目终于完工。从本章开始,老白准备在简版基础上进行升级改造,逐步打造出「Warshipv2.0」。开篇前,老白先介绍一下「数组列表」对象,它是这个项目不可缺少的重要工具。如果师兄们感兴趣,可以......
  • Java批量解析微信dat文件,微信图片
    以下是java代码,直接可用,不用手动计算异或值此处的jdk版本需要1.8以上…,另外两个参数(解析文件路径和输出路径)需要改成自己的哦~此处的原理是判断图片文件的十六进制特征码。第一种:weChatImgRevert.javapackagecom;importjava.io.File;importjava.io.FileInputStream;impor......
  • VC++ 中的宏 (#define) 与预处理 (#if/#ifdef/#pragma) 的使用总结
    关键字:宏,预定义宏,预处理,预编译头,VC,#pragma,编译选项,程序区段目录C/C++预定义宏例子:C/C++预定义宏的取值C/C++预定义宏用途:诊断与调试输出CRT的诊断与调试输出:assert,_ASSERT/_ASSERTE,_RPTn/_RPTFn/_RPTWn/_RPTFWnMFC的诊断与调试输出:ASSERT/VERIFY,ASSERT_V......
  • Java从入门到放弃之 IO (三)------- 绝对看的懂,看不懂欢迎私信
    Java从入门到放弃之IO(三)Java从入门到放弃之IO(三)装饰器模式问题背景解决方案就是引入装饰器模式IO流关闭问题Java从入门到放弃之IO(三)装饰器模式在上一篇我们引入了装饰器模式的定义。那么这一章我们进一步,装饰器模式解决什么问题?以及为什么JavaIO要使用装......