java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)
java的错误其实也是一些类文件,它们之所以可以在程序出错时被抛出,是因为在你调用了某些方法的时候,为这些方法需要做一些预先的处理,比如你要调用一个对象的一个属性,如果你所调用的对象是空的话,那么程序是不可以执行的,但是又不能不告诉你,所以就用一个错误来提示你。
异常被抛出,肯定是因为带有异常检查的方法被调用了,可以在构造方法,中进行指定,当别人调用这些方法的时候,并且没有通过检查,那么exception就会被抛出或者被捕获。而调用这个方法的方法,要么捕获要么继续抛出交给它的父类去处理。总之:只要是会出现异常的地方,只有两种处理方式,第一:使用try和catch进行捕获。第二:把错误交给父类去处理,就是throws exception。
这些错误提示,或者在你所调用的方法里面有所定义,或者是在虚拟机JVM运行时候有所定义。在虚拟机运行时候抛出的异常就是 运行时异常,包括 NullPointExcetion,ClassCastException,IndexOutOfBoundsException。总之:它肯定是存在的,我们有时在想,我根本就没有在我自己定义类里面的方法上添加异常,可是它也会抛出异常,这是因为类在程序判断的时候,满足了某些条件,于是程序就自动实例化了一个错误的对象,然后把这个错误给抛了出来,比如说NullPointerException空指针异常,你可能会说这个错误的话,我找不到它定义在哪里啊?可是你要知道的是,你的方法终究是要运行的,当你运行的时候,虚拟机在执行方法的时候它是会进行检查的,它检查的时候当然也是调用方法了,而在调用之前,它会把对你将要调用的对象进行检查,如果有错就会实例化一个NullPointerException出来,检查是很容易理解的事情,就像你实例化了一个类,然后在运行的时候,对这个类的一些信息进行判断,只是jvm检查的比较复杂,但是思想肯定是一致的。
2 异常的分析:
在我们运行程序的时候,如果出现了,错误,那么异常信息会被打印出来,打印的时候的顺序是:先打印此类所在的继承链的父类的异常信息,之后再打印子类,以此类推。因为什么呢?因为对象实例化的过程也就是这个顺序,所以打印的时候顺序也是一样的,当然如果你已经对错误进行了处理的话,那么自然父类的错误就不会被打印出来了,所以说当出现异常的时候,那些最先打印出来的都是父类的信息,你出错的调用位置应该是在下边子类中。
自定义异常:
上面的分析可以知道,如果要自己定义异常的话,只需要自己定义一个类,这个类只需要集继承Exception类,然后你可以为这个类指定构造方法,根据你自己的需求去打印出你想提示的信息,在抛出的时候,也就是在执行条件判断后throw new MyException的时候,你可以指定异常的ID,这完全是你自己可以操作的事情,比如你想要在打印错误的同时,把错误的种类也打印出来就可以把下面的那个MyException的构造函数修改为:
测试举例:
- <span style="font-size:14px;">package exception;
- public class MyException extends Exception {
- private static final long serialVersionUID = 1L;
- private int idNumber;
- public int getIdNumber() {
- return idNumber;
- }
- public MyException(String exception, int id) {
- super(exception);
- this.idNumber = id;
- }
- }</span>
测试自定义错误:
- package exception;
- public class TestMyExeption {
- public void regist(int num) throws MyException {
- if (num < 0) {
- throw new MyException("人数为负数不合理!", 1);
- }
- System.out.println("throw 之后的程序不能执行" + num);
- }
- /**
- * 把异常给抛出去,交给更高层处理
- *
- * @throws MyException
- */
- public void manager() throws MyException {
- regist(-100);
- }
- /**
- * 把异常给截获并处理
- */
- public void manager1() {
- try {
- regist(-1330);
- } catch (MyException e) {
- // 在处理错误的时候,可以根据自己的需要去打印错误的信息
- System.out.println("出错了,错误的编号:" + e.getIdNumber());
- }
- System.out.println("程序可以继续执行!");
- }
- public static void main(String[] args) throws MyException {
- new TestMyExeption().manager();
- // new TestMyExeption().manager1();
- }
- }
抛出 Exception:
- package exception;
- import java.util.Scanner;
- public class TestThrow {
- public static void main(String[] args) {
- TestThrow t = new TestThrow();
- System.out.print("请输入您的年龄:");
- System.out.println("您的年龄:" + t.inputAge());
- }
- public int inputAge() {
- int result = -1;
- Scanner scan = new Scanner(System.in);
- while (true) {
- try {
- result = scan.nextInt();
- if (result < 0 || result > 130) {
- Exception me = new Exception("年龄超出合理范围!");
- throw me;
- }
- break;
- } catch (Exception e1) {
- System.out.print(e1.getMessage() + "请重新输入:");
- continue;
- }
- }
- return result;
- }
- }
- 顶
java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)的更多相关文章
- java异常处理之throw, throws,try和catch
转自 http://blog.csdn.net/zhouyong80/article/details/1907799 程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...
- java异常处理及自定义异常的使用
1. 异常介绍 异常机制可以提高程序的健壮性和容错性. Throwable:Throwable是java语言所有错误或异常的超类. 有两个子类Error和Exception. 1.1 编译期异常 编译 ...
- 75.Java异常处理机制-自定义异常
package testDate; //自定义异常 public class MyException extends Exception{ public MyException(){ } public ...
- java异常处理机制
本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...
- 深入探索 高效的Java异常处理框架
转载自:http://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Sprin ...
- Java 异常处理 try catch finally throws throw 的使用和解读(一)
//最近的一个内部表决系统开发过程中,//发现对异常处理还存在一些模棱两可的地方,//所以想着整理一下//主要涉及到://1.try catch finally throws throw 的使用和解读 ...
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...
- Java异常处理的两种方式以及自定义异常的使用方法
异常 就是程序出现了不正常的情况 Error:严重问题,不需要处理 Exception:称为异常类,他表示程序本身可以处理的问题 RuntimeException:在编译期是不检查的,出现问题后,需要 ...
- “崩溃了?不可能,我全 Catch 住了” | Java 异常处理
前言 今天我们来讨论一下,程序中的错误处理. 在任何一个稳定的程序中,都会有大量的代码在处理错误,有一些业务错误,我们可以通过主动检查判断来规避,可对于一些不能主动判断的错误,例如 RuntimeEx ...
随机推荐
- win7 64位装sql2000
1.运行不了安装程序 右击安装exe文件->属性->兼容性->以xp sp3兼容和管理员身份 2.安装过程中提示“被挂起”的故障 解决:打开注册表编辑器,在HKEY_LOCAL_MA ...
- Gartner2017年数据科学领域最酷供应商出炉,实至名归
文 | 帆软数据应用研究院 水手哥 更多大数据资讯和企业案例可关注 :知乎专栏<帆软数据应用研究院> 近日,Gartner公布了2017年度数据科学和机器学习领域的最酷供应商,清一色的美国 ...
- Eclipse 插件ibeetl
启动Eclipse 打开菜单栏按一下菜单路径依次打开 Help -> Install New Softwave… ->点击Add按钮弹出一个对话框 弹出的对话框中Name随意填写,如填写“ ...
- HDU_1729_sg函数(dfs)
Stone Game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- mac 上执行 rm -rf /
# 很可怕的指令,清空磁盘所有资料,千万不要用 sudo 尝试,吓的小心肝差掉跳出来 rm -rf / 无聊,想执行rm -rf /会怎样,想起没加sudo时对~/download执行提示权限不足,被 ...
- [Java]链表的打印,反转与删除
class Node{ public int value; public Node next=null; public Node(int value) { this.value=value; } }p ...
- mysql的安装和下载
1.MySQL下载后的文件名为:mysql_installer_community_V5.6.21.1_setup.1418020972.msi,示意图如下: mysql下载地址: 链接:https ...
- Oracle数据库的性能调整
oracle是一个高性能数据库软件.用户可以通过参数的调整,达到性能的优化.性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的. ...
- 【ABCD组】Scrum meeting 2
前言 第2次会议在6月14日由组长在教9 405召开. 主要对下一步的工作进行说明安排,时长90min. 主要内容 经会议讨论,由于一些对知识掌握的原因,决定放弃java语言实现系统,改用c#完成此系 ...
- 【hihoCoder挑战赛28 A】异或排序
[题目链接]:http://hihocoder.com/problemset/problem/1509 [题意] [题解] 每次找到相邻两个数的二进制形式中; 不同的最高位; 显然S在这一位必然是确定 ...