长治汽车网

如果example程序抛出的异常是exception而不是arithmeticexception,解释为什么

发布时间:2019-07-01

..out;
}
你的ArithmeticException 类是java本身的.,你要想重写这个类必须要这样
抛出异常必须要继承throwbale类或者继承Exception类...;
} catch (Exception e){
throw new ArithmeticException()..

如果你想要手动抛出一个异常可以这样
public static void main(String[] args) {
try{
System.....;0)...println(1/.........,而你重写的ArithmeticException 没有继承该类
你改成这样
class ArithmeticException extends Throwable
{
public ArithmeticException(){
super()

回复:

InputMismatchException 指定异常抛出的作用是告诉调用此方法的人这个方法可能会抛出ArithmeticException,InputMismatchException的父类,InputMismatchException后,Exception是ArithmeticException,方法中只能抛出 ArithmeticException,catch语句捕获这两个异常,InputMismatchException异常throws ArithmeticException,在调用此方法的时候要用try,所以不能抛出了。
声明throws ArithmeticException,InputMismatchException异常或者他们的子类异常

回复:

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。
由于运行时异常的不可查性,为了更合理、更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常。
对于方法运行中可能出现的Error,当运行方法不欲捕捉时,Java允许该方法不做任何抛出声明。因为,大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕捉的异常。
对于所有的可查异常,Java规定:一个方法必须捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将抛出异常。
能够捕捉异常的方法,需要提供相符类型的异常处理器。所捕捉的异常,可能是由于自身语句所引发并抛出的异常,也可能是由某个调用的方法或者Java运行时 系统等抛出的异常。也就是说,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。
任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。
从方法中抛出的任何异常都必须使用throws子句。
捕捉异常通过try-catch语句或者try-catch-finally语句实现。
总体来说,Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。
4.1 捕获异常:try、catch 和 finally

1.try-catch语句
在Java中,异常通过try-catch语句捕获。其一般语法形式为:

try {
// 可能会发生异常的程序代码
} catch (Type1 id1){
// 捕获并处置try抛出的异常类型Type1
}
catch (Type2 id2){
//捕获并处置try抛出的异常类型Type2
}

关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域。Java方法在运行过程中出现异常,则创建异常对象。将异常抛出监控区域之 外,由Java运行时系统试图寻找匹配的catch子句以捕获异常。若有匹配的catch子句,则运行其异常处理代码,try-catch语句结束。
匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。
例1 捕捉throw语句抛出的“除数为0”异常。

public class TestException {
public static void main(String[] args) {
int a = 6;
int b = 0;
try { // try监控区域

if (b == 0) throw new ArithmeticException(); // 通过throw语句抛出异常
System.out.println("a/b的值是:" + a / b);
}
catch (ArithmeticException e) { // catch捕捉异常
System.out.println("程序出现异常,变量b不能为0。");
}
System.out.println("程序正常结束。");
}
}

运行结果:程序出现异常,变量b不能为0。
程序正常结束。
例1 在try监控区域通过if语句进行判断,当“除数为0”的错误条件成立时引发ArithmeticException异常,创建 ArithmeticException异常对象,并由throw语句将异常抛给Java运行时系统,由系统寻找匹配的异常处理器catch并运行相应异 常处理代码,打印输出“程序出现异常,变量b不能为0。”try-catch语句结束,继续程序流程。
事实上,“除数为0”等ArithmeticException,是RuntimException的子类。而运行时异常将由运行时系统自动抛出,不需要使用throw语句。
例2 捕捉运行时系统自动抛出“除数为0”引发的ArithmeticException异常。

public static void main(String[] args) {
int a = 6;
int b = 0;
try {
System.out.println("a/b的值是:" + a / b);
} catch (ArithmeticException e) {
System.out.println("程序出现异常,变量b不能为0。");
}
System.out.println("程序正常结束。");
}
}
运行结果:程序出现异常,变量b不能为0。
程序正常结束。
例2 中的语句:
System.out.println("a/b的值是:" + a/b);
在运行中出现“除数为0”错误,引发ArithmeticException异常。运行时系统创建异常对象并抛出监控区域,转而匹配合适的异常处理器catch,并执行相应的异常处理代码。
由于检查运行时异常的代价远大于捕捉异常所带来的益处,运行时异常不可查。Java编译器允许忽略运行时异常,一个方法可以既不捕捉,也不声明抛出运行时异常。
例3 不捕捉、也不声明抛出运行时异常。

public class TestException {
public static void main(String[] args) {
int a, b;
a = 6;
b = 0; // 除数b 的值为0
System.out.println(a / b);
}
}

运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.TestException.main(TestException.java:8)

例4 程序可能存在除数为0异常和数组下标越界异常。

public class TestException {
public static void main(String[] args) {
int[] intArray = new int[3];
try {
for (int i = 0; i <= intArray.length; i++) {
intArray[i] = i;
System.out.println("intArray[" + i + "] = " + intArray[i]);
System.out.println("intArray[" + i + "]模 " + (i - 2) + "的值: "
+ intArray[i] % (i - 2));
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("intArray数组下标越界异常。");
} catch (ArithmeticException e) {
System.out.println("除数为0异常。");
}
System.out.println("程序正常结束。");
}
}

运行结果:
intArray[0] = 0
intArray[0]模 -2的值: 0
intArray[1] = 1
intArray[1]模 -1的值: 0
intArray[2] = 2
除数为0异常。
程序正常结束。

回复:

第一个因为正常捕获到了异常,并进行了处理,所以程序不会中断 第二个你捕获的异常类型不对,你直接捕获Exception类型的异常就不会中断了 因为发生的是java.lang.ArrayIndexOutOfBoundsException数组脚标越界异常,而你用ArithmeticException 异常是...

回复:

你好,按照你的要求代码如下,你运行时,可以选择性的注释,比如要看到第二个异常,就要把第一段会抛出异常的代码注释掉就行了,看第三个异常同理 public class A { public static void main(String[] args) { try { System.out.println(1 / 0);...

回复:

1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创...

回复:

首先,你先无视掉那个机器人的回答吧…… 因为第3个catch捕获的Exception类是ArithmeticException的子类,而你的程序抛出的就是ArithmeticException类异常,那么在第1个catch语句捕获到的ArithmeticException类异常,同时也属于Exception类异常,...

回复:

首先要明白异常的抛出与捕获机制: 当我们没有在程序中主动使用throw或throws关键字抛出一个异常时,异常一般都是有JVM,即java虚拟机抛出的,我们所写try catch语句块只是用来捕获异常的。JVM在抛出这个异常信息之前会对异常做封装处理,确定异...

回复:

一、Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你...

回复:

你的ArithmeticException 类是java本身的,你要想重写这个类必须要这样 抛出异常必须要继承throwbale类或者继承Exception类,而你重写的ArithmeticException 没有继承该类 你改成这样 class ArithmeticException extends Throwable { public Ari...

回复:

1 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码,“猜猜”它执行后的结果会是...

回复:

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行...

回复:

ArithmeticException 当出现异常的运算条件时就抛出,例如 10/0 就会抛出 InputMismatchException 就是说,输入的内容与你期望的不一样的时候就会抛出 例如 int num = input.nexttnt(); 你输入是中文就会抛出 为什么执行不到if 那时因为你在代码中...

上一篇:华为交换机的user privilege level 级别是啥意思 下一篇:手脚长红色的小疙瘩,越挠越多,很痒,特别是晚上睡觉的时候,这是什

返回主页:长治汽车网

本文网址:http://0355auto.cn/view-166841-1.html
(广告合作:582327583)信息删除