Java学习日记 | 异常处理 | try...catch... | throws

1. 异常处理

        1.1 概述

        异常是Java中提供的一种识别及响应错误情况的一致性机制。有效地异常处理能使程序更加健壮、易于调试。

        异常 其实就是错误的一种说法,在java中 有一个专门模拟所有异常和错误的类 Throwable,是所有异常类的父类

        try...catch..: 处理异常,一般用于客户端
        throws : 抛出异常,一般用于服务端
        throw : 异常源点
        finally: 必须执行的语句

        1.2 继承体系

        1.3 Error

        系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。 
        比如:OOM(内存溢出错误)、VirtualMachineError(虚拟机错误)、StackOverflowError(堆栈溢出错误)等,一般发生这种情况,JVM会选择终止程序。

        1.4 Exception

                1.4.1 概述

        Exception是所有异常类的父类。分为非RuntimeException和RuntimeException。
                非RuntimeException
                指程序编译时需要捕获或处理的异常,如IOException、自定义异常等。属于checked异常。
                RuntimeException
                指程序编译时不需要捕获或处理的异常,如: Nul1PointerException等。属于unchecked异常。一般是由程序员粗心导致的。如空指针异常、数组越界、类型转换异常等。

        1.4.2 常用方法

2. try...catch...

        2.1 常用方法

import java.io.FileInputStream;

/**
 * try{
 * 		高风险代码
 * 		只要出错,就会执行catch,try中剩余代码不再执行
 * 		如果没出错,try就会顺利执行,不会执行catch
 * }catch(异常类型 变量) {
 * 		处理方案;
 * }
 * @author 13495
 *
 */
public class Excepion_01 {
	public static void main(String[] args) {
		try {
			// 加载对应的文件
			FileInputStream fis = new FileInputStream("123.txt");
			// 找不到路径不会打印
			System.out.println("+++++++");
		} catch (Exception e) {
			// 打印错误栈帧和信息,一般用于给程序员排错
			e.printStackTrace();
			// 获取错误信息,一般用于反馈给客户端
			String msg = e.getMessage();
			System.out.println(msg);
		}
		System.out.println("不会终止生命周期");
	}
}

        2.2 同时捕获多个异常

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * try{
 * 		高风险代码
 * }catch(异常类型 变量){
 * 		处理措施;
 * }catch(异常类型 变量){
 * 		处理措施;
 * }catch(异常类型 变量){
 * 		处理措施;
 * }...
 * @author 13495
 *
 */
public class Excepion_02 {
	public static void main(String[] args) {
		// 当try下面 可能会出现多个异常的时候,并且每个异常对应的解决方案不同的时候
		// 需要写多个catch进行不同的处理
		// 如果解决方案一致,则只写一个 Exception 即可
		
		try {
			new FileInputStream("123");
			String str = null;
			System.out.println(str.equalsIgnoreCase(""));
		} catch (FileNotFoundException e) {
			System.out.println("文件找不到");
		}catch (NullPointerException e) {
			System.out.println("不能是空");
		}catch (Exception e) {
			System.out.println("其它异常");
		}
	}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * try {
 * 		
 * }catch(异常类型1 | 异常类型2 | 异常类型3....){
 * 		处理措施;
 * }
 * 
 * @author 13495
 *
 */
public class Excepion_03 {
	public static void main(String[] args) {
		try {
			new FileInputStream("123");
			String str = null;
			System.out.println(str.equalsIgnoreCase(""));
		} catch (FileNotFoundException | NullPointerException e) {
			System.out.println("文件找不到");
		}
	}
}

        2.3 finally

import java.io.FileInputStream;

/**
 * finally: 必须执行的语句块,不能单独使用,必须和try 或者try..catch..一起使用
 * 
 * finally 只有一种不执行的情况,那就是 System.exit(0);
 * 
 * @author 13495
 *
 */
public class Excepion_04 {
	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("111");
			System.out.println(fis);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			System.out.println("必须执行");
		}
	}
}

        2.4 1.7新特性 自动关闭流

import java.io.FileInputStream;

/**
 * 
 * try(开启资源语句;开启资源语句;...) {
 * 		高风险代码;
 * }catch(异常类型 变量) {
 * 		处理方案;
 * }
 * @author 13495
 *
 */
public class Excepion_05 {
	public static void main(String[] args) {
		try(FileInputStream fis = new FileInputStream("")) {
			//操作
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3. throws

        3.1 概述

        throws : 抛出异常,只是一种提醒机制,并不会解决问题,该报错还是报错,该终止生命周期还是会终止

        如果你的下家提醒了你,要么你提醒你的上家,要么你处理掉

        如果我们调用的方法中抛出了异常,那么要么我们也抛出,要么我们try掉

        如果 你知道这个问题怎么解决,就是要try 解决掉, 如果不知道, 就throws 抛出去

        一般在服务端,使用throws 在客户端 使用 try catch

        服务端 就是被调用的 客户端 就是调用处

        3.2 使用方法

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Throws_01 {
	public static void main(String[] args) {
		try {
			m1();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	public static void m1() throws FileNotFoundException{
		m2();
	}
	public static void m2() throws FileNotFoundException{
		m3();
	}
	public static void m3() throws FileNotFoundException{
	new FileInputStream("");
	}
}

        3.3 不能有更宽泛的异常

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * 方法覆写,不能比原方法有更宽泛的异常
 * 
 * 子类方法抛出的异常,不能大于父类异常,也就是 小于等于 父类异常均可
 * 
 * 要么和父类抛出的异常一致,要么是父类抛出异常类的子类,或者 直接不抛出异常
 * @author 13495
 *
 */
public class Throws_02 {
	public static void main(String[] args) {
		
	}
	class A {
		public void m1() throws FileNotFoundException {
			
		}
	}
	class B extends A{
		// 子类抛出的异常不能大于父类抛出的异常
		// public void m1() throws Exception {
		public void m1() throws FileNotFoundException {
			FileInputStream fis = new FileInputStream("");
		}
	}
}

4. 自定义异常

public class UserExcepion extends Exception{
	public UserExcepion(){
		
	}
	public UserExcepion(String msg){
		super(msg);
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值