有关try catch

try{……}里面是一些你觉得可能会出问题的代码,catch里就是你觉得会有什么问题,如果出的问题正好是你catch里说到的问题,那么他就会按照你设定的,比如会打印出来,比如会退出方法等等……然后接着往下执行后面该执行的代码。
但是如果你不用try{}的话,没问题,很好,一有问题,代码就会在那里停住,然后给用户一个很不友好的默认的错误提示,一般这个提示只有开发人员等内行人可以看懂。
也就是说加不加try,区别在于不加程序不知道怎么执行,会停住,而加了,就会按您给定的处理异常程序的步骤,处理完了,接着走往下的代码,不会down机。
另外,有try可以没有catch,try还可以和finally{}搭配,但是有try必须有catch或者finally中的一个。
还有,如果不想在这个方法里处理,而在调用的方法里一起处理的话,可以直接在方法的签名也就是方法名后的小括号后面,加throws Exception,把异常抛给别人,像推太极一样,推给别人,谁调用我,谁就要负责处理。

刚刚看到以前有人提的问题,我在这总结一下:

下面的代码:
public class FinallyTest {

private static int test() {
int i=1;

try {
i=2;
return i;
} catch (Exception e) {
i = 3;
return i;
} finally {
i = 4;
}
}

public static void main(String[] args){
FinallyTest finallyTest = new FinallyTest ();
System.out.println("i=" + finallyTest.test());
}
}

打印结果是i=2,而不是等于4,明明在finally里赋值为4了

原因是:

i是值变量,你在try里面写了return i; 这时虚拟机栈已经把 i 这时的值copy到栈顶,然后才再去处理finnaly,之后你对 i 进行任何改变不会影响这时候栈顶的这个返回值,只会影响 i 的值。所以尽管此时i的值变了,但那是 i 的事情,不是Return的事情。
这样问题就解决了。


你经常用到if else吧,其实道理都是一样的。
可是用if else进行判断,你必须知道这个事件肯定会发生那种错误,可以使用这个进行判断。最典型的就是用户登录,他的密码和用户名是唯一的,所以完全可以用if else判断
但是在程序中,很多东西不能完全知道会出现几种情况,可能还有很多情况是未知的的。比如判断用户键盘输入,今天我们或许会想到只能输入数字和字母,所以只对数字和字母进行判断,可是明天用户可能还会输入很多奇怪的符号甚至图片等等,结果难以预料。所以就不能呢个用if else判断。
这个时候,就引进了异常机制,出现了try catch块,所有可能引发程序的错误,都交给catch执行。而在try{}块中只写符合条件的,不符合条件的,不用我们显式判断,全部会在catch中进行判断。catch会让程序终止或者给用户一个提示等等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值