Java,异常处理,异常的概述

news/2024/11/29 18:34:23/

异常指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致jvm的非正常停止。

异常的抛出机制:

Java把不同的异常用不同的类表示,一旦出现某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)到这个异常对象,那么这个异常对象将会导致程序终止。

对待异常:

对于程序出现的异常,一般有两种解决办法:

①遇到错误就终止程序的运行。

②程序员在编写程序时,就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及异常的处理,保证代码的健壮性。

异常的体系结构:

①Throwable:

java.lang.Throwable类是Java程序执行过程中发生的异常事件对应的类的根父类。

Throwable中常用的方法:

·public void printStackTrace( ):打印异常的详细信息。

包含了异常的类型、异常的原因、异常出现的位置、在开发和调试阶段都得使用printStackTrace。

·public String getMessage( ):获取发生异常的原因。

②Error和Exception

Throwable可以分为两类:Error和Exception。分别对应着java.lang.Error和java.lang.Exception两个类。

Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。

例如:StackOverflowError(栈内存溢出)和OutOfMemoryError(堆内存溢出,简称OOM)。

Exception(异常):其他因程序错误或偶然的外在因素导致的一般性问题,需要使用针对性的代码进行处理,使程序继续运行。否则一旦程序发生异常,程序也会挂掉。例如:

·空指针访问

·试图读取不存在的文件-

·网络连接中断

·数组角标越界

根据异常可能出现的阶段,可以将异常分为:

·编译时异常(也称为,受检异常)(不是RuntimeException的其他的……Exception都是编译时异常)

常见的有:

ClassNotFoundException、FileNotFound、IOException

·运行时异常(也称为非受检异常)(RuntimeException)

常见的运行时异常和演示如下:

import java.util.Date;
import java.util.Scanner;public class ErrorTest
{public static void main(String[] args){//举例1:死递归,栈内存溢出的错误  (Exception in thread "main" java.lang.StackOverflowError)//main(args);//举例2:OutOfMemoryError//byte[] arr = new byte[1024*1024*100];//假设堆空间最大为10mb,此处为100mb
//        int[] arr = new int[10];
//        System.out.println(arr[10]);            //ArrayIndexOutOfBoundsExceptionErrorTest ee = new ErrorTest();String str = new String();//ee.test1();//ee.test2();
//        ee.test3(str);
//        ee.test4();ee.test5();}public void test1(){String str = "aaa";int i = Integer.parseInt(str);           //NumberFormatExceptionSystem.out.println(i);}public void test2(){Scanner scan = new Scanner(System.in);int num = scan.nextInt();//若输入abc      //InputMismatchExceptionSystem.out.println(num);}public void test3(Object o){Date dd = (Date) o;//类转换异常          //ClassCastException}public void test4(){int[] arr = new int[2];arr = null;//空指针访问异常System.out.println(arr[0]);              //NullPointerException}public void test5(){int num = 10;int a = num/0;//分母不能为零               //ArithmeticExceptionSystem.out.println(a);//算术异常}}


http://www.ppmy.cn/news/1200324.html

相关文章

TCP IP 网络编程(七) 理解select和epoll的使用

文章目录 理解select函数select函数的功能和调用顺序设置文件描述符设置监视范围及超时select函数调用示例 优于select的epoll基于select的I/O复用速度慢实现epoll时必要的函数和结构体epoll_createepoll_ctlepoll_wait基于epoll的服务器端 边缘触发和水平触发 理解select函数 …

小仙女必备,1分钟就能做出精美的电子相册

不知道大家有没有这样的困惑,手机里的照片太多,长久以来很多照片都容易被忘记。这个时候我们就可以将照片制作成电子相册,方便我们随时回味那些照片里的故事。如何制作呢? 制作电子相册只需要一个简单实用的制作工具就可以轻松完成…

【ARMv8 SIMD和浮点指令编程】浮点加减乘除指令——四则运算

浮点指令有专门的加减乘除四则运算指令,比如 FADD、FSUB、FMUL、FDIV 等。 1 FADD (scalar) 浮点加法(标量)。该指令将两个源 SIMD&FP 寄存器的浮点值相加,并将结果写入目标 SIMD&FP 寄存器。 该指令可以产生浮点异常。根据 FPCR 中的设置,异常会导致在 FPSR 中…

【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入输出、缺省参数、函数重载)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 非递归版本 -- C语言实现)-CSDN博客 引入:什么是C C语言是结构化和模块化的…

Arthas使用技巧

阿里Java诊断工具 arthas - 排查线上环境内存使用过大、线程cpu使用率高问题_arthas排查内存高问题-CSDN博客 arthas--vmtool查看内存对象_arthas查看对象_韩师学子--小倪的博客-CSDN博客

Redis高级数据类型-HyperLogLogBitmap以及使用两种数据类型完成网站数据统计

网站数据统计 定义相关的Redis Key /*** 单日UV*/public static String getUVKey(String date) {return PREFIX_UVSPLITdate;}/*** 记录区间UV* param startData 开始日期* param endDate 结束日期* return*/public static String getUVkey(String startData,String endDate){r…

viple入门(一)

(1)数据活动 用于放置数据,可以是整数类型(整型)、双精度浮点类型、字符串类型、字符类型、布尔类型的数据。 特点:数据活动可自动识别数据对应的数据类型。 (2)变量活动 定义变量…

【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库

为什么需要开发自己的 Go 库 在编程语言中,包(Package)和库(Library)是代码组织和复用的重要工具。在 Go 中,包是代码的基本组织单位,每个 Go 程序都由包构成。包的作用是帮助组织代码&#xf…