程序的异常:Throwable

严重问题Error我们不处理,这种问题一般都是很严重的,比如内存溢出

问题Exception

编译期问题不是RuntimeException的异常必须进行处理,如果不处理,编译就不能通过

运行期问题RuntimeException这种问题是代码不够严谨,需要修正代码

/*
* 如何处理异常?
*
* A:try...catch...finally
* B:throws
*
* try {
语句块//执行该语句块,可能会发生异常
} catch (异常类型 e) {
异常发生时要执行的语句块
} catch (异常类型 e) {
异常发生时要执行的语句块
} finally {finally {
无论异常发生与否,都要执行的语句块
}
*
*
* 注意:
* A:try里面的代码越少越好
* B:catch{}花括号里面必须有内容,哪怕是给出一个简单的提示
* C:异常类型能明确的进来明确,不要用大的异常类型来处理
* D:平级关系的异常类型先后顺序无关系,但是如果出现了继承关系的异常类型,超类必须在最后
* */

  1. /*
  2. * 如何处理异常?
  3. *
  4. * A:try...catch...finally
  5. * B:throws
  6. *
  7. * try {
  8. 语句块//执行该语句块,可能会发生异常
  9. } catch (异常类型 e) {
  10. 异常发生时要执行的语句块
  11. } catch (异常类型 e) {
  12. 异常发生时要执行的语句块
  13. } finally {finally {
  14. 无论异常发生与否,都要执行的语句块
  15. }
  16. *
  17. *
  18. * 注意:
  19. * A:try里面的代码越少越好
  20. * B:catch{}花括号里面必须有内容,哪怕是给出一个简单的提示
  21. * C:异常类型能明确的进来明确,不要用大的异常类型来处理
  22. * D:平级关系的异常类型先后顺序无关系,但是如果出现了继承关系的异常类型,超类必须在最后
  23. * */
  24.  
  25. public class IntegerDemo {
  26. public static void main(String[] args) {
  27. // TODO Auto-generated method stub
  28.  
  29. method();
  30. }
  31.  
  32. public static void method() {
  33. int a = 10;
  34. int b = 0;
  35. int arr[] = { 1, 2, 3 };
  36.  
  37. try {
  38. System.out.println(a / b);
  39. System.out.println(arr[3]);
  40. } catch (ArithmeticException e) {
  41. System.out.println("除数不能为0");
  42. } catch (ArrayIndexOutOfBoundsException e) {
  43. System.out.println("数组越界");
  44. } catch (Exception e) {
  45. System.out.println("出错了");
  46. } finally {
  47.  
  48. }
  49.  
  50. System.out.println("OVER");
  51. }
  52. }

/*
* JDK7新的异常处理方案
* try {
*
} catch (异常类型1 | 异常类型2 变量) {

} finally {

}
*
* 注意:这个方法虽然简洁,但是也不够好
* A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
* B:多个异常之间必须是平级关系
* */

  1. /*
  2. * JDK7新的异常处理方案
  3. * try {
  4. *
  5. } catch (异常类型1 | 异常类型2 变量) {
  6.  
  7. } finally {
  8.  
  9. }
  10. *
  11. * 注意:这个方法虽然简洁,但是也不够好
  12. * A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
  13. * B:多个异常之间必须是平级关系
  14. * */
  15.  
  16. public class IntegerDemo {
  17. public static void main(String[] args) {
  18. // TODO Auto-generated method stub
  19.  
  20. method();
  21. }
  22.  
  23. public static void method() {
  24. int a = 10;
  25. int b = 0;
  26. int arr[] = { 1, 2, 3 };
  27.  
  28. try {
  29. System.out.println(a / b);
  30. System.out.println(arr[3]);
  31. } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
  32. System.out.println("出错了");
  33. } finally {
  34.  
  35. }
  36.  
  37. System.out.println("OVER");
  38. }
  39. }

/*
* 面试题:
* 如果catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,请问在return前,还是return后?
*
* 执行。前。
* 准确的说,应该是在中间
* */

  1. /*
  2. * 面试题:
  3. * 如果catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,请问在return前,还是return后?
  4. *
  5. * 执行。前。
  6. * 准确的说,应该是在中间
  7. * */
  8.  
  9. public class IntegerDemo {
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12.  
  13. System.out.println(getInt());
  14. }
  15.  
  16. public static int getInt() {
  17. System.out.println("beginning of getInt");
  18. int a = 10;
  19.  
  20. try {
  21. System.out.println("beginning of try");
  22. System.out.println(a / 0);
  23. a = 20;
  24. System.out.println("end of try");
  25. } catch (ArithmeticException e) {
  26. System.out.println("beginning of catch");
  27. a = 30;
  28. System.out.println("end of catch");
  29. return a;
  30. /*
  31. * return a;在程序执行到这一步的时候,这里不是return a;而是return 30;这个返回路径就形成了
  32. * 但是,程序发现后面还有finally,所以继承执行finally语句块,a = 40;
  33. * 再次回到以前的返回路径,继续执行return 30;
  34. */
  35. } finally {
  36. System.out.println("beginning of finally");
  37. a = 40;
  38. System.out.println("end of finally");
  39. }
  40.  
  41. System.out.println("end of getInt");
  42. return a;
  43. }
  44. }

/*
* 异常注意事项:
* A:子类重写父类方法时,子类的方法必须提出相同的异常或父类异常的子类。(父类坏了,子类不能比父类更坏)
* B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是子类,子类不能抛出父类没有的异常
* C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。如果子类方法内有异常抛出,那么子类只能try,不能throws
* */

  1. /*
  2. * 异常注意事项:
  3. * A:子类重写父类方法时,子类的方法必须提出相同的异常或父类异常的子类。(父类坏了,子类不能比父类更坏)
  4. * B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是子类,子类不能抛出父类没有的异常
  5. * C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。如果子类方法内有异常抛出,那么子类只能try,不能throws
  6. * */
  7.  
  8. public class IntegerDemo {
  9. public static void main(String[] args) {
  10. }
  11. }
  12.  
  13. class Fu {
  14. public void show() throws Exception {
  15. }
  16. }
  17.  
  18. class Zi extends Fu {
  19. public void show() throws ArithmeticException {
  20. }
  21. }

try...catch语句的更多相关文章

  1. Java异常处理中finally中的return会覆盖catch语句中的return语句

    Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...

  2. Java 多重catch语句的具体使用介绍

    某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...

  3. 作用域&作用域链和with,catch语句&闭包

    作用域(函数) 作用域:变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期; 在一些类C编程语言中花括号内的每一段代码都有各自的作用域,而且变量在声明它们的代码段外是不可见的,称之为块 ...

  4. C# try catch语句&获取随机数的方法

    try catch语句: try{ //无论如何都会走,必须写: } catch(Exception a){ //Exception报异常,需要定义,需要写输出语句: //如果上面执行失败走,必须写: ...

  5. Java知多少(47)多重catch语句的使用

    某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...

  6. Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

    Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...

  7. 一个try可以跟进多个catch语句,用于处理不同情况,当一个try只能匹配一个catch

    一个try可以跟进多个catch语句,用于处理不同情况.当一个try只能匹配一个catch. 我们可以写多个catch语句,但是不能将父类型的exception的位置写在子类型的excepiton之前 ...

  8. try...catch 语句

    一般情况下,我们很少用到 try...catch 语句,但是有时候为了测试代码中的错误,也有可能会用到.小白我也在工作中用到过.那么好的程序设计,什么时候会用到呢? try...catch 一般用来捕 ...

  9. 六. 异常处理5.多重catch语句的使用

    某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...

  10. try~Catch语句中异常的处理过程

    [2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 以下的样例介绍了try~catch语句中出现异常时语句的运行顺序: package month10; import ja ...

随机推荐

  1. mongodb连接警告修复

    问题 Node.js中mongoose模块连接MongoDB数据库时提示(node:12580) DeprecationWarning: current URL string parser is de ...

  2. Vue框架前言

    Vue框架 Vue 框架: 官网 vue框架:渐进式JavaScript框架 vue一个环境:可以只控制页面中一个标签.可以控制一组标签.可以控制整个页面.可以控制整个项目 vue可以根据实际需求,选 ...

  3. WPF游戏,使用move游戏开发

    我看了好多游戏的源码,其实每一个,我想做,rpg的都需要移动,那么wpf,win8应用,数据绑定,我们需要一个Thread来让人物移动. 于是用move. 在每个人物,自己和敌人,npc类,都有一个m ...

  4. linux下的系统服务管理及日志管理

    1.ntsysv服务配置工具 用来配置哪些服务开启或关闭,图形界面,使用键盘来操作. 安装ntsysv服务的命令:yum install -y ntsysv 直接运行命令ntsysv 弹出配置界面: ...

  5. Thinking in Annotation

    Thinking in Java这本书很久前就购买了,打算有时间看一下,因为自己的时间被自己安排的紧张,也没时间看书.黄师傅上次课程讲到了注解的使用和反射的使用,今天打算学习一下注解.该文章参考Thi ...

  6. 强化学习(Reinfment Learning) 简介

    本文内容来自以下两个链接: https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/ https: ...

  7. Ubuntu 下串口调试工具

    1. cutecom 安装:sudo apt-get install cutecom 打开方式: 在终端输入:cutecom,即可打开串口工具 或者在应用中,点击 cutecom 图标打开 打开后的界 ...

  8. 使用QT创建系统托盘

    使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比 ...

  9. Django【第14篇】:Django之Form组件补充

    补充 一.定义的规则 class TeacherForm(Form): #必须继承Form # 创建字段,本质上是正则表达式 username = fields.CharField( required ...

  10. 微信小程序开发-入门到熟练(wepy-初级篇)

    Title:最近做完了项目,review代码的同时,就想写一篇详细的小程序开发经历,记录自己的项目从0到1的过程 Desc : 小程序从0到1,从小白到完成项目,你需要这样做: step1: 基础知识 ...