《异常》

day16

课程

part1.try catch代码块与finally代码块的使用

异常:异常主要分为两大类:1.运行时异常 2.编译异常

  • 1.异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
  • 2.可以通过打断点,从而找出异常的位置,注意使用F5,F6,F8
  • 3.try代码块用于保存可能出现异常的代码,catch用于捕获异常并处理异常,finally代码块是无论是否发生异常,都会被执行
  • 4.一个try后面可以跟多个catch,但是只有一个catch会被执行,当一个try后面跟多个catch的时候,注意catch中的异常必须按照从小到大的顺序排列
  • 5.Exception是所有异常类的祖宗
  • 6.finally代码块无论是否发生异常,都会执行,一般finally用于关闭资源(没学到,暂不多做介绍)
public interface UserDao {
 public void method();
 //异常分为两大类
}

先创建一个接口,放入我本节课中需要使用的方法

public class UserDaoimpl implements UserDao{
}

首先创建一个新的类用来实现接口

public void method(){
}

重写接口中的方法

int a =30;
int b=0;
int sum=a/b;
System.out.println(sum);

在方法中开始写入以上值,很明显会因为除数b为0而报出ArithmeticException数学运算异常

try{
int a =30;
int b=0;
int sum=a/b;
System.out.println(sum);
}catch(ArithmeticException e){
System.out.println("数字运算异常")
}

这里就使用了try catch代码块,使得异常被寻找出来,并不会报出异常,即不运行try代码块中的东西,转而运行catch中的内容

e.printStackTrace();

这里介绍的是可以使用异常类创建的对象e来调用printStackTrace()方法来显示出异常

finally{
   System.out.println("---ff---");
  }

finally代码块的作用即为不管程序有没有异常,它都会运行代码块内的程序

try{
   Scanner scanner=new Scanner(System.in);
   System.out.println("请输入被除数");
   int a=scanner.nextInt();
   System.out.println("请输入除数:");
   int b=scanner.nextInt();
   int sum=a/b;//在发生异常后,系统会根据异常类型自动抛出一个异常对象,例如new ArithmeticException();
   
   System.out.println(sum);
   //ArithmeticException e=new ArithmeticException();
 }catch(ArithmeticException e){
   System.out.println("数学运算异常");
   e.printStackTrace();//可以打印出异常
  }catch (InputMismatchException e) {
   System.out.println("输入不匹配异常");
   e.printStackTrace();
  }

以上的例子即可说明一个try代码块后面可以跟上很多个catch代码块,以便于寻找不同的异常,并返回不同的信息

part2.throws,throw,自定义异常类的使用

throws的用法

  • 1.throws用于方法头部,表示抛出该方法中可能出现的异常,如果要抛出多个异常,可以用,隔开
  • 2.当有别的类中方法调用该方法时,可以进行处理
  • throw的用法
  • 1.手动抛出的时运行时异常,此时方法头部不需要通过throws进行声明
  • 2.当手动抛出编译异常时,方法头部必须通过throws进行声明
  • 自定义异常:
  • 1.继承Throwablel类,继承Exception类 或者RuntimeException类
  • 之所以要继承这些类中的一个,是因为自定义的类要符合异常机制
//在方法头部声明异常
 public void method2()throws Exception{
 int sum=10/0;
 }
public void method2() throws Exception;
public static void main(String[] args) throws Exception

如果用的是Exception异常类,那么就属于编译异常,需要在测试类,接口的方法头部都加上throws Exception(声明异常)

public void method3() throws Exception{
  Scanner scanner=new Scanner(System.in);
  System.out.println("请输入一个数字");
  int a=scanner.nextInt();
  if(a==10){
   //手动抛出的时运行时异常,此时方法头部不需要通过throws进行声明
   //throw new ArithmeticException("我自己paochu 的异常");
   //当手动抛出编译异常时,方法头部必须通过throws进行声明
   throw new Exception("laozigan");
  }
  System.out.println("程序结束");
请输入一个数字
10
Exception in thread "main" com.day16.Exception: laozirie
 at com.day16.UserDaoimpl.method3(UserDaoimpl.java:71)
 at com.day16.Test.main(Test.java:14)

上面的程序即为手动抛出编译异常,下面的为控制台输出的结果,这也是Throw的用法

public class MyException extends Exception{
public String mess;
public MyException(){
  super();
 }
 public MyException(String mess){
  //必须要写上调用父类的带参数构造方法,目的是将当前的异常信息返回到父类信息中
  super(mess);
 }
 }

自定义异常类就比较特殊了,首先它必须要继承Throwablel类,Exception类 或者RuntimeException类,因为它需要符合异常机制,其次它比一定需要手动调用父类的无参构造方法(因为不手动调用也会自动调用),但是它必须调用父类的有参构造方法,因为需要把参数返回给父类,这也是本章一个小难点

习题

 public void method(){
   Scanner scanner=new Scanner(System.in);
   try{
    System.out.println("请输入被除数");
    int a=scanner.nextInt();
    System.out.println("请输入除数");
    int b=scanner.nextInt();
    int sum=a/b;
   }catch(ArithmeticException e){
    System.out.println("被除数和除数必须是整数,除数不能为零");
   }catch(InputMismatchException e) {
       System.out.println("被除数和除数必须是整数");
  }
   finally{
    System.out.println("感谢使用本程序");
   }
  }

这个程序主要完成的功能是通过不同的catch代码块来输出不同的异常现象

public void method4() throws Exception{
  Scanner scanner=new Scanner(System.in);
  System.out.println("请输入被除数:");
  int a=scanner.nextInt();
  System.out.println("请输入除数:");
  int b=scanner.nextInt();
  int sum=a/b;
  if (sum==2) {
   throw new Exception("性别必须是男或女");
  }
  if (sum==5) {
   throw new MyException("性别必须是男或女");
  }
 }

这里使用了throw与自定义异常类,输出了特定的异常语句与异常类型

总结

今天的课程总体来说还是比较简单的,主要介绍了五种有关异常的代码的使用,其中比较重要的是try catch代码块的使用。

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的家教平台系统。该系统旨在为家教和学生提供一个便捷、高效的在线交流和预约平台,涵盖了从用户注册登录、个人信息管理、课程发布与搜索、预约与取消预约、评价反馈等一系列功能。 在后台管理方面,系统提供了管理员对用户信息、课程信息、预约记录等进行管理的功能,确保平台的正常运行和数据的准确性。通过Spring框架的依赖注入和AOP特性,实现了业务逻辑的清晰分离和高效处理;SpringMVC则负责处理前端请求和响应,提供友好的用户界面;MyBatis作为ORM框架,简化了数据库操作,提高了数据访问的效率和安全性。 前端部分采用Vue.js框架,结合Vue Router进行页面路由管理,Axios进行HTTP请求,实现了前后端分离的开发模式。Vue.js的组件化开发和响应式数据绑定特性,使得前端页面更加动态和交互性强,提升了用户体验。 数据库设计采用了MySQL,存储了用户信息、课程信息、预约记录等核心数据。通过合理的数据库表结构和索引设计,保证了系统的高效运行和数据的一致性。 该项目不仅适合计算机相关专业的毕设学生参考和学习,也适合Java学习者进行项目实战练习。通过对该项目的深入理解和二次开发,可以实现更多个性化功能,进一步提升技术水平和实践能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值