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: 电脑冒烟了。。。,无法继续上课

自习或者放假

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

java异常例子_java 异常的实例详解相关推荐

  1. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  2. java写exe程序实例,java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写java代码,将编写好的java项目导出一个.jar格 ...

  3. java线程和内核线程的,Java中内核线程理论及实例详解

    1.概念 内核线程是直接由操作系统内核控制的,内核通过调度器来完成内核线程的调度并负责将其映射到处理器上执行.内核态下的线程执行速度理论上是最高的,但是用户不会直接操作内核线程,而是通过内核线程的接口 ...

  4. java中List的用法和实例详解

    Java中List的用法和实例详解 List的用法 List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提 ...

  5. java jtable组件_java中jtable组件详解实例

    java中jtable组件详解实例 java 表格控件 JTable 常用操作详解 JTable 是 Swing 编程中很常用的控件,这里总结了一些常用方法以备查阅.欢迎补充,转载请注明作者与出处.一 ...

  6. java asynchronize_Java 中synchronize函数的实例详解

    Java 中synchronize函数的实例详解 java中的一个类的成员函数若用synchronized来修饰,则对应同一个对象,多个线程像调用这个对象的这个同步函数时必须等到上一个线程调用完才能由 ...

  7. mysql 超长 java 问题_MySql超长自动截断实例详解

    MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...

  8. java list用法_java list的用法详解

    java list的用法详解 java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中.以下是百分网小编搜索整理的关于java list的用法详解,需要的朋友可以参考一下!想了解更多相关 ...

  9. java aqs原理_Java并发之AQS详解

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

最新文章

  1. 2021年大数据Spark(四十九):Structured Streaming 整合 Kafka
  2. HRESULT 的判断
  3. proe4.0安装教程
  4. 如何使用浏览器控制台通过JavaScript抓取并将数据保存在文件中
  5. 计算机课有什么作业,计算机组成原理课堂作业
  6. Android小知识-剖析OkHttp中的五个拦截器(上篇)
  7. MySql的基本操作以及以后开发经常使用的常用指令
  8. github使用介绍
  9. 深入理解加密、解密、数字签名和数字证书
  10. linux 环境变量的设置
  11. 三十年了,读书依然不求甚解:一个普通程序员的读书生涯回顾
  12. echarts嵌套饼图
  13. 计算机二级考试主要学什么,计算机二级考试需要学习什么内容
  14. 五子棋游戏(JavaScript+JQuery+Canvas)
  15. Krpano全景制作
  16. 中国百货业重磅报告!新零售玩得好的已经尝到甜头了
  17. 选择防身武器,利用身边的物品才是王道
  18. 今日说“法”:如何防止reg、wire型信号在使用逻辑分析仪时被优化
  19. 全文检索(elasticsearch入门)
  20. Max-Min Fairness带宽分配算法

热门文章

  1. 奇异值分解 SVD 的数学解释
  2. Java中如何实现Date与String之间的数据类型转换
  3. 重型车辆盲区行为检查Behaviours – Heavy Vehicle Blind Spots
  4. 使用卷积神经网络的自动心电图诊断
  5. Caused by: org.gradle.api.InvalidUserDataException: NDK not configured
  6. Ubuntu 系统输入法设置
  7. EventBus的使用(一看就懂)
  8. 2022-2028年中国润滑油基础油行业市场研究及前瞻分析报告
  9. 2022-2028年中国绝缘栅双极晶体管(IGBT)行业投资分析及前景预测报告
  10. PyTorch 笔记(01)— Ubuntu 使用 pip 清华源安装 PyTorch