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");
}
}