Android开发(Java部分)——异常处理

异常处理
Exception
当程序出现异常情况,有没有处理,那么程序直接终止运行 (崩溃)

使用try-catch捕获异常
try {
//具体的代码块 会捕获这个代码块的异常
//当代码块里面出现异常,后面的代码不会执行
//不要让try包裹太多内容
} catch (IndexOutOfBoundsException e) {
//使用catch来捕获具体的一个异常
}

抛出异常时,尽量不要有太多的嵌套(否则代码结构和阅读性差)
不得不嵌套时,不要大于两层

try{
具体代码块
}catch(){
捕获的某种异常
}finally{
释放资源
注意:Java只会释放在堆或栈上的资源,不会释放外部资源
1.需要释放文件、网络和数据库资源
2.有些代码不管有没有出现异常都需要被执行
}

注意当有多个catch时,有捕获的顺序,按照子类到父类的顺序catch
如果父类的异常在前面,就会拦截子类的catch

如果不关心具体是什么异常,只是想处理一下异常,可以使用异常的父类来捕获
catch(Exception e)

使用throw抛出异常
当某个方法完成某个功能,当执行时可能出现异常,这种异常需要调用者自己决定该如何处理,就使用throws抛出异常

自定义异常


MyClass.java
class Test{
    public void download() throws IOException{
        FileReader fr = null;

        fr = new FileReader(s: "文件路径");
        fr.read();
        ArrayList list = new ArrayList<>();
        //list.get(20);
        String str = null;
        str = (String) new Object();
    }

    //jack
    //12jack
    public void login(String name, String pwd) throws LoginException{
        if (name.startsWith("1")){
            //自己定义一个异常
            throw new LoginException("用户名不能以1开头");
        }
    }
}

class LoginException extends Exception{
    public LoginException() {
    }

    public LoginException(String s) {
        super(s);
    }
}
public class MyClass {
    public static void main(String[] agrs){     
        Test t = new Test();
        try {
            t.download();
        } catch {
            e.printStackTrace();
        }
    }

    public void test(){
        //FileNotFoundException
//      FileReader fr = new FlieReader(s: "");

        //IndexOutOfBoundsException
//      ArrayList list = new ArrayList<>();
//      list.get(2);

        //NullPointerException
//      String name = null;
//      name.length();
        //NullPointerException的捕获
//      String name = null;
//      try {
//          name.length();
//      } catch (NullPointerException e) {
//          System.out.println(e.getMessage());
//          e.printStackTrace();
//      }

        //ClassCastExcetion
//      String name = null;
//      Object obj = new Object();
//      name = (String) obj;
    }
}

你可能感兴趣的:(Android开发(Java部分)——异常处理)