packagecn.kecheng;importjava.util.Scanner;/**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序

异常处理机制:java中通过异常处理机制为程序提供异常处理的能力,保持程序继续运行而不中断!

异常处理:涉及异常处理的关键字有try…catch/try…catch…finally

* try{有可能产生异常情况的代码段}catch(异常类型){对异常进行处理的代码段} 1.正常执行,没出现任何异常2.出现异常,异常处理,正常结束

* 把有可能产生异常的代码放到try代码块中,catch代码块负责捕获并处理异常。

* try{有异常情况的代码段}catch(异常类型){对异常进行处理的代码段}finally{}

* finally块用于进行收尾工作(关闭数据库、关闭文件、释放内存等资源),不管是否发生异常,finally都执行。finally 总是执行,常用进行收尾类工作。

* 特殊情况(B)

[1] finally不执行的情况。

System.exit(0) 正常推出(退出)jvm,finally不会执行。

[2]catch可以省略,变成try…finally块。*/

public classCurriculum {public static voidmain(String[] args) {

Scanner arr= newScanner(System.in);

System.out.println("请输入所选学科:1.语文2.数学3.英语");try { //我输入a,不符合下面的int的类型,所以出现异常,然后执行直接从下面这行调到cath(异常捕获并处理)那

int arr1 =arr.nextInt();if(arr1==1){

System.out.println("语文");}else if(arr1==2){

System.out.println("数学");

}else if(arr1==3){

System.out.println("英语");

}else{

System.out.println("输入有误");

}

}//如果不用Exception这个父类,为了进行匹配,可以用多重catch进行多重匹配catch{异常类型1}catch{异常类型2}catch{异常类型3}。。。

catch (Exception e){//捕获异常,进行异常匹配,【如果异常类型不匹配,程序会中断执行】Exception是所有异常的直接或间接父类

System.out.println("输入有误");//异常处理//打印异常的信息

System.out.println(e.toString());//打印异常堆栈信息,

e.printStackTrace();//返回异常的描述信息,如果没有信息,返回null(InputMismatchException 没有描述信息)

System.out.println(e.getMessage());//getMessage:返回异常的描述信息

// jvm 正常结束运行 【System.exit(0)】;如果有这个finally不会执行。因为代表整个虚拟机都关闭了,其他情况,不管是否有异常,finally都会正常执行

} finally{

System.out.println("程序结束"); }//finally块用于进行收尾工作(关闭数据库、关闭文件、释放内存等资源),不管是否发生异常,finally都执行。finally 总是执行,常用进行收尾类工作。

System.out.println("程序结束");

}

}

Throwable 类是Java语言中所有错误(Error)或异常(Exception)的父类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者Java throw语句抛出。

Error 类表示错误类。仅靠程序本身无法恢复的严重错误。jvm内存耗尽、jvm崩溃等。

Exception 类表示异常类,可以通过java 异常处理机制处理。

Exception 根据是否处理分为两种情况。

RuntimeException:运行时异常。不要求程序必须做出处理。是所有运行时异常的父类。

CheckedException:检查时异常。要求程序必须处理,不处理编译不通过。

packagecn.sxt02.exception04;importjava.util.Date;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Scanner;public classTest01 {public static voidmain(String[] args) {//运行时异常

Scanner sc = newScanner(System.in);//runtime exception

int r =sc.nextInt();

System.out.println("r = "+r);//检查时异常

SimpleDateFormat df = newSimpleDateFormat();try{

Date date= df.parse("2019");

}catch(ParseException e) {

e.printStackTrace();

}

}

}

常见的运行时异常

ArithmeticException:数学计算异常。比如除数为0

InputMismatchException:输入不匹配异常

ArrayIndexOutofBoundsException:数组下标越界异常。

NullPointException:空指针异常,对象没有初始化就使用时,jvm会抛出该异常

IllegalArgumentException:非法参数异常。

ClassCastException:强制类型转换异常。

NumberFormatException:数字格式化异常。比如把“abc”格式化成数字。

常见的检查时异常:

ClassNotFoundException:类没有被发现异常。

SQLException:数据库相关异常

IOException:IO操作异常

ParseException:解析错误异常

FileNotFoundException:文件未发现异常。

运行时异常和检查时异常的区别

运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们作出处理,比如InputMismatchException、ArithmeticException、NullPointerException等。即使没有使用try-catch或throws进行处理,仍旧可以进行编译和运行。如果运行时发生异常,会输出异常的堆栈信息并中止程序执行。

Checked异常(非运行时异常):除了运行时异常外的其他异常类都是Checked异常。程序必须捕获或者声明抛出这种异常,否则出现编译错误,无法通过编译。处理方式包括两种:通过try-catch捕获异常,通过throws声明抛出异常从而交给上一级调用方法处理

packagecn.kecheng;//throws关键字//当一个方法可能存在异常,而此时自身又无法更好的处理,可以交给外界处理。此时用throws声明并抛出异常。//开发者可以根据需要声明检查时异常(Exception或者非运行时异常)和运行时异常(RuntimeException或其子类)//检查时异常:必须处理,否则无法通过编译 运行时异常:可以不处理,没处理也可正常运行

public classTest01 {public static int div(int a, int b)throwsArithmeticException{//抛出数学计算异常(运行时异常),因为除数可能为0

int r = a /b;returnr;

}public static voidmain(String[] args) {try{

Test01.div(10, 0);

}catch(ArithmeticException e) {

System.out.println("除数不能为0");

}

}

}

packagecn.kecheng;public classTest01 {public static int div(int a, int b)throwsException{//抛出异常(所有异常的父类,必须解决),因为除数可能为0

int r = a /b;returnr;

}//异常上抛

public static void main(String[] args) throwsException{//如果调用处也不知道如何处理异常,可选择继续声明异常,我们把这个过程称为异常上抛。//【1】 如果调用处知道如何处理!

/*try {

Test01.div(10, 0);

} catch (Exception e) { //异常捕捉和处理

e.printStackTrace();//所以返回异常的描述信息,无需上抛

}*/

//【2】调用处也不知道如何处理,这需要异常上抛

Test01.div(10, 0);//不知道如何处理,就直接写调用和异常上抛

}

}/*声明异常和重载的关系:声明异常和重载没有任何关系

方法重载

[1]方法名相同

[2]参数列表不同(个数、类型、顺序)

[3]和返回值、修饰符、声明异常无关。*/

声明异常和重写的关系

[1]父类方法声明了异常(检测时或运行时),子类可以不声明任何异常。

可以认为:父类方法抛出异常,子类在重写过程中把该异常处理掉了,所以子类方法不用声明异常。

[2] 父类方法声明没有声明任何异常(检测时或运行时),子类也不声明异常或者声明运行时异常。

[3] 父类声明了异常(检测时或运行时),子类声明完全一样的异常。

packagecn.kecheng;/**手动抛出异常 关键字:throw

* 除了系统自动抛出异常外,有些问题需要开发者手动抛出异常。使用关键字throw

*

**/

public classStudent {privateString name;privateString gender;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getGender() {returngender;

}//声明异常

public void setGender(String gender) throwsException{if(gender.equals("男") || gender.equals("女")) { //equals 判断属性值是否相等this.gender =gender;

}else{throw new Exception("性别不合法!");

}//手动抛出异常

}publicStudent(String name, String gender) {super();this.name =name;this.gender =gender;

}

packagecn.kecheng;importjava.util.Scanner;public classTest01 {public static voidmain(String[] args){

Student stu= newStudent();

stu.setName("二狗");try{

stu.setGender("xxx");

}catch(Exception e) {

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

}//getMessage:返回异常的描述信息

}

}

packagecn.sxt02.exception07;//自定义的异常类/*自定义异常

如果开发者需要手动抛出的异常在系统不存在,可以自定义异常。

如果要自定义异常,首先要确定异常类型,如果异常是运行时异常,必须继承RuntimeException或其子类;如果异常是检查时异常,必须继承Exception或其子类。

异常的命名方式,参考系统命名方式,以Exception结尾。*/

public class AgeException extendsException{publicAgeException() {super();

}publicAgeException(String message) {super(message);

}

}

packagecn.sxt02.exception07;public classStudent {privateString name;privateString gender;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getGender() {returngender;

}//自定义的异常类

public void setGender(String gender) throwsAgeException{if(gender.equals("男") || gender.equals("女")) {this.gender =gender;

}else{throw new AgeException("性别不合法!");

}//抛出自定义的异常类

}publicStudent(String name, String gender) {super();this.name =name;this.gender =gender;

}publicStudent() {super();

}

}

packagecn.sxt02.exception07;importjava.util.Scanner;public classTest01 {public static voidmain(String[] args){

Student stu= newStudent();

stu.setName("二狗");try{

stu.setGender("xxx");

}catch(AgeException e) {

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

}//返回自定义的异常类的信息

}

}

java 异常处理的关键字_java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类...相关推荐

  1. JavaSE——异常处理(异常简介、try-catch-finally、throws、throw)

    第4节 异常处理 异常处理学习的目标: 明确说明是异常(重点) 能辨识出常见的异常及其含义(熟悉) 理解异常产生的原理(了解) 能处理异常(重点) 能够自定义异常(熟悉) 一.什么是异常? 异常是在程 ...

  2. java 批量处理 示例_Java中异常处理的示例

    java 批量处理 示例 Here, we will analyse some exception handling codes, to better understand the concepts. ...

  3. java私有表示标识_java里面的标识符、关键字和类型

    1. 注释 Java中有三种注释: (1) // -单行注释,注释从"//"开始,终止于行尾: (2)  -多行注释,注释从""结束: (3)  -是Java特 ...

  4. java中常用的关键字_java中的常用的关键字

    在java编程过程中,会经常写到一些关键字,但是对于他们应用的方式其实一直是模仿状态,并没有很实质的去了解,为什么要这么用,导致程序不能优化,或者出现了bug不明所以,因而再详细的去重温了一下各种了解 ...

  5. java static final关键字_Java的static与final关键字

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 static:(静态修饰符)面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修 ...

  6. java 多线程 关键字_java多线程基础(synchronize关键字)

    线程:进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元. 线程:进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地 ...

  7. java定义接口的关键字_Java中定义接口的关键字是什么?

    Java中定义接口的关键字是"interface"."interface"是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合 ...

  8. java定义接口必用关键字_Java中定义接口的关键字是什么

    Java中定义接口的关键字是什么 Java中定义接口的关键字是"interface"."interface"是面向对象编程语言中接口操作的关键字,功能是把所需成 ...

  9. java final与继承_Java 之继承和 final 关键字

    继承的概述 继承的特点 super 关键字 函数覆盖 子类的实例化过程 final 关键字 1. 继承的概述 继承是类与类之间的关系. 继承的好处: 提高了代码的复用性 让类与类之间产生了关系, 给第 ...

最新文章

  1. ADSL自动更换IP地址源代码
  2. 第十六届全国大学智能车竞赛创意组比赛国赛获奖名单
  3. 人工智能数学基础----导数
  4. Linux终端字符颜色设置
  5. pyinstaller 'utf-8' codec can't decode byte 0xce in position 123: invalid continuation byte
  6. 【C 语言】内存四区原理 ( 常量区示例 | 不同函数返回的相同字符串的指针地址相同 )
  7. 多核分布式队列的实现:“偷”与“自私”的运用(1)
  8. 11年瑞纳手动挡值多少钱_1个本科学历,值多少钱?
  9. 正则表达式-入门资料
  10. echarts的pie图中,各区块颜色的调整
  11. linux内核异常解析,内核异常分析方法
  12. PCL_点云数据处理方法概述
  13. MarkDown下载以及入门语法(一)
  14. C语言也能干大事第十二节(如鹏基础)
  15. idea好用的一些设置
  16. 转载:声优 - 野上ゆかな
  17. html游戏寻宝,达内:用scratch实现的小游戏—迷宫寻宝
  18. 一个好用的windows文件搜索工具
  19. .NET启动时,出现无法加载MSXML3.dll
  20. 海外问卷调查,招募合伙人

热门文章

  1. webgis之geowebcache跨域
  2. bat之启动与禁用网卡
  3. amd显卡用黑苹果输出黑屏_教大家黑苹果英伟达免驱显卡黑屏怎么解决的方法
  4. excel 两组数据交点_让科研人相见恨晚的技巧,用Excel做柱状图、箱型图及数据分析!(转载自ZSCI)...
  5. android sdk build tools 版本,SDK Build Tools 版本说明
  6. html怎么用div从左到右,单独使用CSS,你怎么能有一个从右到左的边框底部渐变?...
  7. pycharm怎么安装python3.6_【python】Mac在Pycharm中导入python3.6(简单易行)
  8. 研华数据采集卡如何采集压力信号转化为数字信号_感知世界的模拟量信号
  9. Java中String转换int
  10. 绝对路径中“./”、“../”、“../../”代表的含义,包你一看就会