**

Java异常处理

**
一。选择题
1、 java中用来抛出异常的关键字是() throw
2、 在异常处理中,如释放资源、关闭文件、关闭数据库等由( )来完成。 finally子句
3、 当方法遇到异常又不知如何处理时,下列哪种说法是正确的( ) [单选题]
正确答案: C、声明异常 !!

二。判断题(共4题)
1、 程序中抛出异常时(throw …),只能抛出自己定义的异常对象。 错误
2、 一个异常处理中 finally语句块只能有一个或者可以没有。 正确
3、 java语言中的所有异常类都是java.lang.Throwable的子类 正确
4、 如果异常发生时,没有捕获异常的代码,程序会正常执行。 错误
三、填空题
1、 下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。

class TrowsDemo
{static void procedure() throws IllegalAccessExcepton{System.out.println(“inside procedure”);throw () IllegalAccessException(“demo”);}public static void main(String args[]){try{procedure();}(){System.out.println(“捕获:”+e);}}

正确答案: new,catch(IllegalAccessException e)
四、简答题(共3题)

1、 【编程题】写代码,再main()方法中调用类CCircle中的方法,计算圆的面积。并且自己定义一个异常类,如果半径为负值,抛出自己定义的异常。(在类CCircle中判断并抛出异常)

public class Circle {private double r;   public Circle(double r) throws CircleException {if(r<0) {throw new CircleException("半径为负数");}this.r = r;}public static void main(String[] args) {try {Circle c = new Circle(-1);} catch (CircleException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
class CircleException extends Exception{public CircleException(String msg) {super(msg);}
}

2、 【编程题】自定义类Sanj,其中有成员 x,y,z,作为三边长, 构造方法Sanj(a,b,c)分别给x,y,z赋值,
方法求面积getArea和显示三角形信息(三个边长)showInfo, 这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。
在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常

public class Sanj {int x;int y;int z;public Sanj(int x,int y,int z) {this.x=x;this.y=y;this.z=z;}public void sanj()throws notsanjiaowxception{double area;double a;if(x+y>z&&x+z>y&&z+y>x) {area=Math.sqrt(((x+y+z)/2)*((x+y+z)/2-x)*((x+y+z)/2-y)*((x+y+z)/2-z));;System.out.println("三边分别为:"+x+" "+y+" "+z);System.out.println("面积为:"+area);}else {throw new notsanjiaowxception(x, y, z);}}
}public class notsanjiaowxception extends Exception{int x;int y;int z;public  notsanjiaowxception(int x,int y,int z){this.x=x;this.y=y;this.z=z;}public void not(){System.out.println("不能构成三角形");}
}public class Test1 {public static void main(String[] args) {Sanj s=new Sanj(1,1,3);try {s.sanj();}catch (notsanjiaowxception n){n.not();}}
}

3、 【编程题】编写如下异常类:
空异常,年龄低异常,年龄高异常,工资低异常,工资高异常,身份证非法异常(自定义异常)。
编写一个员工类,
(1) 有属性:
编号,姓名,年龄,工资,身份证号码,员工人数,员工工资总额
(2) 有构造器:
构造器1:设置编号,年龄,姓名;如果年龄小于18,抛出年龄低异常;如果年龄大于60抛出年龄高异常,如果姓名为null或为空字符串,抛出空异常。
构造器2:设置工资,设置身份证号码;如果工资低于600,抛出工资低异常。
(3) 有方法
增加工资 addSalary(double addSalary),抛出工资高异常,当增加后的工资大于员工工资总额时,抛出此异常。
减少工资 minusSalary(double minusSalary), 抛出工资低异常,当减少后的工资低于政府最低工资时,抛出工资低异常。
显示员工工资总额方法:showTotalSalary(), 抛出空异常,当工资总额为0时,抛出此异常。
显示员工人数:void showTotalEmployee(),抛出空异常。当员工人数为0时,抛出此异常。
编写Main主测试类:Test
分别生成3个员工,测试构造方法的异常抛出。
每个员工分别增加,减少工资,测试方法的异常。
显示员工的人数和工资总额。

package com.Test12;
//首先创建6个异常类
class LowAgeException extends Exception{public LowAgeException(String message) {super(message);}
}
class HeightAgeException extends Exception{public HeightAgeException(String message) {super(message);}
}
class NullException extends Exception{public NullException(String message) {super(message);}
}
class LowSalaryException extends Exception{public LowSalaryException(String message) {super(message);}
}
class HighSalaryException extends Exception{public HighSalaryException(String message) {super(message);}
}
class IdCardException extends Exception{public IdCardException(String message) {super(message);}
}
//员工类
class Employee{private int id;private String name;private int age;private double salary;private String idCard;private int totalEmployee = 10;private double totalSalary = 100000;public Employee(int id,String name,int age)throws Exception{if(age<18) {throw new LowAgeException("年龄太小了!");}else if(age>60) {throw new HeightAgeException("年龄太高了!");}else if((name==null)||name==""){throw new NullException("姓名不能为空!");}}public Employee(double salary,String idCard) throws Exception{this.salary=salary;if(salary<600) {throw new LowSalaryException("工资太低了!");}else if(idCard.length()!=18) {throw new IdCardException("身份证非法!");}}//增加工资public void addSalary(double addSalary) throws Exception{double nowSalary=salary+addSalary;System.out.println("增加后的工资是:"+nowSalary);if(nowSalary>totalSalary) {throw new HighSalaryException("工资增加后太高了!");}}//减少工资public void minusSalary(double minusSalary) throws Exception{double nowSalary=salary-minusSalary;System.out.println("减少后的工资是:"+nowSalary);if(nowSalary<600) {throw new HighSalaryException("工资减少后太低了!");}}//显示员工工资总额public void showTotalSalary()throws Exception {if(totalSalary==0) {throw new IdCardException("工资总额为0!");}}//显示员工人数public void showTotalEmployee()throws Exception {if(totalEmployee==0) {throw new IdCardException("员工人数为0!");}}
}public class Test12_6 {public static void main(String[] args) {try {Employee e1=new Employee(201801,"小青",26);Employee e2=new Employee(655,"123456789987654321");e2.addSalary(1000);e2.minusSalary(100);}catch(Exception e) {e.printStackTrace();}finally {System.out.println("欢迎使用本系统!");}}
}

异常和错误
异常:当程序运行的过程中,用户输入了一些不合法的数据,或在某个特定的环境出现错误,是异常。
错误:可能是编程时的语法错误,可能是系统内部错误。
异常的类图
Throwable 的子类包括Error和Exception ,Exception的子类中,有一个类是RuntimeException是运行时异常类
Error:JVM系统内部错误、资源耗尽等严重情况 。一般情况下,程序员不处理Error的问题的。
Exception: 其它因编程错误或偶然的外在因素导致的一般性问题 。程序员是要处理的。
为什么要处理异常

  1. 程序出现了异常,程序将不能顺利的执行。因此要对出现的异常进行处理。
  2. 程序出现了异常,为了给用户做一些错误的提示及操作的引导。因此要处理异常。

处理异常
有两种处理异常的方式,分别是try-catch-finally 和 throws
1. try-catch-finally处理异常
语法:
try{
可能会出现异常的语句;
}catch(异常类型 引用名){
处理异常执行的代码
}finally{
一定会被执行的代码
}

  1. try-catch代码的执行顺序
    在try中没有捕获到异常,不会执行到catch中的;
    在try中捕获到了异常,立刻执行catch中的代码,catch执行完毕后,try-catch语句执行结束。
  2. try可以有多个catch,每个catch中的异常类型不同,会根据捕获的异常类型,执行对应的catch
    多个catch中如果有父类异常类型,要写在子类异常类型的后面
public static void main(String[] args) { //计算两个数相除的程序 Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); int j = scanner.nextInt(); int index = scanner.nextInt(); String[] strs = {"ab","cd"}; try {System.out.println(i / j); System.out.println("计算完成"); System.out.println(strs[index]); System.out.println("数组元素显示完成"); }catch (ArithmeticException e){ //写什么? e.printStackTrace(); //打印异常的信息 System.out.println("除数不能为0"); }catch (ArrayIndexOutOfBoundsException e2){ e2.printStackTrace(); //打印异常的信息         System.out.println("索引超出范围"); }catch (Exception e){}System.out.println("再见"); }

可以写try-catch组合;可以写try-catch-finally组合;可以写try-finally组合。
finally语句块代表 一定会被执行的代码,一般在finally中写一下关闭/释放资源的代码 。

2. throws处理异常
把异常抛给调用者
语法:在方法参数括号的后面 throws 异常类型
在构造器参数括号的后面 throws 异常类型

public class FileDownLoad { public void download(String path) throws FileNotFoundException { //获得文件对象,想到了一个问题,调用者给我的路径有没有可能文件不存在 //知不知道怎么处理 文件找不到异常 FileInputStream fis = new FileInputStream(path); } }
public class WebFileDown { public void webdown(){ FileDownLoad fileDownLoad = new FileDownLoad();try {fileDownLoad.download("d:/a.txt"); }catch (FileNotFoundException e){System.out.println("文件不存在"); } } }

当不知道异常如何处理,使用throws抛出异常;当知道如何处理异常时,使用try-catch处理异常
Exception的分类

  1. 运行时异常:异常发生在运行期的,RuntimeException下的子类都是运行时异常,例如:
    NullPointerException、ClassCastException、ArrayIndexOutOfBoundsException、
    ArithMeticException、NumberFormatException。通常情况,运行时异常不需要处理,通过代码来避免。
  2. 受检查异常/编译期异常:异常发生在编译期,如果不对异常处理,程序将不能编译。

Throw关键字
将异常对象抛到程序中。
语法: throw 异常对象
在一个方法或构造器中 执行到了throw 异常对象 语句,方法或构造器执行结束了

public FileDownLoad(String path) throws FileNotFoundException { if(path==null||"".equals(path)){//异常的出现 //1. JVM创建了异常对象,异常抛到代码中 //2. 编程主动创建异常对象,抛到代码中 throw new FileNotFoundException();}}

自定义异常
JDK中提供了很多异常类,但开发时要使用一些自己特定的异常,例如:邮箱地址不存在异常、QQ号不存在异常、微信无法登录异常。这种异常需要自定义异常类了
自定义一个类,这个类要具有异常类的所有功能。使用继承来自定义
示例:
需求:开发一套制作邮件系统的框架,其中一个类实现邮件的发送功能。当程序员调用发送功能时,抛出一个邮件地址不存在的受检查异常,调用者处理这个异常。

  1. 自定义邮件地址不存的异常类
public class EmailAddressNotFoundException extends Exception{ //每个异常类中 都有一个message属性,在打印异常信息时 冒号的后面就是message的内容 public EmailAddressNotFoundException(String message){ super(message); } }
  1. 实现邮件发送功能类
public class EmailManager { /*** 发送邮件方法 */ public void send(String address,String title,String content) throws   EmailAddressNotFoundException {//可能会出现邮件地址不存在异常 if(address==null||"".equals(address)){ throw new EmailAddressNotFoundException("邮件地址不存在"); }//System.out.println("发送邮件成功"); } }
  1. 调用邮件发送功能,出现受检查异常(EmailAddressNotFoundException)
public static void main(String[] args) { //OA项目 设计邮件发送 EmailManager emailManager = new EmailManager(); try {emailManager.send("","xxx","xxxx..."); } catch (EmailAddressNotFoundException e) { e.printStackTrace(); } }

Java15异常处理相关推荐

  1. shields 徽标_神经网络生成超级英雄徽标

    shields 徽标 Machine Learning is a superpower in the computer science world. We can use it to predict ...

  2. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  3. SpringBoot (二) :全局异常处理设置

    说在前面 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有 ...

  4. 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理

    目录 异常处理 捕获异常 抛出异常 异常处理 Scala中 无需在方法上声明异常 来看看下面一段代码. def main(args: Array[String]): Unit = {val i = 1 ...

  5. Java基础(七)--Exception异常处理

    发现错误的理想时机是程序运行之前(编译期),然后不太现实,很多异常无法被发现(特别是业务上的数据),需要在运行时解决. 错误恢复机制保证代码健壮性的方式,异常处理在程序中很常见,也是必须的,必须考虑有 ...

  6. 零基础学习python_异常处理(32-33课)

    我们写完python执行的时候是不是经常会遇到报错,而且报错都是大片红字,这样给别人的感受就是你写的程序怎么老是出问题啊,这样我们还咋么混下去呢?于是乎,就有了异常处理的东东. python的try语 ...

  7. Spring Security 实战干货:自定义异常处理

    Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...

  8. C++ 笔记(20)— 异常处理(抛出异常、捕获异常)

    异常提供了一种转移程序控制权的方式. C++ 异常处理涉及到三个关键字: try . catch . throw . throw : 当问题出现时,程序会抛出一个异常.这是通过使用 throw 关键字 ...

  9. recover 没有捕获异常_GO语言异常处理机制panic和recover分析

    本文实例分析了GO语言异常处理机制panic和recover.分享给大家供大家参考.具体如下: Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错 ...

最新文章

  1. 自动驾驶规划方法综述
  2. 浅谈DToF技术原理
  3. python使用matplotlib可视化、移除可视化图像坐标轴的刻度线和标签( remove the default axis ticks and labels)
  4. 日志模块 logging
  5. error nr.1045 access denied for user 'root'@'localhost' (using passwd:no)
  6. 嵌入式数据库 SQLite 浅析
  7. c# 判断是否为数组_c# – 如何检查反射类型是否为数组
  8. MyBatis配置使用
  9. 21个以Bootstrap为框架的WordPress免费主题模板下载
  10. 各国货币代码表(Currency Code)
  11. 视频教程-C++ 编写WebService服务实战-C/C++
  12. 实验01 使用网络协议分析仪Wireshark
  13. Mac顶部菜单栏(Menubar)卡死
  14. linux /etc/motd,Linux 修改进站提示 /etc/motd
  15. C#判断线段是否相交
  16. 济南商讯在线计算机,迅时IP话机 NRP2000W
  17. 这两他安搬家,今天终于搬完了!
  18. 【JS】AMD,CMD,CommenJS和ES6
  19. Wandb:深度神经网络可视化工具介绍及本地部署方式
  20. unity 2d摄像机类型_Unity法线水,顺便利用CommandBuffer实现廉价的深度和截屏

热门文章

  1. 欧姆龙PLC程序欧姆龙案例欧姆龙标准程序
  2. 金融科技直播间|万里数据库在金融核心业务的实践分享
  3. 一號倉:《漫》--《COVID-19》
  4. 四色猜想的推论式证明_Donqy
  5. 【论文分享】ARCUS: Symbolic Root Cause Analysis of Exploits in Production Systems
  6. 1001~1005练习题代码
  7. 洛谷 2680 运输计划 题解
  8. c语言案例教学法的教学大纲,案例教学法在C语言教学中的应用.doc
  9. elementui级联选择器懒加载回显亲测有效
  10. 基于客户感知的楼宇问题定位方法研究与实践