第一题:分析题
package chapter09_exception_teacher.src.com.atguigu05.exer.exer2;
/**
* 输出结果:
* 进入方法A
* 用A方法的finally
* 制造异常
* 进入方法B
* 调用B方法的finally
*
* @author shkstart
* @create 0:57
*/
public class ReturnExceptionDemo {
static void methodA() throws Exception{
try {
System.out.println("进入方法A");
throw new Exception("制造异常");
} finally {
System.out.println("用A方法的finally");
}
}
static void methodB() {
try {
System.out.println("进入方法B");
return;
} finally {
System.out.println("调用B方法的finally");
}
}
public static void main(String[] args) {
try {
methodA();
} catch (Exception e) {
System.out.println(e.getMessage());
}
methodB();
}
}
第二题
案例:游戏角色 在一款角色扮演游戏中,每一个人都会有名字和生命值,角色的生命值不能为负数。 要求:当一个人物的生命值为负数的时候需要抛出自定义的异常 操作步骤描述: (1)自定义异常类NoLifeValueException继承RuntimeException ①提供空参和有参构造 ②在有参构造中,需要调用父类的有参构造,把异常信息传入 (2)定义Person类 ①属性:名称(name)和生命值(lifeValue) ②提供setter和getter方法: 在setLifeValue(int lifeValue)方法中,首先判断,如果 lifeValue为负数,就抛出NoLifeValueException, 异常信息为:生命值不能为负数:xx; 然后再给成员lifeValue赋值。 ③提供空参构造 ④提供有参构造:使用setXxx方法给name和lifeValue赋值 (3)定义测试类Exer3 ① 使用满参构造方法创建Person对象,生命值传入一个负数 由于一旦遇到异常,后面的代码的将不在执行,所以需要注释掉上面的代码 ② 使用空参构造创建Person对象 调用setLifeValue(int lifeValue)方法,传入一个正数,运行程序 调用setLifeValue(int lifeValue)方法,传入一个负数,运行程序 ③ 分别对①和②处理异常和不处理异常进行运行看效果
package chapter09_exception.src.com.atguigu05.exer.exer3;
/**
* ClassName: Exer3
* Package: chapter09_exception.src.com.atguigu05.exer.exer3
* Description:
*
* (3)定义测试类Exer3
*
* ① 使用满参构造方法创建Person对象,生命值传入一个负数
*
* 由于一旦遇到异常,后面的代码的将不在执行,所以需要注释掉上面的代码
*
* ② 使用空参构造创建Person对象
*
* 调用setLifeValue(int lifeValue)方法,传入一个正数,运行程序
*
* 调用setLifeValue(int lifeValue)方法,传入一个负数,运行程序
*
* ③ 分别对①和②处理异常和不处理异常进行运行看效果
*
* @Author 小白
* @Create 2024/4/6 16:09
* @Version 1.0
*/
public class Exer3 {
public static void main(String[] args) {
//正常
// Person p1 = new Person("Tom",10);
// System.out.println(p1.toString()); //Person{name='Tom', lifeValue=10}
// 执行过程:
// 如果我们给它赋值一个负数的话 就在Person("Tom",-10)构造器里面赋值了一个负数
// 然后在构造器里面 Person(String name, int lifeValue)又调用了 setLifeValue(lifeValue);
// //也就是说把负数传递给 setLifeValue(lifeValue);这个方法 在setLifeValue(lifeValue)进行判断
// //如果lifeValue < 0 则抛出 NoLifeValueException异常 并且输出生命值不能为负数:"+lifeValue
// //public void setLifeValue(int lifeValue) {
//
// if (lifeValue < 0){
//
// throw new NoLifeValueException("生命值不能为负数:"+lifeValue);
//
// }
//
//
// this.lifeValue = lifeValue;
// }
//
// 又因为抛出的是运行时异常RuntimeException 所以我们不用进行处理
// 因为异常不处理 所以只能往上抛出
// setLifeValue(int lifeValue)方法的调用者是构造器Person(String name, int lifeValue)
// 所以我们又把异常抛出给构造器Person(String name, int lifeValue) 到这 程序执行完毕 运行时会在控制台显示
//自定义异常NoLifeValueException
// /*
// public Person(String name, int lifeValue) {
// //调用 setName 把name传入
// setName(name);
// this.name = name;
// 调用 setLifeValue() 把lifeValue传入
// setLifeValue(lifeValue);
// }
//
//运行时异常 选择不处理
// Person p1 = new Person("Tom",-10);
// System.out.println(p1.toString());
//如果要处理
try {
Person p1 = new Person("Tom",-10);
System.out.println(p1.toString());
} catch (NoLifeValueException e) {
e.printStackTrace();
}
//2.使用空参构造器
Person p2 = new Person();
p2.setName("Jerry");
p2.setLifeValue(-10);
}
}
第三题
编写应用程序DivisionDemo.java,接收命令行的两个参数,要求不能输入负数,计算两数相除。
对数据类型不一致(NumberFormatException)、缺少命令行参数(ArrayIndexOutOfBoundsException、
除0(ArithmeticException)及输入负数(BelowZeroException 自定义的异常)进行异常处理。
提示:
(1)在主类(DivisionDemo)中定义异常方法(divide)完成两数相除功能。
(2)在main()方法中调用divide方法,使用异常处理语句进行异常处理。
(3)在程序中,自定义对应输入负数的异常类(BelowZeroException)。
(4)运行时接受参数 java DivisionDemo 20 10 //args[0]="20" args[1]="10"
(5)Interger类的static方法parseInt(String s)将s转换成对应的int值。
如:int a=Interger.parseInt("314"); //a=314;
package chapter09_exception.src.com.atguigu05.exer.exer4;
import chapter09_exception.src.com.atguigu04.BelowZeroException;
/**
* ClassName: DivisionDemo
* Package: chapter09_exception.src.com.atguigu05.exer.exer4
* Description:
*编写应用程序DivisionDemo.java,接收命令行的两个参数,要求不能输入负数,计算两数相除。
* 对数据类型不一致(NumberFormatException)、缺少命令行参数(ArrayIndexOutOfBoundsException、
* 除0(ArithmeticException)及输入负数(BelowZeroException 自定义的异常)进行异常处理。
*
* 提示:
* (1)在主类(DivisionDemo)中定义异常方法(divide)完成两数相除功能。
* (2)在main()方法中调用divide方法,使用异常处理语句进行异常处理。
* (3)在程序中,自定义对应输入负数的异常类(BelowZeroException)。
* (4)运行时接受参数 java DivisionDemo 20 10 //args[0]="20" args[1]="10"
* (5)Interger类的static方法parseInt(String s)将s转换成对应的int值。
* 如:int a=Interger.parseInt("314"); //a=314;
* @Author 小白
* @Create 2024/4/6 16:44
* @Version 1.0
*/
public class DivisionDemo {
public static void main(String[] args) {
try {
int m = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
int result = divide(m, n);
System.out.println("结果为:" + result);
}catch (BelowZeroException e) {
System.out.println(e.getMessage());
} catch (NumberFormatException e) {
System.out.println("数据类型不一致");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("缺少命令行参数");
} catch (ArithmeticException e) {
System.out.println("除0");
}
}
public static int divide ( int m, int n) throws BelowZeroException {
if (m < 0 || n < 0) {
//手动抛出异常类的对象
throw new BelowZeroException("输入负数了");
}
return m / n;
}
}
测试


先来个正常的

少一个和什么都没写是一样的 



















![[WIP]Sora相关工作汇总VQGAN、MAGVIT、VideoPoet](https://img-blog.csdnimg.cn/direct/22aa1d0fcceb4c4081e72bd8d52d6907.png)