Java学习总结第三十一天Java异常处理

使用异常处理程序错误

目标:掌握Java的异常处理机制

1、运用 try 、catch 、 finally 处理异常

2、运用 throw 抛出异常

3、运用 throws 声明异常

 

程序中的异常

public class HelloAndroid {

    public static void main(String[] args) {

        System.out.print("请输入课程代号(1至3之间的数字):");

        Scanner in = new Scanner(System.in);

        int courseCode = in.nextInt(); // 从键盘输入整数

        switch (courseCode) {

            case 1:

             System.out.println("C#编程");

             break;

  case 2:

System.out.println("Java编程");

break;

case 3:

System.out.println("SQL基础");

}

}

}

正常情况:

输入:2

输出:Java编程

异常情况:

输入:B

程序中断运行!

 

什么是异常?

异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。

什么是异常处理?

Java编程语言使用异常处理机制为程序提供了错误处理的能力。

程序中预先想好了对付异常的处理办法->程序运行->异常!->对异常进行处理->处理完毕,程序继续运行

 

Java中如何进行异常处理

Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

捕获异常:try:执行可能产生异常的代码;

catch:捕获异常

finally:无论是否发生异常,代码总能执行

抛出异常:throw:手动抛出异常

声明异常:声明方法可能要抛出的各种异常

 

try/catch块

使用try/catch块捕获异常,分为三种情况:

1、第一种情况:

public void method(){

try {

      // 代码段(此处不会产生异常)

} catch (异常类型 ex) {

      // 对异常进行处理的代码段

}

// 代码段

}

 

public class AccpException {

public static void main(String[] args) {

System.out.print("请输入课程代号(1至3之间的数字):");

Scanner in = new Scanner(System.in);

try {

int courseCode = in.nextInt();

switch (courseCode) {

case 1:

         System.out.println("C#编程");

         break;

case 2:

         System.out.println("Java编程");

           break;

case 3:

         System.out.println("SQL基础");

}

} catch (Exception ex) {

         System.out.println("输入不为数字!");

}

System.out.println("欢迎提出建议!");

}

}

 

2、第二种情况

public void method(){

try {

      // 代码段 1

      // 产生异常的代码段 2

      // 代码段 3

} catch (异常类型 ex) {

      // 对异常进行处理的代码段4

}

// 代码段5

}

 

public class AccpException {

public static void main(String[] args) {

System.out.print("请输入课程代号(1至3之间的数字):");

Scanner in = new Scanner(System.in);

try {

int courseCode = in.nextInt();

switch (courseCode) {

case 1:

System.out.println("C#编程");

break;

case 2:

System.out.println("Java编程");

break;

case 3:

System.out.println("SQL基础");

}

} catch (Exception ex) {

         System.out.println("输入不为数字!");

         ex.printStackTrace();

}

System.out.println("欢迎提出建议!");

}

}

 

printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程

public class AccpException {

      public static void main(String[] args) {

       System.out.print("请输入课程代号(1至3之间的数字):");

       Scanner in = new Scanner(System.in);

       try {

       int courseCode = in.nextInt();

       //此处代码省略

       } catch (Exception ex) {

          System.out.println("输入不为数字!");

          ex.printStackTrace();

       }

       System.out.println("欢迎提出建议!");

     }

}

 

3、第三种情况

public void method(){

try {

     // 代码段 1

     // 产生异常的代码段 2

     // 代码段 3

} catch (异常类型 ex) {

     // 对异常进行处理的代码段4

}

// 代码段5

}

 

public class AccpException2 {

public static void main(String[] args) {

System.out.print("请输入课程代号(1至3之间的数字):");

Scanner in = new Scanner(System.in);

try {

int courseCode = in.nextInt();

switch (courseCode) {

case 1:

         System.out.println("C#编程");

         break;

case 2:

          System.out.println("Java编程");

         break;

case 3:

          System.out.println("SQL基础");

}

} catch (NullPointerException ex) {

         System.out.println("输入不为数字!");

}

System.out.println("欢迎提出建议!");

}

}

 

try/catch/finally

在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行

public class AccpException3 {

public static void main(String[] args) {

System.out.print("请输入课程代号(1至3之间的数字):");

Scanner in = new Scanner(System.in);

try {

int courseCode = in.nextInt();

switch (courseCode) {

case 1:

         System.out.println("C#编程");

          break;

case 2:

         System.out.println("Java编程");

         break;

case 3:

         System.out.println("SQL基础");

}

} catch (Exception ex) {

         System.out.println("输入不为数字!");

} finally {

         System.out.println("欢迎提出建议!");

}

}

}

 

多重catch块

1、一段代码可能会引发多种类型的异常

2、当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句

3、执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略

public void method(){

try {

     // 代码段

     // 产生异常(异常类型2)

} catch (异常类型1 ex) {

     // 对异常进行处理的代码段

} catch (异常类型2 ex) {

     // 对异常进行处理的代码段

} catch (异常类型3 ex) {

     // 对异常进行处理的代码段

}

// 代码段

}

 

抛出异常

如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理

public class AccpTeacher {

    private String id;     // 教员编号,长度应为7

    public void setId(String pId){

  // 判断教员编号的长度是否为7

  if (pId.length() == 7) {

id = pId;

  } else {

throw new IllegalArgumentException("参数长度应为7!");

  }

   }

}

public class TeacherTest {

   public static void main(String[] args) {

Teacher teacher = new Teacher();

  try {

teacher.setId("088");

  } catch (IllegalArgumentException ex) {

System.out.println(ex.getMessage());

  }

    }

}

 

声明异常

public class AccpTeacher {

    private String id;// 教员编号,长度应为7

    public void setId(String pId) throws IllegalArgumentException{

  // 判断教员编号的长度是否为7

  if (pId.length() == 7) {

id = pId;

  } else {

throw new IllegalArgumentException("参数长度应为7!");

  }

  }

}

public class AccpTeacherTest {

    public static void main(String[] args) {

AccpTeacher teacher = new AccpTeacher();

try {

teacher.setId("088");

} catch (IllegalArgumentException ex) {

System.out.println(ex.getMessage());

}

    }

}

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值