黑马程序员技术交流社区
标题:
异常问题
[打印本页]
作者:
郭绍强
时间:
2013-4-23 21:46
标题:
异常问题
最近刚学异常产生疑问:
class LingException extends RuntimeException{
LingException(String s){
super(s);
}
}
class Text{
void show(int x)throws LingException {//这里的throws是声明异常吧?
if(x==0){
throw new LingException("分母不能为0");//这里的throw抛给谁
}
int s =3/x ;
System.out.println(s);
}
}
public class class1 {
public static void main(String[] args) {
Text t = new Text();
t.show(0);
}
}
作者:
杨同旺
时间:
2013-4-23 21:55
本帖最后由 杨同旺 于 2013-4-23 21:58 编辑
以上是异常的声明,异常将抛给函数的调用者,
1.如果调用者接收到的是RuntimeException,可以处理,也可以不处理,
如果不处理,又出现错误,运行时报错.
2.如果调用者抛的是非RuntimeException类型的异常,方法的调用者就必须处理,
如果不处理,编译时报错.
作者:
wangyougu010
时间:
2013-4-23 21:56
thorws是抛出异常,throw是抛出一个异常对象,可以用catch来捕获,如果没有用catch,那么谁调用了这个show方法,这个异常对象就抛给了谁
作者:
钟佩桓
时间:
2013-4-23 23:10
Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常。
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过
之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,
throw定义在函数内,用于抛出异常对象。
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。
对代码进行修正。
你这个程序
class Text{
void show(int x)throws LingException {//这里的throws是声明异常吧?
if(x==0){
throw new LingException("分母不能为0");//这里的throw抛给谁
}这里你将show函数声明了异常 然后在if里面有抛出了异常···这个肯定是抛出调用这个show方法的对象
你主函数里创建了Text t = new Text(); t这个对象 然后调用了show方法 那么这个throw肯定就是抛给t这个对象
作者:
陈湘林
时间:
2013-4-24 00:13
捕捉异常并抛出
异常格式
try{可能出错的语句}
catch(异常类 异常对象)
错误和异常的区别
错误是没有通过编译,异常是通过编译了,运行时出现错误
throws
是方法声明时用的,告诉用户调用该方法时,可能会出现的异常类
Exception
是所有异常的父类,无论所有的异常,都能被该类捕捉
常见的异常类
java.lang.ArithmeticException
当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
java.util.InputMismatchException
由 Scanner 抛出,表明用于检索的标记与期望类型的模式不匹配,或者该标记处在期望类型的范围之外。
java.lang.ClassNotFoundException
当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常: 但是没有找到具有指定名称的类的定义。
java.lang.ArrayIndexOutOfBoundsException
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
java.lang.NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
作者:
Sword
时间:
2013-4-24 11:58
throws表示方法可能抛出的异常类型,位于参数体与方法体之间。
throw用来抛出具体的异常对象,
try表示检测可能发生异常的代码,需要被检测的代码放在try花括号中。
catch表示捕获异常发生时java虚拟机创建的异常对象。
catch圆括号()中是异常引用变量的声明,用来存放异常对象的堆内存地址。
catch花括号{}中是处理异常的代码。
finally表示发生异常与否,都会执行finally花括{}中的代码。
try快中能抛出异常,但只能使用throw抛出具体异常对象。
在try块中抛出异常对象,就得使用catch来捕获。
Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住
要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在
Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执
行return之前执行,一般结构如下:
try{
程序代码
}catch(异常类型1 异常的变量名1){
程序代码
}catch(异常类型2 异常的变量名2){
程序代码
}finally{
程序代码
} catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定
义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用
这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。这一点非常非常的特殊和重要! Java异常处理的目
的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。同时,通过获取
Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快就能找到出现异常的问题(代码)所在。 Java异常处理是Java语言的
一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护
作者:
黄玉昆
时间:
2013-4-24 22:47
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2