JAVA语言基础语法——异常中的常见方法及抛出异常等练习
创始人
2024-05-08 00:03:35
0
    • Throwable的成员方法

定义在最顶级Throwable类中

a.实例如下:

e.printStackTrace(); 将异常的所有信息红色的字体打印在控制台,不会结束虚拟机,仅仅只是打印的操作。

    • 抛出处理

throws

注意:写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常

编译时异常:必须要写

运行时异常:可以不写

throw

注意:写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码不在执行了

a.示例如下

package YiChang.YiChangZuoYong;public class ExceptionDemo7 {public static void main(String[] args) {//需求:定义一个方法求数组的最大值int [] arr = null;int max = 0;try {max = getMax(arr);} catch (NullPointerException e) {System.out.println("空指针异常");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("索引越界异常");}System.out.println(max);}public static int getMax(int[] arr) throws NullPointerException,ArrayIndexOutOfBoundsException{if (arr == null) {//手动创建一个异常对象,并把这个异常交给方法的调用者处理//此时方法就会结束,下面的代码不会在执行了throw  new NullPointerException();}if (arr.length == 0) {//手动创建一个异常对象,并把这个异常交给方法的调用者处理//此时方法就会结束,下面的代码不会在执行了throw new ArrayIndexOutOfBoundsException();}System.out.println("看看我执行了吗?");int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}return max;}
}

小结:抛出throw throws

在方法中,出现了异常。

方法就没有继续运行下去的意义了,采取抛出处理。

让该方法结束运行,并告诉调用者出现了问题。

    • 练习

a.键盘录入数据

需求:

键盘录入自己心仪的女朋友姓名和年龄。

姓名的长度在3-10之间,

年龄的范围为18-40岁,

超出这个范围是异常数据不能赋值,需要重新录入,一直录到正确为止。

提示:

需要考虑用户在键盘录入时的所有情况。

比如:录入年龄时超出范围,录入年龄时录入了 abc 等情况。

抛出 捕获

告诉调用者出错了 不让程序停止

b.代码如下:

GirlFrend类:

package YiChang.YiChangZuoYong;public class GirlFriend {private  String name;private  int age;public GirlFriend() {}public GirlFriend(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {int len = name.length();if (len < 3 || len > 10) {throw new RuntimeException();}this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) throws RuntimeException{if (age <18 || age > 40 ) {throw  new RuntimeException();}this.age = age;}public String toString() {return "GirlFriend{name = " + name + ", age = " + age + "}";}
}

Test类:

package YiChang.YiChangZuoYong;import java.util.Scanner;public class Test {public static void main(String[] args) {//创建键盘录入的对象Scanner sc = new Scanner(System.in);//创建女朋友的对象GirlFriend gf = new GirlFriend();//3.接收女朋友的姓名while (true) {try {System.out.println("请输入你心仪女朋友的名字:");String name = sc.nextLine();gf.setName(name);//接收女朋友的年龄System.out.println("请输入你心仪女朋友的年龄:");String ageStr = sc.nextLine();//不能用nextInt 只能接收整数,但输入abc则会报错int age = Integer.parseInt(ageStr);//做一个类型转换gf.setAge(age);//如果所有的数据都正确,那么跳出循环break;} catch (NumberFormatException e) {System.out.println("年龄的格式有误,请输入数字");continue;} catch (RuntimeException e) {System.out.println("姓名的长度或者年龄的范围有误");continue;}}//5.打印System.out.println(gf);}
}

运行结果如下

4.自定义异常(为了让控制台的报错信息更加的见名之意)

a.定义异常类

b.写继承关系

c.空参构造

d.带参构造

实例如下:

NameFormatException异常类:

package YiChang.YiChangZuoYong;public class NameFormatException extends RuntimeException{public NameFormatException() {}public NameFormatException(String message) {super(message);}
}

AgeOutOfBoundsException异常类:

package YiChang.YiChangZuoYong;public class AgeOutOfBoundsException extends RuntimeException{public AgeOutOfBoundsException() {}public AgeOutOfBoundsException(String message) {super(message);}
}

技巧:

//NameFormat:当前异常的名字表示由于参数错误而导致的问题

//Exception: 表示当前类是一个异常类

//运行时: RuntimeException 核心就表示由于参数错误而导致的问题

//编译时: Exception 核心 提醒程序员检查本地信息

同理:

在Test测试类中的修改:

运行结果如下

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...