Java声明和抛出异常:throws声明异常、throw抛出异常、throw和throws的区别

深度学习笔记(1)机器学习与深度学习基础 一些深度学习的简单概念Transformer的学习。 阅读详情

Java 中的异常处理除了包括捕获异常和处理异常之外,还包括声明异常和拋出异常,可以通过 throws 关键字在方法上声明该方法要拋出的异常,然后在方法内部通过 throw 拋出异常对象。本节详细介绍在 Java 中如何声明异常和拋出异常。

throws 关键字和 throw 关键字在使用上的几点区别如下

  • throws 用来声明一个方法可能抛出的所有异常信息,throw 则是指拋出的一个具体的异常类型。
  • 通常在一个方法(类)的声明处通过 throws 声明方法(类)可能拋出的异常信息,而在方法(类)内部通过 throw 声明一个具体的异常信息。
  • throws 通常不用显示地捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw 则需要用户自己捕获相关的异常,而后再对其进行相关包装,最后将包装后的异常信息抛出。

throws 声明异常

当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部声明这个异常,以便将该异常传递到方法的外部进行处理。可以使用 throws 关键字在方法的头部声明一个异常,其具体格式如下:

returnType method_name(paramList) throws Exception 1,Exception2,…{…}


其中,returnType 表示返回值类型,method_name 表示方法名,Exception 1,Exception2,… 表示异常类。如果有多个异常类,它们之间用逗号分隔。这些异常类可以是方法中调用了可能拋出异常的方法而产生的异常,也可以是方法体中生成并拋出的异常。

例 1

创建一个 readFile() 方法,该方法用于读取文件内容,在读取的过程中可能会产生 IOException 异常,但是在该方法中不做任何的处理,而将可能发生的异常交给调用者处理。在 main() 方法中使用 try catch 捕获异常,并输出异常信息。代码如下:

 
  1. import java.io.FileInputStream;
  2. import java.io.IOException;
  3. public class Test04
  4. {
  5. public void readFile() throws IOException
  6. {
  7. //定义方法时声明异常
  8. FileInputStream file=new FileInputStream("read.txt"); //创達 FileInputStream 实例对象
  9. int f;
  10. while((f=file.read())!=-1)
  11. {
  12. System.out.println((char)f);
  13. f=file.read();
  14. }
  15. file.close();
  16. }
  17. public static void main(String[] args)
  18. {
  19. Throws t=new Test04();
  20. try
  21. {
  22. t.readFile(); //调用 readFHe()方法
  23. }
  24. catch(IOException e)
  25. { //捕获异常
  26. System.out.println(e);
  27. }
  28. }
  29. }


以上代码,首先在定义 readFile() 方法时用 throws 关键字声明在该方法中可能产生的异常,然后在 main() 方法中调用 readFile() 方法,并使用 catch 语句捕获产生的异常。

注意:在编写类继承代码时要注意,子类在覆盖父类带 throws 子句的方法时,子类的方法声明中的 throws 子句不能出现父类对应方法的 throws 子句中没有的异常类型,因此 throws 子句可以限制子类的行为。也就是说,子类方法拋出的异常不会超过父类定义的范围。

throw 拋出异常

throw 语句用来直接拋出一个异常,后接一个可拋出的异常类对象,其语法格式如下:

throw ExceptionObject;


其中,ExceptionObject 必须是 Throwable 类或其子类的对象。如果是自定义异常类,也必须是 Throwable 的直接或间接子类。例如,以下语句在编译时将会产生语法错误:

 
  1. throw new String("拋出异常"); //因为String类不是Throwable类的子类


当 throw 语句执行时,它后面的语句将不执行,此时程序转向调用者程序,寻找与之相匹配的 catch 语句,执行相应的异常处理程序。如果没有找到相匹配的 catch 语句,则再转向上一层的调用程序。这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。

例 2

在某仓库管理系统中,要求管理员的用户名需要由 8 位以上的字母或者数字组成,不能含有其他的字符。当长度在 8 位以下时拋出异常,并显示异常信息;当字符含有非字母或者数字时,同样拋出异常,显示异常信息。代码如下:

 
  1. import java.util.Scanner;
  2. public class Test05
  3. {
  4. public boolean validateUserName(String username)
  5. {
  6. boolean con=false;
  7. if(username.length()>8)
  8. { //判断用户名长度是否大于8位
  9. for(int i=0;i<username.length();i++)
  10. {
  11. char ch=username.charAt(i); //获取每一位字符
  12. if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
  13. {
  14. con=true;
  15. }
  16. else
  17. {
  18. con=false;
  19. throw new IllegalArgumentException("用户名只能由字母和数字组成!"");
  20. }
  21. }
  22. }
  23. else
  24. {
  25. throw new IllegalArgumentException("用户名长度必须大于 8 位!");
  26. }
  27. return con;
  28. }
  29. public static void main(String[] args)
  30. {
  31. Test05 te=new Test05();
  32. Scanner input=new Scanner(System.in);
  33. System.out.println("请输入用户名:");
  34. String username=input.next();
  35. try
  36. {
  37. boolean con=te.validateUserName(username);
  38. if(con)
  39. {
  40. System.out.println("用户名输入正确!");
  41. }
  42. }
  43. catch(IllegalArgumentException e)
  44. {
  45. System.out.println(e);
  46. }
  47. }
  48. }


如上述代码,在 validateUserName() 方法中两处拋出了 IllegalArgumentException 异常,即当用户名字符含有非字母或者数字以及长度不够 8 位时。在 main() 方法中,调用了 validateUserName() 方法,并使用 catch 语句捕获该方法可能拋出的异常。

运行程序,当用户输入的用户名包含非字母或者数字的字符时,程序输出异常信息,如下所示。

 
  1. 请输入用户名:
  2. administrator@#
  3. java.lang.IllegalArgumentException: 用户名只能由字母和数字组成!


当用户输入的用户名长度不够 8 位时,程序同样会输出异常信息,如下所示。

请输入用户名:
admin
java.lang.IllegalArgumentException: 用户名长度必须大于 8 位!
VCL for PHP,Konopka Signature VCL Controls (Raize Components 6.2.3) for Delphi 10.4 The Raize Components suite includes a variety of interface design tools for Delphi programming language and C ++ Builder, which includes over 125 VCL controls and over 100 different tools for creating... 阅读详情

相关推荐

openlayers6【十九】vue HeatmapLayer热力图层实现热力图效果详解

文章目录1. 写在前面2. Heatmap 类实现热力图2.1 Heatmap 参数2.2 实现热力图3. 完整代码4. 添加删除map图层的方法5. 热力图自身的get,set方法 1. 写在前面 我们主要看热力图的效果,区域绘制效怎么设置详细内容可以访问 openlayers6【十七】vue VectorLayer矢量图层画地图省市区,多省市区(粤港澳大湾区)效果详解 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap L

@必意玲 1万+

抛出异常声明异常

然后当调用者调用此方法时会有错误提示,方法的调用再进行处理(也可以声明抛出或使用捕获异常解决这个问题),声明抛出异常最多到main方法,main是由JVM虚拟机执行,最终由JVM虚拟机报出这个异常终止程序执行。,抛出异常是指在方法体内手动抛出异常错误,与系统直接报错相同也会导致程序的异常终止,但是可以自定义异常信息,一般常用于抛出编译期异常(必须做处理)声明异常是指将当前方法中的异常声明抛出,告诉调用者我这里可能会存在异常,但是我没有处理,让调用者处理,有点踢皮球的意思。

故常无,欲以观其妙;常有,欲以观其徼; 913

鱼眼相机矫正实战:除了棋盘格,试试横向展开经纬度法(OpenCV4/C++实现对比)

本文对比了鱼眼相机矫正的三种主流方法:棋盘格标定法、横向展开法经纬度法,通过OpenCV4/C++实战代码解析,帮助开发者在自动驾驶、VR全景拼接安防监控等场景中选择最适合的技术方案。重点分析了各方法的精度、处理速度适用场景,为工程实践提供实用指导。

weixin_29032489的博客 258

Java - 异常(三)- 声明异常throws手动抛出异常throw

Java异常对象的生成有两种方式:由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,那么针对当前代码,就会在后台自动创建一个对应异常类的实例对象并抛出。由开发人员手动创建:new 异常类型([实参列表]);,如果创建好的异常对象不抛出对程序没有任何影响,创建一个普通对象一样,但是一旦throw抛出,就会对程序运行产生影响了。在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,

weixin_40968325的博客 3253

JAVA 异常处理——声明抛出异常

JAVA 异常处理

m0_59586434的博客 3559

java 异常

/*捕获异常的三种格式:*/ /*第一种格式*/ try { } catch () { } /*第二种格式*/ try { } catch () { } finally { } /*第三种格式*/ try { } finally { } //记住一点:catch适用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是检测时异常(非RuntimeException运行

白夜行 997

java异常声明、捕获、抛出、处理(throwsthrow、try-catch详解)

此时我们在处理用户名密码错误的时候可能就需要抛出两种异常. 我们可以基于已有的异常类进行扩展(继承), 创建我们业务相关的异常类.自定义异常类,然后继承自Exception 或者 RunTimeException实现一个带有String类型参数的构造方法,参数含义:出现异常的原因如下面这个例子我们定义一个类继承Exception并且调用参数的构造方法用于提示造成异常的原因。

baixian110的博客 3303

java 抛出声明_Java声明抛出异常throws声明异常throw抛出异常throwthrows区别...

Java 中的异常处理除了包括捕获异常处理异常之外,还包括声明异常拋出异常,可以通过 throws 关键字在方法上声明该方法要拋出的异常,然后在方法内部通过 throw 拋出异常对象。本节详细介绍在 Java 中如何声明异常拋出异常throws 关键字 throw 关键字在使用上的几点区别如下:throws 用来声明一个方法可能抛出的所有异常信息,throw 则是指拋出的一个具体的异常类...

weixin_35261385的博客 424

java声明抛出_Java声明抛出异常throws声明异常throw抛出异常throwthrows区别...

Java 中的异常处理除了包括捕获异常处理异常之外,还包括声明异常拋出异常,可以通过 throws 关键字在方法上声明该方法要拋出的异常,然后在方法内部通过 throw 拋出异常对象。本节详细介绍在 Java 中如何声明异常拋出异常throws 关键字 throw 关键字在使用上的几点区别如下:throws 用来声明一个方法可能抛出的所有异常信息,throw 则是指拋出的一个具体的异常类...

weixin_42394257的博客 206

Javathrowthrows有什么区别

一、说明: 1、throw 在方法体内使用,throws 在方法声明上使用; 2、throw 后面接的是异常对象,只能接一个。throws 后面接的是异常类型,可以接多个,多个异常类型用逗号隔开; 3、throw 是在方法中出现不正确情况时,手动来抛出异常,结束方法的,执行了 throw 语句一定会出现异常。而 throws 是用来声明当前方法有可能会出现某种异常的,如果出现了相应的异常,将由调用者来处理,声明异常不一定会出现异常。 二、相关解析 throw throws 都是用来进行

weixin_46511008的博客 1万+

Javathrowthrows区别

throwthrows区别: 1、 throw代表动作,表示抛出一个异常的动作;throws代表一种状态,代表方法可能有异常抛出 throw用在方法实现中,而throws用在方法声明中;throw只能用于抛出一种异常,而throws可以抛出多个异常 2、 throw关键字用来在程序中明确的抛出异常,相反 throws语句用来表明方法不能处理的异常。 每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。 3、 throw是在代码块内的

AlbenXie的博客 1万+

Java中的throwthrows异常处理详解

本篇博客详细讲解了throwthrows这两个关键字的使用,以及它们之间的区别throw关键字用于手动抛出异常,而throws关键字用于声明方法可能抛出异常。它们都有助于编写更加健壮的异常处理代码。希望通过这篇博客,读者能更好地掌握这两个关键字的用法,并在实际编程中灵活运用。

weixin_53607413的博客 4967

java异常throwthrows区别

throwsthrow throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。   用在方法声明后面,跟的是异常类名   可以跟多个异常类名,用逗号隔开   表示抛出异常,由该方法的调用者来处理   throws表示出现异常的一种可能性,并不一定会发生这些异常 throw:则是用来抛出一个具体的异常类型。   用在方法体内,跟的是异常

Kobe-fly的博客 5万+

java语言异常throw的作用_在Java语言中,throwthrows有什么区别

Java语言中,throwthrows有什么区别区别分析:(推荐教程:java入门教程)throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用就抛给谁。用在方法声明后面,跟的是异常类名可以跟多个异常类名,用逗号隔开表示抛出异常,由该方法的调用者来处理throws表示出现异常的一种可能性,并不一定会发生这些异常throw:则是用来抛出一个具体的异常类型。用在方法体...

weixin_29268331的博客 1071

JAVA 异常 throwthrows

近来被throwthrow new …… 弄的脑袋罢工,发狠要彻底弄明白这个东西,故搜罗了好多网友们关于此的思想精华,摘录于此.throws是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。throws通常不用显示的捕获异常,可

人工智能的专栏 2万+

通俗易懂的ThrowThrows区别

通俗易懂的ThrowThrows区别 分类: 1、自动抛出异常        当程序语句出现一些逻辑错误、主义错误或类型转换错误时,系统会自动抛出异常,系统会自动抛出NumberFormatException异常,如: public static void main(String[] args) { String ...

weixin_46110257的博客 628

Java异常的分类;异常的处理方式:声明异常抛出异常、自己处理异常;自定义异常

Java异常的体系结构分类、异常处理的两种方法、自定义异常

罪域之骨终成王 1180

java声明异常抛出异常关键字

文章目录前言一、throws关键字?二、throw关键字 前言 一、throws关键字? 声明异常: 语法: public 返回值类型 方法名() throws 异常类型1,异常类型2{} 作用:告诉调用该方法的调用者,该方法可能会发生什么异常 public void setAge(int age) throws Exception { if(age>120||age<0){//方法上throws声明异常 throw new Exception("年龄不合法");/

睡不醒的每天 4433

异常中的throws声明throw语句的区别是什么

作用不同:throw用于程序员自行产出并抛出异常throws用于声明在该方法内抛出异常 使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。 内容不同:throw抛出一个异常对象,且只能是一个;throws后面跟异常类,而且可以有多个 ...

m0_62060701的博客 456

JAVA异常处理机制(二)——throws/throw区别使用

JAVAthrowthrows区别:https://www.cnblogs.com/xiohao/p/3547443.html 区别:(摘自上面的博客) 1、throws出现在方法函数头;而throw出现在函数体。 2、throws表示出现异常的一种可能性,并不一定会发生这些异常throw则是抛出异常,执行throw则一定抛出了某种异常。 3、两者都是消极处理异常的方式(这里的消极并不...

Alexwym的博客 2万+

JAVA |异常异常总结详解(异常类型、声明异常抛出异常、捕获异常

Java 中,异常处理是一种重要的编程概念,用于处理程序执行过程中可能出现的错误或异常情况。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

YKX0000的博客 2856

Java Exception - 使用throws声明抛出异常

使用throws声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理;如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是,打印异常的跟踪栈信息,并中止程序运行。 throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。一旦使用throws语句声明抛出异常,程序就无须使用try…catch块来捕获该异常了。 @Slf4j public clas

你今天真好看呀 2573

IEC61850建模工具及示例

基于C#开发的32位libiec61850建模工具(需要.NetFramework4.0支持)。工具实现对ICD文件进行静态建模、动态建模、模型代码模型解析功能。压缩包包含11个用于测试验证的ICD文件。具体操作说明参考https://blog.csdn.net/rpybx/article/details/119568523

深度学习图像识别数据集:5种常见瓷砖缺陷分类数据集

数据集包含5种常见瓷砖缺陷分类数据集,数据按照文件夹储存,不需要处理可直接用作深度学习训练数据。数据分为以下5种常见瓷砖缺陷:气孔、破碎、裂纹、磨损、凹凸不平数据集总大小:14MB下载解压后的图像目录:训练集(315张图片)测试集(77张图片)data-train 训练集-每个子文件夹放同类别的图像,文件夹名为分类类别data-test 测试集-每个子文件夹放同类别的图像,文件夹名为分类类别除此之外,提供了classes的json字典类别文件,以及可视化的脚本py文件

上一篇: Java try catch finally语句
下一篇: Java自定义异常
jijiangpeng
博客等级 码龄11年 100粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值