Exception的try{}catch{}处理(return)

  public static void main(String[] args) {
 String remark = String.format("备忘内容:本订单预计下单金额%s元,参加促销活动优惠%s元,产品优惠(公司让利)%s元", 12.0,1.0,5.0);
 System.out.println(remark);
 try{
 System.out.println("aaaaaaaaaaaaaaa");
 String str = DpnProxyTest1.makeexception(); //分别调用makeexception1,makeexception2
 System.out.println(str);
 System.out.println("bbbbbbbbbbb");
 }catch(Exception e){
 System.out.println("exception catch 1");
 
 }finally{
 System.out.println("fianlly----------------------------");
 }
 System.out.println("ending--------------");

  }


  public static String makeexception() throws Exception{
 try{
 System.out.println("eeeeeeeee");
 String str = null;
 int i = 1/0; 
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 
 }catch(Exception e){
 System.out.println("kkkkkkkkkkkkkkk");
 throw e;
 }
 System.out.println("zzzzzzzzzzzz");
 return "hhhhhhhhhhhhhh";


  }


调用结果:

DpnProxyTest1.makeexception();

备忘内容:本订单预计下单金额12.0元,参加促销活动优惠1.0元,产品优惠(公司让利)5.0元
aaaaaaaaaaaaaaa
eeeeeeeee
kkkkkkkkkkkkkkk
exception catch 1
fianlly----------------------------
ending--------------


  
  public static String makeexception1() throws Exception{
 try{
 System.out.println("eeeeeeeee");
 String str = null;
 int i = 1/0; 
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 return "hhhhhhhhhhhhhh";
 }catch(Exception e){
 System.out.println("kkkkkkkkkkkkkkk");
 throw e;  
 }finally{
 return "iiiiiiiiii";
 }
  }


调用结果:

DpnProxyTest1.makeexception1();

备忘内容:本订单预计下单金额12.0元,参加促销活动优惠1.0元,产品优惠(公司让利)5.0元
aaaaaaaaaaaaaaa
eeeeeeeee
kkkkkkkkkkkkkkk
iiiiiiiiii
bbbbbbbbbbb
fianlly----------------------------
ending--------------





  public static String makeexception2() throws Exception{


 System.out.println("eeeeeeeee");
 String str = null;
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 return "hhhhhhhhhhhhhh";
 
  }


调用结果:

DpnProxyTest1.makeexception2();

备忘内容:本订单预计下单金额12.0元,参加促销活动优惠1.0元,产品优惠(公司让利)5.0元
aaaaaaaaaaaaaaa
eeeeeeeee
exception catch 1
fianlly----------------------------
ending--------------




  public static String makeexception3(){
 try{
 System.out.println("eeeeeeeee");
 String str = null;
 int i = 1/0; 
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 }catch(Exception e){
 System.out.println("kkkkkkkkkkkkkkk");  
 }
 
 System.out.println("zzzzzzzzzzzz");
 return "hhhhhhhhhhhhhh";
  }


调用结果:

DpnProxyTest1.makeexception3();

备忘内容:本订单预计下单金额12.0元,参加促销活动优惠1.0元,产品优惠(公司让利)5.0元
aaaaaaaaaaaaaaa
eeeeeeeee
kkkkkkkkkkkkkkk
zzzzzzzzzzzz
hhhhhhhhhhhhhh
bbbbbbbbbbb
fianlly----------------------------
ending--------------


  public static String makeexception4() throws Exception{
 try{
 System.out.println("eeeeeeeee");
 String str = null;
 int i = 1/0; 
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 return "hhhhhhhhhh";
 }catch(Exception e){
 System.out.println("kkkkkkkkkkkkkkk");
 throw e;
// System.out.println("zzzzzzzzzzzz");
 }finally{
 System.out.println("yyyyyyyyyyy");
 }


  }


调用结果:

DpnProxyTest1.makeexception4();

备忘内容:本订单预计下单金额12.0元,参加促销活动优惠1.0元,产品优惠(公司让利)5.0元
aaaaaaaaaaaaaaa
eeeeeeeee
kkkkkkkkkkkkkkk
yyyyyyyyyyy
exception catch 1
fianlly----------------------------
ending--------------



  public static void makeexception6(){
 try{
 System.out.println("eeeeeeeee");
 String str = null;
 int i = 1/0; 
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 }catch(Exception e){
 System.out.println("kkkkkkkkkkkkkkk");
  throw e;  //这种写法是错误的,必须方法上加throws Exception
  throw new RuntimeException(e); //这种写法OK,不需要加throws Exception
// System.out.println("zzzzzzzzzzzz"); //throw之后不能再写语句
 }finally{
 System.out.println("yyyyyyyyyyy");
 }


  }




结论:

1.由DpnProxyTest1.makeexception3();可知try{ A; exception;B}catch{} C; 若发生异常则try块里异常之后的语句不再执行,try{}catch{}块外面的语句可继续执行;

2.由DpnProxyTest1.makeexception(); 可知try{ A; exception;B}catch{ throw exception} C;若catch块抛出异常,则try块中异常之后的语句及try{}catch{}块外面的语句都不再执行,注意catch{}块里抛出异常语句后不能再写其他语句,否则编译出错

3.由DpnProxyTest1.makeexception1() ;可知finally块中有return语句会导致抛出的异常被吞掉,不建议finally里写return语句

4.被调用的方法已自行catch到异常且进行了处理(非抛出异常处理),在调用方法里不会觉得有异常


另外注意:

这种写法会被报编译错误,未return,但是catch中的throw new RuntimeException(e);一旦加上就会编译通过

  public static String makeexception7(){
 try{
 System.out.println("eeeeeeeee");
 String str = null;
 int i = 1/0; 
 if(str.equals("1")){
 System.out.println("fffffffffffff");
 }
 System.out.println("ggggggggggg");
 return "hhhhhhhhhhh";
 }catch(Exception e){
 System.out.println("kkkkkkkkkkkkkkk");
 //throw e;
 //throw new RuntimeException(e);
// System.out.println("zzzzzzzzzzzz");
 }  
  }
 


猜你喜欢

转载自blog.csdn.net/lujun12/article/details/52003362
今日推荐