在java中 使用throw关键字抛出异常       使用throws关键字声明异常

public static void main(String[] args) throws Exception{try {
                //将一个类的全限定名字符串转换成内存中该类对应的字节码文件
                //Sql Server 连接方式1
                //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //MySql  连接方式2
                //Class.forName("com.mysql.jdbc.Driver");
                //Oracle   连接方式3
                Class.forName("oracle.jdbc.driver.OracleDriver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                throw new Exception("相关异常");
            }

throw关键字是将异常在自己方法中解决     throws关键字是将异常声明出来,让其调用方去解决,如果其调用方是main方法,

其同样使用throws声明异常,那么此异常将会交给java虚拟内部解决。

 

子类方法不能比父类抛出更多的异常

例如:父类A中的方法Run()没有异常抛出,

  那么在类B中重写A类中的Run()方法时就必须要使用try-catch进行环绕解决编译报红,而不能够使用throws将异常声明出去。

 

捕获异常的过程中需要注意的事情:重点: 无论何时finally块代码都会执行,除非一种情况下:

                  在try或是catch块中出现了System.exit(0) 这一代码

 

注意在捕获异常的过程中如果有了return的存在的特殊情况(不推荐此中方法写代码):

 1 public static void main(String[] args) throws Exception {
 2         
 3         try {
 4             Say();
 5         } catch (Exception e) {
 6             e.printStackTrace();
 7         }
 8         finally{
 9             System.out.println("finally over");
10         }
11         
12     }
13     
14      static void Say() throws Exception{
15         try {
16             int num = 2/0;
17         } catch (Exception e) {
18             //System.out.println("报错了");
19             //System.out.println(e);
20              throw new Exception("报错了2");//此处只是将异常封存在了内存中并没有输出错误信息。
21         }finally{
22             System.out.println("结束了");
23             //return;    //此处的return语句会跳出当前try-catch块  结束本方法且不会抛出异常(直接将此catch中的异常吞掉!)。
24         }
25     }

Say() 的finally中return一个值,等同于告诉编译器该方法没有异常,但实际上异常是有的,这样的结果是该方法的调用者却捕获不到异常,相对于异常被无端的被吃掉了.

结论:不要再finally中试图return一个值,这样可能会导致一些意想不到的逻辑错误,finally就是用来释放资源的!