黑马程序员 java学习笔记——异常

来源:互联网 发布:悟空问答 知乎 编辑:程序博客网 时间:2024/05/22 21:23

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

概述

概念:程序运行时期发生的不正常情况
由来:问题也是现实生活中的事物,也可以通过Java类进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。
体系:一种是Error,一种是Exception。由于发现这俩大类中还有很多共性东西,所以又进行了抽取。抽取成了Throwable。
Error:对于严重的异常,java通过Error类进行描述,对于Error一般不编写针对性的代码对其进行处理
Exception:对于非严重的,java通过Exception类进行描述,对于Exception可以使用针对性的处理方式进行处理。

异常的处理

异常的处理分两种方式:try..catch和throws抛异常

try...catch异常捕获的三种方式:

try{可能发生异常的代码;}catch(接收捕获异常类的对象 异常类引用变量){处理代码;}

try{可能发生异常的代码;}fianlly{一定要执行的语句;(通常用于关闭资源)}

try{可能发生异常的代码;}catch(捕获异常类的对象 异常类引用变量){处理代码;}finally{一定要执行的语句;(通常用于关闭资源)}
PS:将必须要运行的代码放入finally代码块中。

try...catch异常的示例代码

class Demo{int div(int a,int b){return a/b;}}class ExceptionDemo{public static void main(String[] args){Demo d=new Demo();try{int x=d.div(4,0);System.out.println(x);}catch(Exception e){System.out.println("除零啦!");}System.out.println("over");}}

throws异常的示例代码

class Demo{int div(int a,int b) throws Exception{return a/b;}}class ExceptionDemo{public static void main(String[] args) throws Exception{Demo d=new Demo();int x=d.div(4,0);System.out.println(x);System.out.println("over");}}

throws和throw的区别

1、throws使用在函数上,throw使用在函数内
2、throws后面跟的是异常类,可以跟多个,用逗号隔开;throw后跟的是异常对象

RuntimeException

1、如果在函数中抛出该异常,函数上可以不用声明,编译一样通过;
2、如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
PS:该异常之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后由程序员对代码进行修正。
自定义异常时,如果该异常的发生无法再继续运算,就让自定义异常继承 RuntimeException。

练习

关于毕老师用电脑上课的异常处理

示例代码如下:
class LanPingException extends Exception{LanPingException(String message){super(message);}}class MaoYanException extends Exception{MaoYanException(String message){super(message);}}class Computer{private int state=1;public void run() throws LanPingException,MaoYanException{if(state==2)throw new LanPingException("蓝屏了");if(state==3)throw new MaoYanException("冒烟了");System.out.println("电脑运行");}public void reset(){System.out.println("电脑重启");}}class NoPlanException extends Exception{NoPlanException(String msg){super(msg);}}class Teacher{private String name;private Computer cmpt;Teacher(String name){this.name=name;cmpt=new Computer();}public void prelect() throws NoPlanException{try{cmpt.run()}catch(LanPingException e){cmpt.reset();}catch(MaoYanException e){test();throw new NoPlanException("课时无法继续"+e.getMessage());}System.out.println("讲课");}public void test(){System.out.println("练习");}}public class Demo{public static void main(String[] args){Teacher t=new Teacher("毕老师");try{t.prelect();}catch(NoPlanException e){System.out.println(e.toString());System.out.println("换老师,或者放假");}}}

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击