Java的异常 Exception

news2024/12/23 20:55:07

从继承关系可知:Throwable 是异常体系的根,它继承自Object 。Throwable 有两个体系: Error 和Exception.

Error表示严重的错误,程序对此一般无能为力,例如:

  • OutOfMemoryError :内存耗尽
  • NoClassDefFoundError :无法加载某个Class
  • StackOverflowError :虚拟机栈溢出

Exception则是运行时的错误,它可以被捕获并处理。某些异常是应用程序逻辑处理的一部分,应该捕获并处理。
例如: 

  • NumberFormatException:数值类型的格式错误
  • FileNotFoundException:未找到文件
  • SocketException :读取网络失败

还有一些异常是程序逻辑编写不对造成的, 应该修复程序本身。例如:

  • NullPointerException: 对某个nu1l 的对象调用方法或字段
  • IndexOutOfBoundsException  :数组索引越界

Exception又分为两大类:

  • RuntimeException以及它的子类;
  • 非RuntimeException(包括( IOException 、ReflectiveOperationException等)

 异常的捕获:

        捕获异常使用try...catch 语句,把可能发生异常的代码放到try {...} 中,然后使用catch 捕获对应的Exception及子类

Java使用异常来表示错误,并通过try ... catch 捕获异常;
Java的异常是class(类) ,并且从Throwable 继承;
Error是无需捕获的严重错误,Exception 是应该捕获的可处理的错误;
RuntimeException无需强制捕获,非RuntimeException (Checked Exception)需强制捕获,或者用throws 声明;
不推荐捕获了异常但不进行任何处理。

package com.ztt.Demo01;

import java.util.Scanner;

//编译错误:语法错误,编译器报错
//异常:运行期间,由于客观原因导致的运行“错误”
public class demo01 {
	public static void main(String[] args) {
		try (Scanner in=new Scanner(System.in)){
			//获取输入是,可能产生InputMismatchException
			int n1=in.nextInt();
			int n2=in.nextInt();
			
			//计算除法时,可能产生ArithmeticException
			System.out.printf("%d÷%d=%d",n1,n2,n1/n2);
			
		} 
		
	}
}

运行结果:

a
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at com.ztt.Demo01.demo01.main(demo01.java:11)

5 0
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.ztt.Demo01.demo06.main(demo06.java:23)

package com.ztt.Demo01;

public class demo02 {
	public static void main(String[] args) {

		int[] ns = { 11,12,13,14,15 };
		
		System.out.println(ns[0]);
		System.out.println(ns[ns.length - 1]);
		
		//由于下标超出范围,产生数组下标越界ArrayIndexOutOfBoundsException
		// System.out.println(ns[99]);
		
		String s ="但使龙城飞将在";
		System.out.println(s.charAt(0));
		System.out.println(s.charAt( s.length()-1));
		
		//由于下标超出范围,产生字符串下标越界stringIndexOutOfBoundsException
		System.out.println(s.charAt(99));
	}

}

运行结果:

11
15
但
在
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: index 99, length 7
	at java.base/java.lang.String.checkIndex(String.java:4561)
	at java.base/java.lang.StringUTF16.checkIndex(StringUTF16.java:1624)
	at java.base/java.lang.StringUTF16.charAt(StringUTF16.java:1421)
	at java.base/java.lang.String.charAt(String.java:1515)
	at com.ztt.Demo01.demo02.main(demo02.java:19)
package com.ztt.Demo01;

import java.util.Random;

public class demo03 {

	public static void main(String[] args) {
		
		int[] ns = null;
		
		//试图访问一个为null的数组时,会产生
		//空指针异常NullPointerException
		//System.out.println(ns.length);
		//System.out.println(ns[0]);
		
		//试图访问一个为null的对象时,会产生
		//NullPointerException
		String s = null;
		System.out.println(s.trim());
		
		Random rand = null;
		if(3 >5){
			rand = new Random();
		}
		System.out.println(rand.nextBoolean());
	}

}

运行结果:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.trim()" because "s" is null
	at com.ztt.Demo01.demo03.main(demo03.java:19)
package com.ztt.Demo01;

public class demo04 {
	public static void main(String[] args) {
		doSth();//第一次调用
	}
	
	//引发StackOverflowError堆栈溢出
	private static void doSth() {
		//无限层次循环
		doSth();
	}
}

运行结果:

Exception in thread "main" java.lang.StackOverflowError
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
	at com.ztt.Demo01.demo04.doSth(demo04.java:11)
package com.ztt.Demo01;

public class demo05 {

	public static void main(String[] args) {
		// OutOfMemoryError:内存溢出
		// 对内存申请大容量空间,内存不足时
		byte[] arr1=new byte[2147483647];
		byte[] arr2=new byte[2147483647];
		byte[] arr3=new byte[2147483647];
	}

}

运行结果:

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
	at com.ztt.Demo01.demo05.main(demo05.java:8)
package com.ztt.Demo01;


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

public class demo06 {
	public static void main(String[] args) {
		//try:包围可能产生异常的代码块,如果产生异常,系统会根据异常产生的原因,创建一个异常对象
		//catch:捕获异常,处理异常
		try (Scanner in=new Scanner(System.in)){
			//获取输入是,可能产生InputMismatchException
			
			//输入非法的内容:a
			//JVM创建一个InputMismatchException类型的异常对象,并抛出
			//程序会从try块退出
			
			int n1=in.nextInt();//输入a
			
			int n2=in.nextInt();
			
			//计算除法时,可能产生ArithmeticException
			System.out.printf("%d÷%d=%d",n1,n2,n1/n2);
		}catch(NullPointerException ex) {
			System.out.println("哎呦,空指针了!");
		}catch(InputMismatchException ex) {
			System.out.println("哎呦,输入错误了!");
		}
	}
}

运行结果:

a
哎呦,输入错误了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1406557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web安全学习笔记【05】——反弹Shell、正反向连接

思维导图 #知识点: 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&am…

软件安全测试的重要性简析,专业安全测试报告如何申请?

在当今数字化时代,软件在我们的日常生活中扮演着至关重要的角色,但也带来了各种潜在的安全威胁。为了保障用户的信息安全和维护软件的可靠性,软件安全测试显得尤为重要。 软件安全测试是指通过一系列的方法和技术,对软件系统中的…

BACnet转Modbus协议转换网关BA111

随着通讯技术和控制技术的发展,为了实现楼宇的高效、智能化管理,集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下,高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生,广泛应用于楼宇自控和暖通空调系统应用中…

Webpack5 基本使用 - 2

常用 loader loader 是辅助打包工具。webpack 默认只能打包 js 文件,打包其它模块就需要配置 loader 来告诉 webpack 该怎么去打包其它文件。loader 可以将文件从不同的语言转换为 JavaScript。一类文件如果需要多个 loader 处理,loader 的执行顺序是从…

数据采集与预处理01: 项目1 数据采集与预处理准备

数据采集与预处理01: 项目1 数据采集与预处理准备 任务1 认识数据采集技术,熟悉数据采集平台 数据采集:足够的数据量是企业大数据战略建设的基础,因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环&#…

《WebKit 技术内幕》学习之十二(2):安全机制

2 沙箱模型 2.1 原理 一般而言,对于网络上的网页中的JavaScript代码和插件是不受信的(除非是经过认证的网站),特别是一些故意设计侵入浏览器运行的主机代码更是非常危险,通过一些手段或者浏览器中的漏洞&#xff0c…

在SpringBoot中基于CanvasLabel的地震基础信息展示实践

目录 前言 一、数据库设计 1、数据库设计 2、sql脚本 3、数据记录 二、SpringBoot后台设计与实现 1、Mapper访问层及实体定义 2、Service层实现 3、控制层实现 三、地震信息展示 1、展示数据接入 2、最终效果 总结 前言 在上一篇博客中,对于在Leafle…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术,用于识别文本中每个词的词性,例如名词、动词、形容词等; 词性标注也被称为语法标注或词类消疑,是语料库语言学中将语料库内单词…

mockjs使用(2)

mockjs使用(1) 4、Mock 4.1 Mock.mock() 根据数据模版生成模拟数据 Mock.mock( rurl?, rtype?, template|function(options) )问号代表该参数不必填 4.1.1 各参数及其默认值 rurl: 不必填。表示需要拦截的URL,可以使URL字符串或URL正…

解决方案 | 基于SFTP协议的文件传输断点续传Java实现方案

背景 因项目需要,我们服务每天都需要通过SFTP协议来对接上下游进行文件传输,但是对于一些大文件,在与第三方公司的服务器对接过程中很可能会因为网络问题或上下游服务器性能问题导致文件上传或者下载被中断,每次重试都需要重新对…

【Python进阶编程】python编程高手常用的设计模式(持续更新中)

Python编程高手通常熟练运用各种设计模式,这些设计模式有助于提高代码的可维护性、可扩展性和重用性。 以下是一些Python编程高手常用的设计模式: 1.单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供全局…

PLC协议转BACnet网关BA107

随着通讯技术和控制技术的发展,为了实现楼宇的高效、智能化管理,集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下,高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生,广泛应用于楼宇自控和暖通空调系统应用中…

静态分析C语言生成函数调用关系的利器——cflow(二)

大纲 环境准备选择项目分析代码简单分析高级分析坑:不能显示main函数所有调用函数的调用栈坑2:重定义错误坑3:缺失编译时产生的文件坑4:缺失工程的头文件包含路径指定坑5:操作系统的坑只存在于windows操作系统上的文件…

大型语言模型 (LLM)全解读

一、大型语言模型(Large Language Model)定义 大型语言模型 是一种深度学习算法,可以执行各种自然语言处理 (NLP) 任务。 大型语言模型底层使用多个转换器模型, 底层转换器是一组神经网络。 大型语言模型是使用海量数据集进行训练…

服务器数据恢复—EVA存储raid5硬盘离线的数据恢复案例

服务器数据恢复环境: 某品牌EVA某型号存储,底层是RAID5阵列,划分了若干lun。 服务器故障&分析: 该存储设备中raid5阵列有两块硬盘掉线,存储中的lun丢失。 将故障服务器存储中的所有磁盘编号后取出,硬件…

web安全思维导图(白帽子)

web安全思维导图(白帽子) 客户端脚本安全 服务端应用安全 白帽子讲web安全 安全运营体系建设

外网ssh远程连接服务器

文章目录 外网ssh远程连接服务器一、前言二、配置流程1. 在服务器上安装[cpolar](https://www.cpolar.com/)客户端2. 查看版本号,有正常显示版本号即为安装成功3. token认证4. 简单穿透测试5. 向系统添加服务6. 启动cpolar服务7. 查看服务状态8. 登录后台&#xff0…

Unity之Cinemachine教程

前言 Cinemachine是Unity引擎的一个高级相机系统,旨在简化和改善游戏中的相机管理。Cinemachine提供了一组强大而灵活的工具,可用于创建令人印象深刻的视觉效果,使开发人员能够更轻松地掌控游戏中的摄像机行为。 主要功能和特性包括&#x…

JAVA算法—排序

目录 *冒泡排序: *选择排序: 插入排序: 快速排序: 总结: 以下全部以升序为例 *冒泡排序: 引用: 在完成升序排序时,最大的元素会经过一轮轮的遍历逐渐被交换到数列的末尾&#…

网络安全的使命:守护数字世界的稳定和信任

在数字化时代,网络安全的角色不仅仅是技术系统的守护者,更是数字社会的信任保卫者。网络安全的使命是保护、维护和巩固数字世界的稳定性、可靠性以及人们对互联网的信任。本文将深入探讨网络安全是如何履行这一使命的。 第一部分:信息资产的…