写给自己的JAVA工程师之路-异常

news/2024/11/30 5:44:20/

认识异常

异常指的是导致程序执行中断的一种指令流,一旦异常产生而且没有正常处理的话,那么程序将会中断执行。
所有的异常类都是 Throwable类的子类,而 Throwable类又是Object的子类,从JDK1.0开始提供。
但是在开发中是几乎不会使用 Throwable类处理异常,而是使用 Throwable类下面的 Exception和
  • Error两个子类。
于是有一道面试题:请解释  Throwable类下的  Exception类和 Error类:
Error:在程序还未执行时出现的错误,一般指的都是JVM出错,用户无法处理。
Exception:指的是在程序运行中出现的异常,异常处理都是针对此类型完成的。

异常处理流程



1 当程序中产生异常之后,会由JVM自动的根据异常类型实例化一个指定的异常对象。
2  程序需要判断当前的代码之中是否存在有异常处理逻辑,如果没有,则交由JVM处理,而后中断程序执行。
3  如果程序中存在异常处理,则try语句会捕获该异常类的实例化对象(想象为引用传递)。
4  捕获到的异常类实例化对象要与catch中的异常类型进行匹配。
5  如果catch匹配了该异常类型则使用相应的代码进行处理,随后要执行finally代码,如果没有任何一个异常类型与catch匹配,则直接跳转final语句。
6  执行完finally代码之后要判断该异常是否已经处理过了,如果已经处理过了则继续执行后续代码,如果没有处理,则程序继续交由JVM处理。
注意:按照对象向上转型的原则,所有的子类对象都可以向父类转换,即所有异常都可以使用Exception进行处理。(按照开发团队要求是否明确异常类型处理)

异常处理


关键字

try...catch:捕获异常并处理异常。
throws:明确的告诉用户执行某一个方法中有可能会产生哪些异常,主要用于方法的声明处。
throws并不处理异常,而是交给上一级进行处理,也就是说,调用有throws的方法就需要用try...catch处理异常,如果在main方法使用throws那么将交由JVM处 理。
throw:异常对象一般是由JVM实例化,但是有了throw,用户就可以自己去实例化异常对象,如果要抛出这个对象,就必须使用throw关键字。
finall:一定会执行的代码块。
面试题:请解释throw与throws的区别
throw:在方法体中使用,表示手工抛出一个异常类的实例化对象。
throws:在方法的声明中使用,表示此方法调用时必须明确进行异常处理。

实际应用:

1  try...catch (不叙述)

2  try...catch,throws,throw,finally

class MyMath{public static int div(int x,int y)throws Exception{int result=0;//保存计算结果System.out.println("**** 除法计算开始 ****");try{result=x/y;}catch (Exception e) {throw e;//继续向上抛}finally{System.out.println("**** 除法计算结束 ****");}return result;}
}public class ExcDemo {public static void main(String[] args) {try {System.out.println(MyMath.div(10, 0));} catch (Exception e) {e.printStackTrace();}}
}

RuntimeException

面试题:请解释Exception和RuntimeException的区别
RunTimeException是Exception的子类;
Exception定义的异常都需要进行强制性的处理,而RuntimeException下的子类在编写代码时不需要进行强制的异常处理,
有用户自己选择,如果不进行处理并产生异常将交由JVM处理。

自定义异常类

class ScoreException extends Exception{public ScoreException(String msg){super(msg);}
}public class ExcDemo {public static void main(String[] args) throws Exception{double score=101.0;if(score>100.0){throw new ScoreException("成绩不能大于100");}}
}



http://www.ppmy.cn/news/234427.html

相关文章

写给自己的JAVA工程师之路-接口

1.1 接口的基本概念 接口是一种特殊的类,但是在接口里面的组成与类不同,比类的组成部分简单,主要由抽象方法和全局常量所组成。而接口使用interface关键字定义。 interface A{public static final String MSG"HELLO WORLD";public …

写给自己的JAVA工程师之路-正则表达式

1 认识正则表达式 判断字符串是否由数字组成 最原始实现方式 public class demo {public static void main(String[] args) {String a "123123" ;System.out.println(isNumber(a));}public static boolean isNumber(String str) {char [] ch str.toCharArray();fo…

web开发之路——jQuery(下)

一、小例子——tab菜单 <!DOCTYPE html> <html langen> <head><meta charset"UTF-8"><title></title><!-- line-height:33px; 让标题的内容居中显示 padding:5px; 边距--><style>.tab-box .box-menu{background-c…

小程序制作海报,保存本地

<view stylewidth:100%;> <image stylewidth:100%; src"../../img/china_img.png"></image> </view> <view classCONTECT>欢迎你是神啊深刻的三大杀菌剂啥都会受到大叔大婶帝国时代干</view> <view stylewidth:100%;margin-t…

欢迎使用CSDN-markdown编辑器;手残啊呜发

快捷键-加粗 按按按Ctrl B -斜体 CTRL I-引用 CTRL Q-插入链接 Ctrl L键键键-插入代码 按下按下按下Ctrl K-插入图片 按按按Ctrl G-提升标题 Ctrl H键键键-有序列表 Ctrl O键键键-无序列表 按按按Ctrl U-横线 按按按Ctrl [R-撤销按Ctrl Z键键-重做 按Ctrl Y ##减…

关于感兴趣区域和掩膜的问题!

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/JiaFanChen/article/details/51149338 本文章主要对感兴趣区域ROI的操作&#xff08;对于ROI区域图像叠加&#xff09;说明 在图像处理的领域&#xff0c;我们常常需要去设置…

python笔记:太困了,读取并显示按行业分类的股票数据提提神

先升级pip&#xff0c;要不tushare安装不上&#xff0c;使用Anaconda Prompt执行命令&#xff1a; python -m pip install --upgrade pip 再安装tushare&#xff1a; pip install tushare # -*- coding: utf-8 -*- """ Created on Tue May 7 16:16:17 2019…

Vue基础语法(样式绑定、时间处理器、表单、组件)

样式绑定 一、 class绑定 使用方式&#xff1a;v-bind:class“expression” expression的类型&#xff1a;字符串、数组、对象 二、 style绑定 v-bind:style“expression” expression的类型&#xff1a;字符串、数组、对象 样式绑定.html <!DOCTYPE html> <html&…