try{
return 4/0;
}catch(Exception e){
return 1;
}finally{
return 2;
}
返回为:2
异常方式比较
- 运行时异常,有的异常无法再编译的时候被监测到,如除法
public class chufa {
public static void main(String[] args){
chufa c = new chufa();
c.method1();
}
public void method1(){
int a = 4;
int b=0;
int c = a/b;
}
}
这时我们如果调用,就会报错:
Exception in thread “main” java.lang.ArithmeticException: / by zero
at MyExcep.chufa.method1(chufa.java:17)
at MyExcep.chufa.main(chufa.java:9)
- throws异常
throws异常,在我理解就是把异常交给调用该方法的方法处理,如果是main函数直接throws异常,那就是报错咯
这张情况,一般可以直接抛出异常,或者说我不想抛出异常,只想记录到log
直接抛出:
public class chufa {
public static void main(String[] args){
chufa c = new chufa();
try{
c.method1();
}catch (Exception e){
e.printStackTrace();
}
}
public void method1() throws Exception{
int a = 4;
int b=0;
int c = a/b;
}
}
记录到log:
public class chufa {
public static void main(String[] args){
chufa c = new chufa();
try{
c.method1();
}catch (Exception e){
System.out.print("我将记录到log");
}
}
public void method1() throws Exception{
int a = 4;
int b=0;
int c = a/b;
}
}
- throw异常
这边我们可建自定义异常~
自定义异常:
异常类:
public class MyExcep1 extends Exception{
public MyExcep1(String msg){
super(msg);
}
}
测试类:
public class testMyExcep1 {
public static void main(String[] args) throws MyExcep1 {
if(true){
throw new MyExcep1("我要报错了");
}
}
}
打印:
Exception in thread “main” MyExcep.MyExcep1: 我要报错了
at MyExcep.testMyExcep1.main(testMyExcep1.java:10)