Java开发过程中 异常及日常如何规避

# 1、前言
异常是程序在编译或执行的过程中可能出现的问题,语法错误不算在异常体系
提前处理异常,可以让程序会更加安全、稳定。
# 2、异常三大体系
 - Error:
        系统级别问题、JVM退出等,代码无法控制
 - Exception:

        Java.lang包下,称为异常类,它表示程序本身可以处理的问题
        Runtime Exception及其子类:
          运行时异常,编译阶段不会报错(如空指针,数组索引越界异常)

 - 除Runtime Exception之外所有异常:
        编译时异常,编译期必须处理的,否则程序不能通过编译(如日期格式化)


# 3、java异常有哪些?
** 1、java中异常分类**

Throwable类有两个直接子类:
 - Exception:出现的问题是可以被捕获的
 - Error:系统错误,通常由JVM处理

**2、被捕获的异常分类**

- Check异常: 派生自Exception的异常类,必须被捕获或再次声明抛出

- Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象 throw new ArithmeticException(…);

**3、发生异常的原因**

 - 用户输入了非法数据。
 - 要打开的文件不存在。
 - 网络通信是连接中断。
 - JVM内存溢出。

  我们知道了java异常之后,我们在程序中要做的就是合理的设计解决异常,让程序不崩溃,让程序恢复到原本的状态!

# 4、 异常处理
  **1. 通过try...catch语句块来处理:**

```js
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
```  
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
**2. 在具体位置不处理,直接抛出**
通过throws/throw到上层再进行处理,具体的,如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

下面方法的声明抛出一个 Exception 异常:
import java.io.*;
public class className
{
    public void fileDeal(string fileRow) throws Exception
    {
        // Method implementation
        throw new Exception();
    }
    //Remainder of class definition
}
**3. finally关键字**

finally 关键字用来创建在 try 代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后,语法如下:
```js
try
{
    // 程序代码
}
catch (异常类型1 异常的变量名1)
{
    // 程序代码
}
catch (异常类型2 异常的变量名2)
{
    // 程序代码
}
finally
{
    // 程序代码
}
```  

**4、自定义异常**
JAVA无法为所有的问题提供异常类,如果我们想通过异常的方式来管控某个业务问题,就需要自定义异常类了。
 自定义的异常应该总是包含如下的构造函数:
    - 一个无参构造函数
    - 一个带有String参数的构造函数,并传递给父类的构造函数。
    - 一个带有String参数和Throwable参数,并都传递给父类构造函数。
    - 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
注意:如果自定义异常是为了提示,在使用的时候,一定要用try..catch,不要直接用throw往外抛。

自定义编译时异常 定义一个异常类继承Exception
重写构造器
public class Ageilleagaleception  extends Exception{
    public Ageilleagaleception (){
 
    }
    public Ageilleagaleception(String message){
        super(message);
    }
}
在出现异常的地方用throw new自定义对象抛出

 public static void checkFee(int fee) throws Feeilleagaleception {
        if(fee< 0 || fee> 1000000){
            throw new Feeilleagaleception (fee+"is illegal");
        }else {
            System.out.println("费用合理");
        }
    }
 自定义运行时异常

定义一个类继承RuntimeException
重写构造器
 在出现异常的地方用throw new自定义对象抛出。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值