黑马程序员 【】java学习之路——异常

时间:2020-12-14 00:46:02

                                          -------android培训java培训、期待与您交流! ----------

异常:就是程序运行时出现不正常的情况

异常由来:问题也是现实生活中一个具体事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况描述后的对象体现。

对于问题的划分:两种 一种是严重的问题;一种是非严重的问题;

对于严重的,java通过error类进行描述。

对于Error一般不编写针对性的代码对其进行处理。

对于非严重的,java通过Exception类进行描述。

对于异常可以使用针对性的处理方式进行处理

Error 和exception都具有共性。


java中就用Throwable 类来处理error和exception

Throwable 类往下分为两个类error 和exception

异常的处理Java提供了特有的语句进行处理

Try

{

   需要被检测的代码块;

}catch(异常类变量)

{

  处理异常的代码;(处理方式)

}

Finally{

  一定会执行的语句

};

1:对捕获到的异常 常见方法操作介绍:

 String getMessage() 获取异常信息;

 toString();获取异常信息,异常名称

 printStackTrace();获取异常信息,异常名称 ,异常位置

jvm 默认的异常处理机制就是在调用printStackTrace();


对多异常的处理:

1:声明异常时,建议声明更为具体的异常,这样处理的可以更具体。

函数中只要遇到异常,函数就跳转到异常处理代码!即函数停止运行

用多个catch捕获

2:对方声明几个异常,就对应有几个catch块。 如果多个catch块中的异常出现继承关系,父类异常catch块,放在最下面。不要定义多余的catch块。

建议在进行catch处理时,一定要定义具体的处理方式,最好不要之定义一句e.printStackTrace()也不要简单的就书写一句输出语句


自定义异常:

因为项目中会出现特有的问题,而这问题并未被java所描述并封装。所以对于这些特有的问题可以按照java的对问题封装思想,将这些特有的问题进行自定义的异常封装。

函数内抛出异常,函数必须先声明异常;只有RuntimeException类和其子类例外 ,即如果在函数内抛出异常,在函数上可以不用抛出异常或者在函数上声明该异常,调用者可以不用进行处理,编译一样通过。

对于异常分两种:

1:编译时被检测异常。

2:编译时不被检测的异常(运行时异常,Runtimeexception即其子类)


如何定义异常信息?

因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,将异常信息传递给父类通过super语句。那么就可以直接通过getMessage方法获取自定义的异常信息。

自定义类必须继承Exception类


throws和throw的区别

throws使用在函数上(即函数定义是参数列表右括弧和左大括号之间)

throw使用在函数内部

throws后面跟的异常类,可以跟多个异常类,之间使用“,”隔开。

throw后跟的是异常对象。

Finally代码块:定义一定执行的代码块。通常用于存放关闭资源代码块

注意:Finally只有一种情况下是读不到的那就是在其前面遇到System.exit(0); 系统退出 虚拟机结束。

Catch是用于处理异常的,如果没有catch就代表异常没有被处理过。如果该异常是检测异常,那么必须声明。


异常在子父类在覆盖中的体现:

1:子类在覆盖父类时,如果父类的方法抛出异常,那么抛出子类的覆盖方法,只能抛出父类的异常或者该异常类的子类。

2:如果父类抛出多个异常,子类在覆盖该方法时,只能抛出父类异常的子集

3:如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法是,也不可以抛出异常。如果子类方法发生了异常,那么就必须要进行try处理,绝对不能抛出。