A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭绍强 中级黑马   /  2013-4-23 21:46  /  1941 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近刚学异常产生疑问:
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);
   }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 杨同旺 于 2013-4-23 21:58 编辑

以上是异常的声明,异常将抛给函数的调用者,
1.如果调用者接收到的是RuntimeException,可以处理,也可以不处理,
如果不处理,又出现错误,运行时报错.
2.如果调用者抛的是非RuntimeException类型的异常,方法的调用者就必须处理,
如果不处理,编译时报错.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
thorws是抛出异常,throw是抛出一个异常对象,可以用catch来捕获,如果没有用catch,那么谁调用了这个show方法,这个异常对象就抛给了谁

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
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这个对象

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
捕捉异常并抛出
异常格式
try{可能出错的语句}
catch(异常类 异常对象)
错误和异常的区别
错误是没有通过编译,异常是通过编译了,运行时出现错误
throws是方法声明时用的,告诉用户调用该方法时,可能会出现的异常类
Exception是所有异常的父类,无论所有的异常,都能被该类捕捉
常见的异常类
java.lang.ArithmeticException
当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
java.util.InputMismatchException
由 Scanner 抛出,表明用于检索的标记与期望类型的模式不匹配,或者该标记处在期望类型的范围之外。
java.lang.ClassNotFoundException
当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常: 但是没有找到具有指定名称的类的定义。
java.lang.ArrayIndexOutOfBoundsException
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
java.lang.NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报

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语言的
一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
黄玉昆 黑马帝 2013-4-24 22:47:36
7#
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马