try-catch的简要介绍
开发环境出现Exception异常,代码不会往下继续执行,软件崩溃
解决办法:
- 避免异常的出现
比如加入判断
- 出现异常怎么办
异常处理try catch,把容易出错的代码放在try里面,catch用来捕捉异常
Java里面把所有的异常封装成exception类,所有异常类继承至exception
使用try-catch语句之后,try语句内部出现异常时,try内部之后的部分不会执行,但try之外的程序会继续执行;try语句内部正常运行时,catch语句不会执行
public static void main(String[] args) {
try{
ArrayList al=new ArrayList();
System.out.print(al.get(0));
}catch(IndexOutOfBoundsException e){
e.printStackTrace();
}
System.out.print("后面的程序");
}
其他语法的介绍
- 以下为例
问题:异常出现之后后面程序没有执行
public static void main(String[] args) {
try{
ArrayList al=new ArrayList();
al.add(100);//只能放int类型的数据
al.add(12);
al.add(122);
al.add(32);
for(int i=0;i<al.size();i++){
System.out.print((String)al.get(i));//这句有错误,不能强制转换成String类型,异常没有处理,因为后面程序没有进行
}//未处理原因:catch里面只捕捉了IndexOutOfBoundsException这个异常
}catch(IndexOutOfBoundsException e){
e.printStackTrace();
}
System.out.println("后面的程序");
}
解决办法:
加一个catch
catch(ClassCastException e){
System.out.print("出现强制类型转换的异常");
}
结果:
“后面的程序”继续执行
Q:如何使用一个catch语句捕捉所有异常?
A :直接catch Exception
public static void main(String[] args) {
try{
ArrayList al=new ArrayList();
al.add(100);//只能放int类型的数据
al.add(12);
al.add(122);
al.add(32);
for(int i=0;i<al.size();i++){
System.out.print((String)al.get(i));//有错误,不能强制转换成String类型,异常没有处理,因为后面程序没有进行
}//未处理原因:catch里面只捕捉了IndexOutOfBoundsException这个异常
}catch(Exception e){
e.printStackTrace();
}
System.out.println("后面的程序");
}
- finally语句
必须执行(不管try语句是否出现异常)
public static void main(String[] args) {
try{
ArrayList al=new ArrayList();
al.add(100);//只能放int类型的数据
al.add(12);
al.add(122);
al.add(32);
for(int i=0;i<al.size();i++){
System.out.print((String)al.get(i));
}
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.print("finally");
}
System.out.println("后面的程序");
}
输出:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at ch3.ExceptionDemo.main(ExceptionDemo.java:16)
finally后面的程序
学习来源:【bilibili siki学院】