java 异常的实例详解

 更新时间:2017年09月06日 09:14:12   投稿:lqh  
这篇文章主要介绍了java 异常的实例详解的相关资料,希望通过本文大家能彻底掌握java异常的使用方法,需要的朋友可以参考下

java 异常的实例详解

1、异常的定义:程序在运行时出现不正常情况。

异常的划分:

Error:严重的问题,对于error一般不编写针对性的代码对其进行处理。

Exception:非严重的问题,对于exception可以使用针对性的处理方式进行处理。

2、异常的处理:(固定格式)

try

{需要被检测的代码;}

catch(异常类 变量)

{处理异常的代码(处理方式);}//这里应当是要有针对性的处理方式

finally

{一定会执行的语句;}//通常是关闭资源的代码,因为资源必须得到释放

对多异常的处理方式:

1、声明异常时,建议声明更为具体的异常,这样处理起来就更加的具体。

2、对方声明几个异常,就对应及格catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

*在进行catch处理时,catch中一定要定义具体的处理方式。

*catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明。

Runtime异常:(即运行时异常)

是Exception中一个特殊的子类异常。

如果在函数内抛出该异常,函数上可以不用声明,编译一样通过;如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。

之所以用在函数上声明,是因为不需要让调用者处理。

异常在子父类覆盖中的体现;

1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。

如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。

throws 和 throw 的区别:

throws:使用在函数上(小括号和大括号之间),后面跟的是异常类,可以跟多个。中间用“,”(逗号)隔开。

throw: 使用在函数内,后面跟的是异常对象。throw后面不能加语句,因为throw后面的语句无法执行到。

习题练习:

/*需求:毕老师用电脑上课。 
分析: 
先写出正常运行时的代码:电脑开机后上课 
分析电脑会出现的问题,如:蓝屏,冒烟 
此时需要自定义两个“蓝屏,冒烟“”自定义异常,封装成对象。 
蓝屏后,电脑重启,之后继续上课 
电脑冒烟后,出现了老师的问题,不能上课了,可以先做练习,毕老师将问题抛给校长。此时抛出的问题不再是电脑冒烟,而应该是老师不能上课了 
问题抛给校长后,校长catch后给出解决方案 
*/ 
class LanPingException extends Exception //自定义蓝屏异常 
{ 
  LanPingException(String message) 
  { 
    super(message); 
  } 
} 
 
class MaoYanException extends Exception//自定义冒烟异常 
{ 
  MaoYanException(String message) 
  { 
    super(message); 
  } 
} 
 
class NoclassException extends Exception//自定义不能上课异常 
{ 
  NoclassException(String message) 
  { 
    super(message); 
  } 
} 
 
class Computer  
{ 
  private int state = 2;//硬性规定电脑状态 
  //问题是在运行时发生的,所以得定义在运行时 
  public void run()throws LanPingException,MaoYanException//因为有可能出现错误,所以必须先声明 
  { 
    if (state==2) 
    { 
      throw new LanPingException("电脑蓝屏了。。。");//因为电脑不能自己处理,所以抛给了老师 
    } 
    if (state==3) 
    { 
      throw new MaoYanException("电脑冒烟了。。。"); 
    } 
    System.out.println("电脑开机,运行中。。。。");  
  } 
  public void restart() 
  { 
    System.out.println("电脑重启。。。。"); 
  } 
} 
class Teacher 
{ 
  private String name; 
  private Computer comp; 
  Teacher(String name)  
  { 
    this.name = name; 
    comp = new Computer();//初始化时老师就有电脑了 
  } 
  public void test() 
  { 
    System.out.println("做练习"); 
  } 
  public void teach() throws NoclassException//标识应该是抛出去的异常,能够进行处理的 
  { 
    try 
    { 
      comp.run();//讲课,要先开启电脑 
    } 
    catch (LanPingException e)//抛出了两个异常,必须用两个catch 
    { 
       
      System.out.println(e.getMessage()); 
      comp.restart(); 
    } 
    //这个问题抛给老师的话依旧无法解决,应该抛出对应的问题,这里老师抛出的问题应该是不能上课了 
    catch (MaoYanException e) 
    { 
      test();//不能上课,可以先布置练习,这个必须在throw 之前,因为throw之后的语句不会执行 
      throw new NoclassException(e.getMessage()+",无法继续上课"); 
    } 
     
    System.out.println(name+",上课中。。。。"); 
  } 
} 
 
class ExceptionTest 
{ 
  public static void main(String[] args) 
  { 
    Teacher t = new Teacher("毕老师");//指定一个老师 
    try 
    { 
       
      t.teach();//老师运行这个方法 
    } 
    catch (NoclassException e)//抓住对应的抛出的问题 
    { 
      System.out.println(e.toString());//打印出问题原因 
      System.out.println("自习或者放假");//处理办法 
    } 
     
  } 
} 
当电脑状态为1时,输出为: 
电脑开机,运行中。。。。 
毕老师,上课中。。。。 
当电脑状态为2时,输出为: 
电脑蓝屏了。。。 
电脑重启。。。。 
毕老师,上课中。。。。 
当电脑状态为3时,输出为: 
做练习 
NoclassException: 电脑冒烟了。。。,无法继续上课 
自习或者放假 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • SpringBoot项目请求不中断动态更新代码的实现

    SpringBoot项目请求不中断动态更新代码的实现

    在开发中,有时候不停机动态更新代码热部署是一项至关重要的功能,它可以在请求不中断的情况下下更新代码,这种方式不仅提高了开发效率,还能加速测试和调试过程,本文将详细介绍如何在 Spring Boot 项目在Linux系统中实现热部署,特别关注优雅关闭功能的实现
    2024-09-09
  • Java虚拟机之类加载

    Java虚拟机之类加载

    这篇文章主要介绍了Java虚拟机之类加载,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 使用ByteArrayOutputStream实现将数据写入本地文件

    使用ByteArrayOutputStream实现将数据写入本地文件

    这篇文章主要介绍了使用ByteArrayOutputStream实现将数据写入本地文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Netty中序列化的作用及自定义协议详解

    Netty中序列化的作用及自定义协议详解

    这篇文章主要介绍了Netty中序列化的作用及自定义协议详解,Netty自身就支持很多种协议比如Http、Websocket等等,但如果用来作为自己的RPC框架通常会自定义协议,所以这也是本文的重点,需要的朋友可以参考下
    2023-12-12
  • Java Druid连接池与Apache的DBUtils使用教程

    Java Druid连接池与Apache的DBUtils使用教程

    这篇文章主要介绍了Java Druid连接池与Apache的DBUtils使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12
  • Springboot集成GraphicsMagick

    Springboot集成GraphicsMagick

    本文主要是教大家如何将GraphicsMagick命令行工具集成到Springboot项目中,便可以使用Java进行图片处理相关开发。
    2021-05-05
  • Java 静态绑定与动态绑定深入分析

    Java 静态绑定与动态绑定深入分析

    这篇文章主要介绍了Java 静态绑定与动态绑定深入分析的相关资料,这里对java 的动态绑定和静态绑定做了详细的介绍,对其进行总结整理,需要的朋友可以参考下
    2016-11-11
  • java枚举enum和Enum类的使用

    java枚举enum和Enum类的使用

    本文主要介绍了java枚举enum和Enum类的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 零基础写Java知乎爬虫之抓取知乎答案

    零基础写Java知乎爬虫之抓取知乎答案

    上篇文章我们已经能把知乎的问题抓出来了,但是答案还木有抓出来。这一回合,我们就连着把答案也一起从网站中抠出来=。=
    2014-11-11
  • 微信小程序 navigator 跳转url传递参数

    微信小程序 navigator 跳转url传递参数

    这篇文章主要介绍了 微信小程序 navigator 跳转url传递参数的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论