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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王广彬 中级黑马   /  2012-8-10 21:13  /  1320 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在异常中,为甚么
try{
   异常代码;
}catch(Exception e){
System.out.println(e.getMessage());  //请问这里怎么可以调用方法呢,e==null怎么可以调用呢?
        return ;
}
finally{
System.out.println("finally");       //为什么这段代码还能执行
}
还有异常处理throw和throws的区别?怎么用啊

3 个回复

倒序浏览
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: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可以单独使用,然后再由处理异常的方法捕获。

回复 使用道具 举报
先回答楼主的第一个问题:“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);
        }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马