JAVA_SE基础——54.异常

异常的体系:

----------| Throwable  所以异常或者错误类的超类

--------------|Error  错误   错误一般是用于jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的。

--------------|Exception 异常   是需要通过代码去处理的。

如何区分错误与异常呢:

如果程序出现了不正常的信息,如果不正常的信息的类名是以Error结尾的,那么肯定是一个错误。

如果是以Exception结尾的,那么肯定就是一个异常。

异常的处理:

方式一:捕获处理(往下面还有方式二

捕获处理的格式:

try{

可能发生异常的代码;

}catch(捕获的异常类型 变量名){

处理异常的代码....

}

捕获处理要注意的细节:

1.code1中体现→如果try块中代码出了异常经过了处理之后,那么try-catch块外面的代码可以正常执行。

2.code2中体现→如果try块中出了异常的代码,那么在try块中出现异常代码后面的代码是不会执行了。

3.code3中体现→一个try块后面是可以跟有多个catch块的,也就是一个try块可以捕获多种异常的类型。

4.code4中体现→一个try块可以捕获多种异常的类型,但是捕获的异常类型必须从小到大进行捕获,否则编译报错。

code1

package day10;

public class TestException2 {

	public static void main(String[] args){
		test(1,0);
	}
	public static void test(int a , int b){
		try{
			int c = a/b;
		}catch (ArithmeticException e){
			System.out.println("异常处理了  并返回当前异常对象的完整类名+病态信息 :"+e.toString());
		}
		System.out.println("try-catch块外面的代码可以正常执行中");
	}
}

运行结果:

异常处理了 回当前异常对象的完整类名+病态信息 :java.lang.ArithmeticException: / by zero

try-catch块外面的代码可以正常执行中

code2

package day10;

public class TestException2 {

	public static void main(String[] args){
		test(1,0);
	}
	public static void test(int a , int b){
		try{
			int c = a/b;
			System.out.println("看看是否被执行到~");
		}catch (ArithmeticException e){
			System.out.println("异常处理了  并返回当前异常对象的完整类名+病态信息 :"+e.toString());
		}
	}
}

运行结果:

异常处理了  并返回回当前异常对象的完整类名+病态信息 :java.lang.ArithmeticException: / by zero

”看看是否被执行到~“  这句没有被执行到,因为int c = a/b;这句出现异常了,所以try块内的其余代码都不会执行,直接会被catch 处理掉。

code3

public class TestException2 {

	public static void main(String[] args){
		int[] arr = null;
		test(10,2,arr);

	}
	public static void test(int a , int b, int[] arr)  {
		int c = 0 ;
		try{

			c = a/b;
			System.out.println(arr.length);
		}catch (ArithmeticException e){
			System.out.println("异常处理了  并返回回当前异常对象的完整类名+病态信息 :"+e.toString());
		}catch (NullPointerException e){
			System.out.println("出现了空指针异常....");
		}catch (Exception e){
			System.out.println("cc");
		}
		System.out.println("c="+c);
	}
}

运行结果:

出现了空指针异常....

c=5

code3这段代码要注意,try块能检测多种异常,但是只能处理一种异常,就是第一个异常。

code4

public class TestException2 {

	public static void main(String[] args){
		int[] arr = null;
		test(10,2,arr);

	}
	public static void test(int a , int b, int[] arr)  {
		int c = 0 ;
		try{

			c = a/b;
			System.out.println(arr.length);
		}catch (Exception e){
			System.out.println("Exception类来捕获的话,其他类就捕获不了,相当于父类把工作都做完了,还有子类的事吗?");
		}catch (NullPointerException e){
			System.out.println("出现了空指针异常....");
		}catch (ArithmeticException e){
			System.out.println("cc");
		}
		System.out.println("c="+c);
	}
}

运行结果:

Exception  把   NullPointerException  和  ArithmeticException    的异常都捕获处理了,所以会提示错误,必须从小到大进行捕获,否则编译报错

方式二:异常的处理方式----抛出处理

抛出处理要注意的细节:

1.code5中体现→ 如果一个方法的内部抛出了一个异常 对象,那么必须要在方法上声明抛出。

2.code6中体现→如果调用了一个声明抛出异常 的方法,那么调用者必须要处理异常。

3.code7中体现→如果一个方法内部抛出了一个异常对象,那么throw语句后面的代码都不会再执行了(一个方法遇到了throw关键字,该方法也会马上停止执行的)。

4.code8中体现→在一种情况下,只能抛出一种类型异常对象。(意思就是if())

throw 与throws两个关键字:

1. throw关键字是用于方法内部的,throws是用于方法声声明上的。

2. throw关键字是用于方法内部抛出一个异常对象的,throws关键字是用于在方法声明上声明抛出异常类型的。

3. throw关键字后面只能有一个异常对象,throws后面一次可以声明抛出多种类型的 异常

code5

public class TestException2 {

	public static void main(String[] args){
		try{
			int[] arr = null;
			test(10,2,arr);
		}catch(NullPointerException e){
			System.out.println("报告!  有异常出现");
			e.printStackTrace();
		}

	}
	public static void test(int a , int b, int[] arr) throws ArithmeticException,NullPointerException{
		int c = 0 ;
		if(b==0){
			throw new ArithmeticException(); //抛出一个异常对象...
		}else if(arr==null){
			throw new NullPointerException();
		}

		c = a/b;
		System.out.println(arr.length);

		System.out.println("c="+c);
	}
}

运行结果:

报告!  有异常出现

java.lang.NullPointerException

at day10.TestException2.test(TestException2.java:22)

at day10.TestException2.main(TestException2.java:10)

code6

public class TestException2 {

	public static void main(String[] args)
	{
		//try{
			int[] arr = null;
			test(4,0,arr); //调用了一个 声明抛出异常类型 的方法
		//}catch(Exception e){
			System.out.println("报告! 异常出现了");
		//	e.printStackTrace();
		//}

	}
	public static void test(int a , int b, int[] arr) throws Exception,NullPointerException{
		int c = 0 ;
		if(b==0){
			throw new Exception(); //抛出一个异常对象...
		}else if(arr==null){
			throw new NullPointerException();
		}

		c = a/b;
		System.out.println(arr.length);

		System.out.println("c="+c);
	}
}	

运行结果:

P.S.

这code6中的代码 ,一定要注意 在test方法抛出的如果是RuntimeException类的话 ,就是不捕获也不会提示报错的,因为异常分为检查性异常和运行时异常 检查性异常需要捕捉,运行时异常不会强制要求捕捉,也就是说非RuntimeException  包括Eception  都是需要捕获

code7

public class TestException2 {

	public static void main(String[] args)
	{
		try{
			int[] arr = null;
			test(4,0,arr); //调用了一个 声明抛出异常类型 的方法
		}catch(Exception e){
			System.out.println("报告! 异常出现了");
			e.printStackTrace();
		}

	}
	public static void test(int a , int b, int[] arr) throws Exception,NullPointerException{
		int c = 0 ;
		if(b==0){
			throw new Exception(); //抛出一个异常对象...
		}else if(arr==null){
			throw new NullPointerException();
		}

		c = a/b;

		System.out.println(arr.length);

		System.out.println("c="+c);
	}
}

运行结果:

报告! 异常出现了

java.lang.Exception

at day10.TestException2.test(TestException2.java:21)

at day10.TestException2.main(TestException2.java:11)

可见C的值没有打印出来,所以一抛出异常 后面的代码都不执行了。

code8

class Demo11
{
	public static void main(String[] args)
	{
		try{
			int[] arr = null;
			div(10,0,arr); //调用了一个 声明抛出异常类型 的方法
		}catch(Exception e){
			System.out.println("报告! 出现异常了");
			e.printStackTrace();
		}

	}

	public static void div(int a, int b,int[] arr) throws Exception,NullPointerException {
		if(b==0 || arr==null){
			throw new Exception(); //抛出一个异常对象...
			throw new NullPointerException();
		}
		int c = a/b;
		System.out.println("c="+c);
	}
}

运行结果:

因为抛出了异常 就不会处理下面的语句了,方法都结束了 ,所以只能将2个异常分开成两种情况 才能避免编译时错误。

if(b==0){
	throw new Exception(); //抛出一个异常对象...
}else if(arr==null){
	throw new NullPointerException();
}

交流企鹅:654249738,和自学者交流群:517284938

时间: 2024-10-26 15:58:14

JAVA_SE基础——54.异常的相关文章

JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别

黑马程序员入学blog ... 如果这章节很难懂的话应该返回去先看  JAVA_SE基础--10.变量的作用域 定义的位置上区别: 1. 成员变量是定义在方法之外,类之内的. 2. 局部变量是定义在方法之内. 作用上的区别: 1. 成员变量的作用是用于描述一类事物的公共 属性的. 2. 局部变量的作用就是提供一个变量给方法内部使用而已. 生命周期区别: 1. 随着对象 的创建而存在,随着对象的消失而消失. 2. 局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作

【Java基础】异常的简单分类与处理

Java中所有的异常都继承自Throwable类,Throwable类的已知子类有Error和Exception. Error是指系统出现的错误,这种错误出现的时候,我们的程序无能为力,所以不需要进行处理. Exception则是在程序中出现的异常,我们通常对这些异常进行处理. Exception有很多的子类,有一类比较特殊,那就是RuntimeException.RuntimeException属于非受检异常,也就是编译器不会对这种异常进行检查,这类异常被允许不用捕捉,也就是不用catch.我

java_基础_异常

之前只是了解的最基础的异常形式,没有过多的深入 今天因为一些原因了解了一下 下面来说说异常的几种形式 1.try-catch语句块 代码示例 class test{ public static void main(String[] args) { try { int a = 1/0; System.out.println(a); }catch(ArithmeticException e) { e.printStackTrace(); System.out.println(e); }finally

JAVA_SE基础——53.什么是异常?

尽管人人都希望自己的身体健康,处理事情都能顺利进行, 但是在实际生活中总会遇到各种状况,比如,感冒发烧,电脑突然蓝屏死机等..程序也一样,程序在运行过程中,也会发生各种非正常状况,比如程序运行时磁盘不足,网络连接中断,被装载的类不存在. 针对这种情况,在Java语言中,引入了异常,以异常类的形式对这些非正常情况进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理.. 接下来看下code1 来认识一下什么是异常. code1 package day10; public class Test

Java基础笔记-异常总结,包

异常:是对问题的描述,将问题进行对象封装, 异常的体系: Throwable: 1.Error 2.Exception 1.RuntimeException 异常体系的特点: 异常体系中的所有类以及建立的对象都具备可抛性.可以被throw和throws关键字所操作,只有异常体系具备这个特点. throw和throws的用法区别: throw定义在函数内,用于抛出异常对象. throws定义在函数上,用于抛出异常类,可以抛出多个并用逗号隔开. 当函数内容有throw抛出异常对象,并未进行tryca

Java基础笔记-异常

Java中的异常机制: Throwable类是 Java 语言中所有错误或异常的超类.主要包括两个子类: Error和Exception. 一般中要处理的异常是Exception. Java中最常见的处理方式是try catch finally.格式为: try { 需要被检测的异常. } catch(异常类 变量) { 处理异常的代码()处理方式 } finally { 一定会被执行的代码语句 } 一个简单的异常处理代码及有关函数的应用: 1 /* 2 异常:Exception. 3 处理异常

[Python基础]008.异常

异常 异常处理 捕获异常 抛出异常 自定义异常 一些常见的异常 异常处理 捕获异常 try/except 与C,java等语言用try/catch来捕获异常相似,Python使用try/except try/except/finally 无论是否有异常都会执行finally下的语句 try/except/else 没有抛出异常时执行else下的语句 代码 try: f = open('data.txt') f.read() print zz print 5/0 except IOError, e

05. Java基础之异常

本文参考了以下链接并作出总结与修改: 1.https://www.cnblogs.com/lulipro/p/7504267.html 2.https://www.cnblogs.com/taiwan/p/7073743.html 3.https://blog.csdn.net/chaplinlong/article/details/50983594 一.简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出

【java基础之异常】死了都要try

目录 1.异常 1.1 异常概念 1.2 异常体系 1.3 异常分类 1.4 异常的产生过程解析 2. 异常的处理 2.1 抛出异常throw 2.2 Objects非空判断 2.3 声明异常throws 2.4 捕获异常try…catch 2.4 finally 代码块 2.5 finally 代码块与return语句 2.6 异常注意事项 3.自定义异常 3.1 概述 3.2 自定义异常练习 4.来!和异常大干一场 @ 1.异常 1.1 异常概念 异常 :简单说就是不正常运行,最终导致JVM