Java的异常 Exception

从继承关系可知: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.mfbz.cn/a/343873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

V∗: Guided Visual Search as a Core Mechanism in Multimodal LLMs

摘要 当我们环顾四周并执行复杂任务时,我们如何看待和选择性地处理我们所看到的是至关重要的。然而,这种视觉搜索机制的缺乏,在目前的多模态LLM(MLLM)阻碍了他们的能力,专注于重要的视觉细节,特…

c++:类和对象(2),对象的初始化和清理

目录 构造函数和析构函数 构造函数语法:类名(){} 析构函数语法: ~类名 () {} 例子: 构造函数的分类及调用 两种分类的方式: 三种调用方法: 括号法​编辑 显示法 隐式转换法 拷贝构造函数调用时…

Python range函数

Python中的range()函数是一个强大的工具,用于生成一系列的整数。它在循环、迭代和序列生成等方面都有广泛的应用。本文将深入探讨range()函数的用法,提供详细的示例代码,并讨论其在Python编程中的实际应用。 什么是range()函数? …

springboot导出数据到excel模板,使用hutool导出数据到指定excel,java写入数据到excel模板

最近遇到一个需求,需要从数据库查询数据,写入到对应的excel导入模板中。再把导出的数据进行修改,上传。 我们项目用的是easyExcel,一顿百度搜索,不得其法。 主要是要把数据填充到指定单元格中,跟平时用到的…

计算机网络实验二:Packet Tracer的简单使用

目录 实验二:Packet Tracer的简单使用 2.1 实验目的 2.2 实验步骤 2.2.1 构建网络拓扑 2.2.2 配置各网络设备 2.2.3 网络功能验证测试 2.3 实验总结 实验二:Packet Tracer的简单使用 2.1 实验目的 ①练习packet tracer仿真软件的安装&#xff1…

mc我的世界服务器多少钱一个月?

我的世界服务器多少钱一个月?低至7元一个月,阿里云和腾讯云均可以选择mc服务器,阿里云2核2G3M轻量服务器87元一年、腾讯云轻量2核2G3M服务器88元一年,阿里云ECS云服务器2核2G3M带宽99元一年,腾讯云2核4G5M带宽轻量应用…

活动回顾丨云原生技术实践营上海站「云原生 AI 大数据」专场(附 PPT)

AI 势不可挡,“智算”赋能未来。2024 年 1 月 5 日,云原生技术实践营「云原生 AI &大数据」专场在上海落幕。活动聚焦容器、可观测、微服务产品技术领域,以云原生 AI 工程化落地为主要方向,希望帮助企业和开发者更快、更高效地…

菜鸡后端的前端学习记录

前言 记录一下看视频学习前端的的一些笔记,以前对Html、Js、CSS有一定的基础(都认得,没用过),现在不想从头再来了,学学Vue框架,不定时更新,指不定什么时候就鸽了。。。。 Vue2 01…

初识汇编指令

1. ARM汇编指令 目的 认识汇编, 从而更好的进行C语言编程 RAM指令格式: 了解 4字节宽度 地址4字节对齐 方便寻址 1.1 指令码组成部分 : condition: 高4bit[31:28] 条件码 0-15 (16个值 ) 条件码: 用于指令的 条件执行 , ARM指定绝大部分 都可…

Linux之快速入门(CentOS 7)

文章目录 一、Linux目录结构二、常用命令2.1 切换用户2.2查看ip地址2.3 cd2.4 目录查看2.5 查看文件内容2.6 创建目录及文件2.7 复制和移动2.82.93.0 一、Linux目录结构 目录作用/bin是 Binaries (二进制文件) 的缩写,这个目录存放着最经常使用的命令/dev是 Device(设备) 的缩写…

【GitHub项目推荐--不错的Rust开源项目】【转载】

01 Rust 即时模式 GUI 库 egui 是一个简单、快速且高度可移植的 Rust 即时模式 GUI 库,可以轻松地将其集成到你选择的游戏引擎中,旨在成为最易于使用的 Rust GUI 库,以及在 Rust 中制作 Web 应用程序的最简单方法。 项目地址:ht…

go 依赖注入设计与实现

在现代的 web 框架里面,基本都有实现了依赖注入的功能,可以让我们很方便地对应用的依赖进行管理,同时免去在各个地方 new 对象的麻烦。比如 Laravel 里面的 Application,又或者 Java 的 Spring 框架也自带依赖注入功能。 今天我们…

【ASOC全解析(一)】ASOC架构简介和欲解决的问题

【ASOC全解析(一)】ASOC架构简介和欲解决的问题 一、什么是ASOC以及ASOC解决的三个问题二、ASOC的组成与功能解决第一个问题解决第二个问题解决第三个问题 三、ASOC基本工作原理 /********************************************************************…

Parade Series - Android Studio

硬件支持 CPU i7 RAM 16Gb -------------- ------- Java 3Gb Android 33GbJava Enviroment C:\ ├─ Java │ ├─ jdk1.8.0_181 │ ├─ jre1.8.0_181 │ ├─ maven-3.8.5 │ └─ gradle-6.5 └─ Cache├─ gr…

基于中文垃圾短信数据集的经典文本分类算法实现

垃圾短信的泛滥给人们的日常生活带来了严重干扰,其中诈骗短信更是威胁到人们的信息与财产安全。因此,研究如何构建一种自动拦截过滤垃圾短信的机制有较强的实际应用价值。本文基于中文垃圾短信数据集,分别对比了朴素贝叶斯、逻辑回归、随机森…

哈希--73. 矩阵置零/medium 理解度A

73. 矩阵置零 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,…

Overleaf(LaTeX文档在线编写平台)使用学习记录

一、LaTeX简概[1] LaTeX,是一种基于TEX的排版系统,是一种可以处理排版和渲染的标记语言。由美国计算机科学家莱斯利兰伯特在20世纪80年代初期开发,利用这种格式系统的处理,即使用户没有排版和程序设计的知识也可以充分发挥由TEX所…

CACTER邮件安全网关独家安全解决方案——保障企业邮件系统安全

随着科技的不断发展,网络攻击技术也在不断演变,尤其是在电子邮件领域,各种高级变种威胁层出不穷,比如定制化的钓鱼邮件和带有高级恶意软件的邮件等。这些威胁邮件往往能够绕过传统的安全防护措施,包括反垃圾邮件、反钓…

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

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

pikachu_csrf通关攻略

csrf(get) 打开pikachu靶场: 1. 根据提示给的账户密码进行登录 2. 打开代理拦截数据包将拦截数据发送到已打开的burp中: 修改数据进行发包: 从上面的url可见,修改用户信息的时候,是不带任何不…
最新文章