侧边栏壁纸
博主头像
这就是之谦博主等级

我们的征途是星辰大海

  • 累计撰写 182 篇文章
  • 累计创建 3 个标签
  • 累计收到 16 条评论
标签搜索

目 录CONTENT

文章目录

异常

这就是之谦
2021-07-23 / 0 评论 / 0 点赞 / 453 阅读 / 3,810 字
温馨提示:
本文最后更新于 2021-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

异常

Exception RuntimeException

常见异常

package com.lxw.java01;

import java.io.File;

import java.io.FileInputStream;
import java.util.Date;
import java.util.Scanner;

import org.junit.Test;

/*
 * 一、异常体系结构
 * 
 * java.lang.Throwable
 * 		|-----java.lang.Error:一般不编写针对性的代码进行处理。
 * 		|-----java.lang.Exception:可以进行异常的处理
 * 			|------编译时异常(checked)
 * 					|-----IOException
 * 						|-----FileNotFoundException
 * 					|-----ClassNotFoundException
 * 			|------运行时异常(unchecked,RuntimeException)
 * 					|-----NullPointerException
 * 					|-----ArrayIndexOutOfBoundsException
 * 					|-----ClassCastException
 * 					|-----NumberFormatException
 * 					|-----InputMismatchException
 * 					|-----ArithmeticException
 * 
 * 
 * 
 * 面试题:常见的异常都有哪些?举例说明
 */
public class ExceptionTest {
	
	//******************以下是编译时异常***************************
	@Test
	public void test7(){
//		File file = new File("hello.txt");
//		FileInputStream fis = new FileInputStream(file);
//		
//		int data = fis.read();
//		while(data != -1){
//			System.out.print((char)data);
//			data = fis.read();
//		}
//		
//		fis.close();
		
	}
	
	//******************以下是运行时异常***************************
	//ArithmeticException分母为0
	@Test
	public void test6(){
		int a = 10;
		int b = 0;
		System.out.println(a / b);
	}
	
	//InputMismatchException输入
	@Test
	public void test5(){
		Scanner scanner = new Scanner(System.in);
		int score = scanner.nextInt();
		System.out.println(score);
		
		scanner.close();
	}
	
	//NumberFormatException转数字
	@Test
	public void test4(){
		
		String str = "123";
		str = "abc";
		int num = Integer.parseInt(str);
		
		
		
	}
	
	//ClassCastException强转
	@Test
	public void test3(){
		Object obj = new Date();
		String str = (String)obj;
	}
	
	//IndexOutOfBoundsException下标越界
	@Test
	public void test2(){
		//ArrayIndexOutOfBoundsException
//		int[] arr = new int[10];
//		System.out.println(arr[10]);
		//StringIndexOutOfBoundsException
		String str = "abc";
		System.out.println(str.charAt(3));
	}
	
	//NullPointerException空指针
	@Test
	public void test1(){
		
//		int[] arr = null;
//		System.out.println(arr[3]);
		
		String str = "abc";
		str = null;
		System.out.println(str.charAt(0));
		
	}
	
	
}

异常处理

try-catch-finally

throws + 异常类型

抓抛模型

过程一:“抛”:程序正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。一旦抛出对象后,其后的代码就不再执行。
关于异常对象的产生:1.系统生成。2.手动生成一个异常对象,并抛出(throw)。

过程二:“抓”:try-catch-finally / throws + 异常类型

  1. try-catch-finally

                try{
    
                }catch (Exception e) {
    
                }finally {
    
                }
    

    常用的异常处理方式:e.printStackTrace();和e.getMessage();
    finally:像数据库连接,输入输出流,网络编程Socket等资源,JVM是不能自动回收的,我们需要手动进行资源释放,声明在finally中。

    trycatchfinally可以嵌套

  2. throws + 异常类型

    (往上抛,其实没有解决)

    子类重写父类的方法,抛出的异常范围要比父类要小

    如果父类没有throws抛出异常,则子类重写也不能使用throws,所以只能使用trycatchfinally

手动抛出异常

package com.lxw.java02;

import com.lxw.java01.EcDef;

public class EcmDef {
	public static void main(String[] args) {
		try {
			int int1 = Integer.parseInt(args[0]);
			int int2 = Integer.parseInt(args[1]);
			int result = ecm(int1, int2);
			System.out.println(result);
		} catch (NumberFormatException e) {
			System.out.println("数据类型不一致");
		}catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("缺少命令行参数");
		}catch (ArithmeticException e) {
			System.out.println("除0");
		}catch (EcDef e) {
			System.out.println(e.getMessage());
		}
		
		
	}
	public static int ecm(int i,int j) throws EcDef{
		if (i<0 ||j<0) {
			throw new EcDef("分子分母为负数");
		}
		return i/j;
	}

}


package com.lxw.java01;

public class EcDef extends Exception{
	
	static final long serialVersionUID = -7034897193246789L;
	
	public EcDef(){
		
	}
	public EcDef(String msg){
		super(msg);//传参,e.getMessage()获得
	}
	
	
}

0

评论区