黑马程序员技术交流社区

标题: 异常 [打印本页]

作者: 王广彬    时间: 2012-8-10 21:13
标题: 异常
在异常中,为甚么
try{
   异常代码;
}catch(Exception e){
System.out.println(e.getMessage());  //请问这里怎么可以调用方法呢,e==null怎么可以调用呢?
        return ;
}
finally{
System.out.println("finally");       //为什么这段代码还能执行
}
还有异常处理throw和throws的区别?怎么用啊
作者: 胡高德    时间: 2012-8-10 21:24
throws 用于抛出方法层次的异常,
并且直接由些方法调用异常处理类来处理该异常,
所以它常用在方法的后面。比如
public static void main(String[] args)  throws   SQLException

2.throw 用于方法块里面的代码,比throws的层次要低,比如try...catch ....语句块,表示它抛出异常,
但它不会处理它,
而是由方法块的throws Exception来调用异常处理类来处理。
这是区别
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。
作者: 焦晨光    时间: 2012-8-10 21:24
本帖最后由 焦晨光 于 2012-8-10 21:30 编辑

在异常中,为甚么
try{
   异常代码;
}catch(Exception e){
System.out.println(e.getMessage());  //请问这里怎么可以调用方法呢,e==null怎么可以调用呢?
        return ;   //Exception e这句话的意思是定义一个Exception类型的类e Exception是异常类,e的值也不为null
     //e.getMessage() 是类在调用类中的方法 所以该代码没有问题
}
finally{
System.out.println("finally");       //为什么这段代码还能执行//finally语句块中的语句是必须要执行的语句
}
还有异常处理throw和throws的区别?怎么用啊
throw语法:throw <异常对象>
throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

1.throw 是语句抛出一个异常;throws 是方法抛出一个异常;(用毕老师的话就是throw是在方法内抛出异常,throws是在声明方法时的头部抛出异常
2.throws可以单独使用,但throw不能;
3.throw要么和try-catch-finally语句配套使用,要么与throws配套使用。
但throws可以单独使用,然后再由处理异常的方法捕获。


作者: 创出一片辉煌    时间: 2012-8-10 22:00
先回答楼主的第一个问题:“e==null怎么可以调用呢?”
   当对象或的异常时,都会抛出一个异常,就像楼主的“try{异常代码}”,此时这个“异常代码”,就会
抛出一个异常对象,而“catch(Exception e)”就是把这个异常对象捕获到!括号里面就想当于“
Exception e=new Exception或其子类()”所以e!=null。
第二个问题
   finally:永远被执行,除非退出jvm。System.exit(0);当代码执行到“return”时,会先去执行finally里面的
代码;
第三个问题
异常处理throw和throws的区别
        throws用在方法声明上,标识该方法有异常抛出。其后跟的是异常类名。
                如果这个异常是Exception系列,那么,需要调用者捕获或者抛出。
                如果这个异常是RuntimeException系列,那么,可以不做任何处理。并且,连throws都可以省略。
       
        throw用于方法体中,表示某种情况下抛出了某个异常。其后跟的是异常对象。
                如果这个异常是Exception系列,需要在方法上用throws标识。
                如果这个异常是RuntimeException系列,则不需要标识。


        public void method(int num) throws Exception
        {
                if(num==0)
                {
                        throw new Exception();
                }
             System.out.println(10/0);
        }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2