欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 异常、try catch、Thorwable、printStackTrace、throws和throw的区别、自定义异常

程序员文章站 2022-05-05 14:48:42
...

异常:程序出现不正常情况

Thorwable -->

  • 1.Error
  • 2.Exception -->
    • 2.1 RuntimeException
    • 2.2 非RuntimeException

Error:严重问题,不需要处理
Exception:称为异常类,表示程序本身可以处理的问题

  • RuntimeException:编译期不检查,出现问题后,需要我们回来修改代码
  • 非RuntimeException:编译期就必须处理的,否则程序不能通过编译,更不能正常运行。

JVM的默认处理方案

程序出现问题,JVM会默认处理

  • 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
  • 程序停止执行

异常处理

  • try … catch …
try{
   	可能出现异常的代码;
   } catch(异常类名 变量名){
   	异常的处理代码;
   }

出现异常会生成异常类对象,异常对象被提交给Java运行时系统;
当Java运行时系统接收到异常对象时,会到catch中寻找匹配的异常类;
然后进行异常的处理,处理完后进行程序往下执行;

public class Error {
   public static void main(String[] args) {
   	System.out.println("开始");
   	method();
   	System.out.println("结束");
   }

   public static void method() {
   	try {
   		int[] arr = { 1, 2, 3 };
   		System.out.println(arr[3]); //ArrayIndexOutOfBoundsException
   	} catch (ArrayIndexOutOfBoundsException e) {
   		System.out.println("访问的数组索引不存在");
   		//e.printStackTrace();
   	}
   }
}
  • throws
throw 异常类名;
 public class Error {
	public static void main(String[] args) {
		System.out.println("开始");
		method();
		System.out.println("结束");
	}

	public static void method() throws ArrayIndexOutOfBoundsException{
			int[] arr = { 1, 2, 3 };
			System.out.println(arr[3]);
		}
	}
}

Throwable成员方法

public String getMessage()	返回throwable的详细消息字符串
public String toString()	返回此可抛出的简短描述
public void printStackTrace()	把异常的错误信息输出在控制台,显示最全
	public static void method() {
		try {
			
			int[] arr = { 1, 2, 3 };
			System.out.println(arr[3]);//new ArrayIndexOutOfBoundsException();
		} catch (ArrayIndexOutOfBoundsException e) {
			
			System.out.println(e.getMessage());//3
			System.out.println(e.toString()); //java.lang.ArrayIndexOutOfBoundsException: 3
			e.printStackTrace();
		}
	}

throws和throw的区别

  • throws
    用在方法声明后面。跟的是异常类名;
    表示抛出异常,由该方法的调用者来处理;
    表示出现异常的一种可能性,并不一定会发生这些异常;
  • throw
    用在方法体内,跟的是异常对象名
    表示抛出异常,由方法体内的语句处理
    执行throw一定抛出了某种异常

自定义异常

public class ScoreCheck extends Exception{
	public ScoreCheck() {}
	
	public ScoreCheck(String message) {
		super(message);
	}
}
public class Teacher {
	public void check(int score) throws ScoreCheck {
		if(score<0 || score>100) {
			throw new ScoreCheck("分数不正确");
		}else {
			System.out.println("分数正常");
		}
	}
}
public class Test {
	public static void main(String[] args){
		Teacher t = new Teacher();
		System.out.println("输入分数:");
		Scanner sc = new Scanner(System.in);

		int num = sc.nextInt();
		
		try {
			t.check(num);
		}catch(ScoreCheck e){
			e.printStackTrace();
		}
	}
}
相关标签: java java