出现异常:是指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连接



