当前位置: 首页 > news >正文

250213-异常exception

1. 概念

异常的抛出(throw):若在方法运行中出现错误,则方法会生成代表该异常的一个对象,并把它交给运行时系统,这个过程叫做抛出。

异常的捕获(catch):运行时系统接收到该异常对象,然后找到处理这一异常的方法的过程称为捕获。


2. java中几种常见的异常处理类:

(1)算术异常(ArithmeticException):当算术运算中出现了除以零这样的运算就会出这样的异常。
(2)空指针异常(NullPointerException):没有给对象开辟内存空间却使用该对象时会出现空指针异常。
(3)文件未找到异常(FileNotFoundException):当程序试图打开一个不存在的文件进行读写时将会引发该异常。经常是由于文件名给错,或者要存储的磁盘、CD-ROM等被移走,没有放入等原因造成。
(4)数组下标越界异常(ArrayIndexOutOfBoundsException):对于一个给定的大小的数组,如果数组的索引超过上限或低于下限都造成越界。
(5)内存不足错误(OutOfMemoryException):当可用内存不足以让Java虚拟机分配-个对象时抛出该错误。

除了上面内置的处理类,用户也可以自定义异常处理类。

3. 实例

public class DealException
{
	public static void main(String[] args)
	{
		try{
			int[] arr=new int[5];
			arr[5]=4;
			System.out.println("我能到这一步吗");
		}
		catch(ArrayIndexOutOfBoundsException ex)  //如果try块捕捉到异常对象,则会将该对象
                                                  //与catch块中异常类的实例化对象进行匹配
		{
			System.out.println("数组赋值超出索引范围!");
			System.out.println("异常"+ex);  //打印异常对象信息
			ex.printStackTrace();  //查看异常对象的详细信息
		}
		finally{
			System.out.println("main()方法执行完毕。");
		}
	}
}
/*输出结果:
数组赋值超出索引范围!
异常java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
	at DealException.main(DealException.java:7)
main()方法执行完毕。*/

4. 异常类的处理模式

首先是try块捕捉异常对象(这里的异常对象是JVM自动实例化的),然后逐一与catch方法里的异常类的实例对象进行匹配,匹配成功则由该catch方法处理异常,然后运行finally块,然后执行程序中的其他代码;若与所有的catch方法都不匹配,则运行finally块,然后交由JVM处理(输出异常信息、终止程序运行)。

注意,finally块不是必须的,可以忽略。

由3中的实例可看到,try-catch-finally是放在方法内的。

5. throws关键字

使用throw关键字的方法表明其不处理异常,而是将异常抛给调用该方法的方法,

throws语句后无需分号。实例如下:

public class ThrowsDemo
{
	public static void main(String[] args)
	{
		try{
			int[] arr=new int[5];
			setZero(arr,9);
		}
		catch(ArrayIndexOutOfBoundsException ex)  
		{
			System.out.println("数组赋值超出索引范围!");
			System.out.println("异常"+ex);  //打印异常对象信息
			ex.printStackTrace();  //查看异常对象的详细信息
		}
		System.out.println("main()方法执行完毕。");
	}

	private static void setZero(int[] arr,int index)
	throws ArrayIndexOutOfBoundsException
	{
		arr[index]=0;
	}
}
/*输出结果
数组赋值超出索引范围!
异常java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 5
java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 5
	at ThrowDemo.setZero(ThrowDemo.java:21)
	at ThrowDemo.main(ThrowDemo.java:7)
main()方法执行完毕。*/

6. throw关键字

背景:用户希望try块出现的异常对象能由自己手动实例化。

throw语句的格式:throw 异常类型的实例;(注意,带分号)。执行该条语句后则会抛出一个指定异常类型的异常对象。

7. 小结

综合前述的知识,在实际应用中,try-catch-finally、throws、throw常常联合使用。

8. Exception类和RuntimeException类

相关文章:

  • RabbitMQ学习—day2—安装
  • 介绍下SpringBoot如何处理大数据量业务
  • 51单片机俄罗斯方块计分函数
  • linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上
  • CF Round 997 记录 题解 (div. 2 A - E)
  • 机器学习-监督学习
  • C++模板编程——typelist的实现
  • Unity-Mirror网络框架-从入门到精通之Pong示例
  • 【漫话机器学习系列】091.置信区间(Confidence Intervals)
  • (2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)
  • HCIA-Datacom笔记2:网络类型与网络拓扑
  • Linux权限提升-内核溢出
  • springboot241-springboot在线教学平台(源码+论文+PPT+部署讲解等)
  • 物联网平台-分布式的设备接入与管理系统
  • 探索DeepSeek:开源大模型领域的中国力量
  • 通过docker启用rabbitmq插件
  • 【gRPC-gateway】auth-通过拦截器从上下文中提取元数据用于认证,与从http header转发待认证数据到上下文进行验证,go案例
  • DeepSeek和ChatGPT的对比
  • KaiOS 4.0 APN List 界面加载debug
  • Linux 远程文件复制传输-----scp/rsync/sftp
  • 用dw做的网页怎么连到网站上/百度推广效果怎么样
  • 网站设计公司 宁波/品牌推广工作内容
  • flask做的网站如何上传/微信营销软件哪个好用
  • 网站开发者工具/手机营销软件
  • 自己做网站视频教程/软文推广有哪些
  • 网站建设营销型/企业关键词排名优化网址