出现异常:是指new了异常类的对象
方式一:try-catch-finally
方式二:throws+异常类型
try-catch-finally
根据实际问题可以写多个catch
try{ //可能出现异常的代码 }catch(异常类型1 变量名1){ //处理异常的方式1 }catch(异常类型2 变量名2){ //处理异常的方式2 }catch(异常类型3 变量名3){ //处理异常的方式3 }
我们会发现把异常处理掉以后,程序是可以正常往下走的。只有try里的代码是中断执行了。
String str="abc"; try{ int num=Intger.parseInt(str); System.out.println("hello1") }catch(NumberFormatException e){ System.out.println("出现数值转换异常了") } System.out.println("hello2")
上面代码运行结果:
假如,吃错药了。异常没有被处理掉如下: (catch(NullPointerException e))。
那么这三行输出一个都没。
String str="abc"; try{ int num=Intger.parseInt(str); System.out.println("hello1") }catch(NullPointerException e){ System.out.println("出现数值转换异常了") } System.out.println("hello2")
只走第一个catch,不走第三个。
一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出try-catch结构(没有finally的情况),继续执行后面的代码。
有多个catch的情况下,如果上下catch满足父子类的关系,则一定要把子类写在上面。否则编译报错。
String str="abc"; try{ int num=Intger.parseInt(str); System.out.println("hello1") }catch(NumberFormatException e){ System.out.println("出现数值转换异常了") }catch(NullPointerException e){ System.out.println("出现空指针异常了") }catch(Exception e){ System.out.println("出现异常了") } System.out.println("hello2")
通常爱用的俩种异常处理方式(写在catch【】里)
//String getMessage() 方式一: System.out.println(e.getMessage());//e就是异常类的对象 方式二: e.printStackTrace();//打印堆栈信息,包含了e.getMessage()
Finally 声明的是一定会被执行的代码
下面俩种方式,一种写finally,一种不写。在下面代码种,这俩种效果是一样的。
但是,finally中的代码,即使try中或catch中有return语句,即使catch中又出现异常了。依旧执行
try{ int a=0; int b=0; System.out.println(a/b) }catch(ArithmeticException e){ e.printStackTrace(); }catch(Excetion e){ e.printStackTrace(); } // System.out.println("我好帅啊~~~") //finally{ // System.out.println("我好帅啊~~~") //} -------------------------------------------------------------------------------- try{ int a=0; int b=0; System.out.println(a/b) }catch(ArithmeticException e){ int [] arr=new int[10]; System.out.println(arr[10]);//catch中有出现异常也会执行finally中的代码 }catch(Excetion e){ e.printStackTrace(); }finally{ System.out.println("我好帅啊~~~") }
那么看看你finally学明白没,return 多少?
try{ int [] arr=new int[10]; System.out.println(arr[10]);//出现数组越界异常 return 1; }catch(ArrayIndexOutOfBoundsException e){ e.printStackTrace(); return 2;//要返回的时候,finally说还有我呢等等。最后就去finally中return3了, //没有执行这行代码 }finally{ System.out.println("我好帅啊~~~") return 3; }
有些物理连接,需要我们自己手动去关。比如:数据库连接,输入流输出流,socket连接
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)