异常
Exception
异常是一个对象
异常就是错误,是在程序编译阶段或者执行过程中的错误。
学习异常主要是调试程序的错误信息,根据错误信息来发现程序的bug
异常分类:运行时异常和编译异常
异常的级别Error和Exception
Error:表示不可抗因素造成的
Exception:表示程序运行错误,是可以调试的
捕获异常的语法
try{
假设代码运行正常
}catch(异常类型){
}finally{
//不管程序是否出错,都执行
}
异常的类型必须要明确的,这样才能准确的找出错误。
throws和throw的区别 声明异常和 抛出异常
声明异常(throws)>=抛出异常(throw)
自定义异常信息:标准的异常中无法描述错误信息,我们需要自己定义一个异常信息。
Catch的捕获需要从小到大
什么时候捕获异常,什么时候抛出异常?
如果我们调用的是标准的API文档的方法,如果该类抛出异常,我们必须要捕获。
在实际开发中,我们所编写的程序的功能执行成功与否,与外界有紧密关系(比如,参数传递,调用关系)必须要抛出异常
某些方法在调用的时候会抛出异常,抛出异常就必须要处理
例如在某些方法在API中描述的时候就把调用时可能会抛出的异常写在之中。
例如,方法中的参数错误传递
以下是Java JDK8对FileInputStreame异常的描述
**Class FileInputStream**
public FileInputStream( )
throws FileNotFoundException
**Throws:**
[FileNotFoundException] - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
[SecurityException] - if a security manager exists and its checkRead method denies read access to the file.
所以当我们创建一个FileInputStream类的对象时就会抛出一个异常
此时应该使用异常捕捉来捕捉异常
public class FileUtil {
public void read(){
}
public static void main(String[] args) {
try {
FileInputStream in = new FileInputStream("");
}catch (Exception e){
}
}
}
关于一个方法中异常的声明
void func throws Exception/*声明的异常可以范围更小*/(){
}
代码部分
public class Person {
public void buyFood(int money)/*声明异常*/throws Exception{
if (money<=0){
//抛出异常
throw new Exception("没有给我钱");
}else{
System.out.println("我给你买!!");
}
}
public void buyShoes(int money)throws MyException{
if(money<500){
throw new MyException("钱不够");//丢出一个MyException类的异常,MyException异常时我们自己定义的异常
}else{
System.out.println("buy!!!!!!!NIKE");
}
}
public static void main(String[] args) {
try {
Person p = new Person();
p.buyFood(0);
p.buyShoes(100);
//范围catch需要从小到大捕获
}catch(MyException e){//异常的捕捉
System.out.println(e.getMessage());
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
我们自己声明了一个异常类,此异常继承了Exception类
//MyException.java
public class MyException extends Exception{
public MyException(String msg){
super(msg);
}
}
**切记异常的捕捉必须大于等于异常声明,否则将检查不到异常的存在