java异常体系简介

1、异常体系:

在这里插入图片描述
图片来源:https://blog.csdn.net/zhanaolu4821/article/details/81012382

Trowable有两个子类:Error和Exception:
Error:
是与虚拟机有关的异常,如:系统崩溃,动态链接失败,虚拟机错误(AWTError、IOError),是不能捕获;
Jvm的内存消耗完会报的OutOfMemoryError,这种错误发生后,JVM就会停止线程;

Exception
包含RuntimeException和checkException异常
RuntimeException是运行时异常,主要原因是程序员没有正确的编写代码导致的异常,需要程序员修改代码,而不是对其进行捕获,
常见的RuntimeException有:IndexOfBoundlesException、ArthmaticException、NullException、NumberFormateException、classCastException
checkException异常是非RuntimeException就是checkedException,在代码编写阶段强制编程人员处理的异常,如FilenotFoundException
处理方式有两种: try catch 在方法声明中throws 抛出

2、try catch finally的执行顺序

情况1: try{} catch(){}finally{} return;

public class TryTest {

	public static void main(String[] args) {
          String result = trytestFunction();
          System.out.println(result);
	}

	private static String trytestFunction() {
        try {
			System.out.println("执行try方法!");
		} catch (Exception e) {
			System.out.println("执行catch方法!");
		}finally {
			System.out.println("执行finally方法!");
		}
		return "44444";
	}
}
执行try方法!
执行finally方法!
44444

情况2: try{ return; }catch(){} finally{} return;


public class TryTest {

	public static void main(String[] args) {
          String result = trytestFunction();
          System.out.println(result);
	}
   /**
             先执行try块中return 语句(包括return语句中的表达式运算),但不返回;
           执行finally语句中全部代码
            最后执行try中return 返回
    * 
    */
	private static String trytestFunction() {
        try {
			System.out.println("执行try方法!");
			return "try";
		} catch (Exception e) {
			System.out.println("执行catch方法!");
		}finally {
			System.out.println("执行finally方法!");
		}
		return "44444";
	}
}

执行try方法!
执行finally方法!
try

3、 try{ } catch(){return;} finally{} return;

  public class TryTest {

	public static void main(String[] args) {
          String result = trytestFunction();
          System.out.println(result);
	}
   /**
             有异常:
         执行catch中return语句,但不返回
          执行finally语句中全部代码,
      最后执行catch块中return返回。 finally块后的return语句不再执行
    * 无异常:
    *  正常顺序执行
    */
	private static String trytestFunction() {
        try {
        	throw new Exception("有异常!");
			/* System.out.println("执行try方法!"); */
			
		} catch (Exception e) {
			System.out.println("执行catch方法!");
			return "catch";
		}finally {
			System.out.println("执行finally方法!");
		}
	}
}
执行catch方法!
执行finally方法!
catch

4、情况4: try{ return; }catch(){} finally{return;}

public class TryTest {

	public static void main(String[] args) {
          String result = trytestFunction();
          System.out.println(result);
	}
   /**
            执行try块return语句(包括return语句中的表达式运算),但不返回;
        再执行finally块,
        执行finally块,有return,从这里返回。
    * 
    */
	private static String trytestFunction() {
        try {
			 System.out.println("执行try方法!");
			 return "try";
		} catch (Exception e) {
			System.out.println("执行catch方法!");
			return "catch";
		}finally {
			System.out.println("执行finally方法!");
			return "finally";
		}
	}
}
执行try方法!
执行finally方法!
finally

5、try{} catch(){return;}finally{return;}

public class TryTest {

	public static void main(String[] args) {
          String result = trytestFunction();
          System.out.println(result);
	}
   /**
      程序执行catch块中return语句(包括return语句中的表达式运算),但不返回;
再执行finally块,
执行finally块,有return,从这里返回。
    * 
    */
	private static String trytestFunction() {
        try {
			 System.out.println("执行try方法!");
			 throw new Exception("遇到错误!");
		} catch (Exception e) {
			System.out.println("执行catch方法!");
			return "catch";
		}finally {
			System.out.println("执行finally方法!");
			return "finally";
		}
	}
}
执行try方法!
执行catch方法!
执行finally方法!
finally

6、try{ return;}catch(){return;} finally{return;}

public class TryTest {

	public static void main(String[] args) {
          String result = trytestFunction();
          System.out.println(result);
	}
   /**
     有异常:

	  执行catch块中return语句(包括return语句中的表达式运算),但不返回;
	   再执行finally块
	   执行finally块,有return,从这里返回。
无异常:
	先执行try块
	再执行finally块
	
	执行finally块,有return,从这里返回。。
    * 
    */
	private static String trytestFunction() {
        try {
			 System.out.println("执行try方法!");
			 return "try";
		} catch (Exception e) {
			System.out.println("执行catch方法!");
			return "catch";
		}finally {
			System.out.println("执行finally方法!");
			return "finally";
		}
	}
}
执行try方法!
执行finally方法!
finally

总结:
1、任何执行try 或者catch中的return语句之后,在返回之前,如果finally存在的话,都会先执行finally语句;
2、如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的;

3、常见的几种Exception

(此部分引用自https://blog.csdn.net/zhanaolu4821/article/details/81012382)
java.lang.IllegalAccessError:违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。

java.lang.InstantiationError:实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

java.lang.OutOfMemoryError:内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
java.lang.StackOverflowError:堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出或者陷入死循环时抛出该错误。

java.lang.ClassCastException:类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。
java.lang.ClassNotFoundException:找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

java.lang.ArithmeticException:算术条件异常。譬如:整数除零等。
java.lang.ArrayIndexOutOfBoundsException:数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

java.lang.IndexOutOfBoundsException:索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
java.lang.InstantiationException:实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。

java.lang.NoSuchFieldException:属性不存在异常。当访问某个类的不存在的属性时抛出该异常。
java.lang.NoSuchMethodException:方法不存在异常。当访问某个类的不存在的方法时抛出该异常。
java.lang.NullPointerException:空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
java.lang.NumberFormatException:数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。

java.lang.StringIndexOutOfBoundsException:字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值