热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

异常与异常链

一、异常的五个关键字try.catch.finallythrowsthrow1、try语句的作用是将可能会出错的代码放入try程序块中2、catch的功能是捕获异常

一、异常的五个关键字

  try....catch....finally

  throws   throw

  1、try语句的作用是将可能会出错的代码放入try程序块中  

  2、catch 的功能是捕获异常,当try中出现异常时,则将程序执行的权限交给catch语句

  3、finally代码块的作用是不论程序是否出现异常,finally代码块都将执行,除非遇到system.exit(1)导致虚拟机JVM停止

  4、throws作用是声明一个方法里面可能出现的异常,放在方法声明的最后

  5、throw是一个动词,作用是抛出异常

二、异常链

  把捕获一个异常,然后接着抛出另一个异常,并把原始信息保存下来是一种典型的链式处理,也被成为"异常链"。

  从JDK1.4以后,所有Throwable的子类在构造器中都可以接受一个cause对象作为参数。这个cause就用来表示原始异常,这样可以把原始异常传递给新的异常,使得即使在当前位置创建并抛出了新的异常你也能通过这个异常链追踪到异常最初发生的位置。

  例如,我们完成注册登录异常,当注册时若Username或Password为null,则抛出ZhuceException,登录时若出现异常则抛出LoginException,然而当由于注册导致登陆无法成功,登录异常的根原因还是由于注册异常,我们应当不仅抛出LoginException异常,还应当将ZhuceException信息也同时给出。

    代码如下:

ZhuceException.java

1 public class ZhuceException extends Exception{
2
3 public ZhuceException() {
4 super();
5 // TODO Auto-generated constructor stub
6 }
7
8 public ZhuceException(String message, Throwable cause) {
9 super(message, cause);
10 // TODO Auto-generated constructor stub
11 }
12
13 public ZhuceException(String message) {
14 super(message);
15 // TODO Auto-generated constructor stub
16 }
17
18 public ZhuceException(Throwable cause) {
19 super(cause);
20 // TODO Auto-generated constructor stub
21 }
22
23 }

LoginException.java

public class LoginException extends Exception{public LoginException() {super();// TODO Auto-generated constructor stub
}public LoginException(String message, Throwable cause) {super(message, cause);// TODO Auto-generated constructor stub
}public LoginException(String message) {super(message);// TODO Auto-generated constructor stub
}public LoginException(Throwable cause) {super(cause);// TODO Auto-generated constructor stub
}}

User.java

public class User {String userName;int age;String password;String sex;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}

Zhuce.java

public class Zhuce {String userName;int age;String password;String sex;void zhuce(User user) throws ZhuceException{user.setUserName(userName);user.setPassword(password);user.setAge(age);user.setSex(sex);if(userName==null||password==null){throw new ZhuceException("注册失败,用户名或密码不能为null");}else{System.out.println("注册成功");}}public Zhuce(String userName,int age,String password,String sex){this.userName=userName;this.age=age;this.password=password;this.sex=sex;}
}

Login.java

public class Login {void login (User user,Zhuce zhuce) throws LoginException{try{zhuce.zhuce(user);}catch(ZhuceException e){e.printStackTrace();throw new LoginException("注册时用户名或密码为null导致登录失败",e);      //实现异常链的核心代码}if(user.userName=="道友请留步"){if(user.password=="123456"){System.out.println("登陆成功");}else{throw new LoginException("密码输入有误");}}else{System.out.println("用户名输入错误!");} }
}

Test01.java

public class Test01 {public static void main(String[] args) {User user=new User();Zhuce zhuce=new Zhuce("道友请留步",18,"123456","男");Login login=new Login();try{login.login(user, zhuce);}catch(LoginException e){e.printStackTrace();}}
}

 

转:https://www.cnblogs.com/daguoshi/p/10979538.html



推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
author-avatar
JasonXie
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有