(1)任何一种程序设计语言设计的程序在运行时都可能出现错误。
(2)捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。
(3)对于这些错误,一般有两种解决方法:
那么什么是编译,什么是运行呢?
编译 :又分为编译和链接两个过程。编译是将源文件转换为机器可识别的二进制文件。链接是将这些二进制文件组合成系统可以执行的可执行文件。
运行 :将编译出来的可执行程序放在系统中进行运行。
Java异常 :在java语言中,将程序执行中发生的不正常情况称为异常。
java中的异常用于处理非预期的情况,如文件没找到、网络错误、非法的参数等。
说明 :
try{
    //需要判断是否出现异常的语句
}catch(Exception e){
    //捕获异常  
}finally{
    //无论是否出现异常,都会运行这里的代码
}
 
 注意:如果有多个catch,在捕获到前面的异常后,后面的就不会再捕获了。
package myjava;
public class Test3 {
    public static void main(String[] args) {
        B b = new B();
        try {
            b.test();
        }catch(Exception e){
            e.printStackTrace();
        }                                
    }
}
class B{
    int i;
    public void test() throws Exception{
        B b = null;
        System.out.println(b.i);
    }
}
 
 输出:
  
 
注意:当父类方法抛出异常,子类方法继承父类对该方法进行重写时,也需要抛出异常,同时抛出的异常范围不能比父类的大。
package myjava;
public class Test3 {
    public static void main(String[] args) {
        B b = new B();
        try {
            b.test(200);
        }catch(Exception e){
            e.printStackTrace();
        }                                
    }
}
class B{
    int age;
    public void test(int age) throws Exception{
        if (age>=0 && age <= 100) {
            System.out.println("合法");
        }else {
            throw new Exception("年龄不合法");
        }
    }
    
}
 
 输出:
 
 
 创建用户自定义异常类:用户自定义的异常类必须继承现有的异常类
package myjava;
public class Test3 {
    public static void main(String[] args) {
        B b = new B();
        try {
            b.regist(-1);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
class B{
    
    public void regist(int num) throws Exception{
        if (num<0) {
            throw new MyException("人数不能为负值",3);
        }else {
            System.out.println("登记人数"+num);
        }
    } 
}
class MyException extends Exception{
    private int idnumber;
    public MyException(String message,int id) {
        super(message);
        this.idnumber = id;
    }
    public int getId() {
        return idnumber;
    }
}
 
 输出:
 
 
 然后就可以抛出异常:
package myjava;
public class Test3 {
    public static void main(String[] args) {
        B b = new B();
        try {
            b.message();
        }catch(Exception e){
            e.printStackTrace();
        }
    } 
}
class B{
    public void regist(int num) throws Exception{
        if (num<0) {
            throw new MyException("人数不能为负值",3);
        }else {
            System.out.println("登记人数"+num);
        }
    }
    public void message() throws Exception {
        try {
            regist(-1);
        }catch (MyException e){
            System.out.println("登记失败,出错种类"+e.getId());
        }
        System.out.println("本次登记结束");
    }
    
}
class MyException extends Exception{
    private int idnumber;
    public MyException(String message,int id) {
        super(message);
        this.idnumber = id;
    }
    public int getId() {
        return idnumber;
    }
}
 
 输出:
 