在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就是用来释放资源的!