---------------------- 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{ 一定要执行的语句;(通常用于关闭资源) }
PS:将必须要运行的代码放入finally代码块中。try{ 可能发生异常的代码; } catch(捕获异常类的对象 异常类引用变量){ 处理代码; } 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培训 、期待与您交流! ----------------------