异常:

  在运行期间发生的不正常情况。  

  在JAVA中用类的形式对异常的情况进行了类的封装。

  这些描述不正常情况的类就称为异常类。 异常类就是java通过面向对象的思想将问题封装成了对象。用异常类对问题进行描述,不同的问题用不同的类进行具体的描述,比如,空指针 脚标越界 等等......

   以前将正常流程代码和处理异常的代码相结合,现在是将正常流程代码和处理异常的代码分开,这样就提高了阅读性。

体系:

  问题很多,对应的异常类就有很多,通过对这些异常类共性的不断向上提取,就形成了异常体系。Throwable。

这个体系有个特点,就是Throwable及其子类都具有可抛性。即被throw throws抛。

Throwable:

  分为两大类:

      Error(一般不可处理的问题)由JVM抛出的严重性问题,一般不进行针对性处理,而是直接修改程序。已经让虚拟机不正常了,这是错误。

      Exception(可处理)

异常的分类:

  编译时被检测异常:只要是Exception及其子类,除了RuntimeException及其子类;

           这种异常一但出现,就在编译时出现错误,希望能够得到针对性的处理。

  编译时不被检测异常(运行时异常):RuntimeException及其子类;该类是JVM正常运行期间抛出的异常超类;

                   这种异常一但出现,无法让功能继续运行,一般是调用者导致的或者  引发了内部状态的改变导致的,

                   这种异常一般不处理,直接编译通过,在运行的时候直接让调用者调用的程序停止,让调用者对代码进行修正。

简单示例:

JAVA编译器,一般是先检查语法错误,再检查逻辑错误。

这里脚标越界

 class Text{
public static void main(String[] args){
int[] a=new int[3];
A Dome=new A();
Dome.show(a, 3);
} }
class A{
void show(int[] a,int b){
System.out.print(a[b]);//throw new ArrayIndexOutOfBoundsException(b);
} }

实际上在11行会进行对象的封装,然后把问题反馈给调用者(main)

然而main并没有处理的方法他也只能把问题已同样的方法抛给JVM

JVM便会把问题打印在控制台上,让调用者去处理(在以后开发的时候这些异常存储在日志中)。

代码抛出了异常,该代码下面的代码将不会执行,除了finally。

如果异常的代码catch处理了,那么该异常代码下面的代码会继续执行下去。 

自定义异常类:

  自定义的异常类,要么继承Exception,要么继承RuntimeException;

  当继承Exception时,一定要声明异常,否则编译失败,(就好比你有一块变质的面包,你直接给别人,别人吃了GG,所以一定要声明,让别人有处理的办法)

  但是如果继承的是RuntimeException的话,可以编译通过。

 class Text{
public static void main(String[] args) throws FuShuIndextException{
int[] a=new int[3];
Text1 Dome=new Text1();
Dome.show(a, -1);
} }
class Text1{
void show(int[] a,int b) throws FuShuIndextException{
if(b<0){
throw new FuShuIndextException("数组脚标不能为负");
} } }
class FuShuIndextException extends Exception{
FuShuIndextException(String a){
super(a);
}
}

throw new FuShuIndextException("数组脚标不能为负"); 打印这句话只需要异常类里面有对应的构造函数,该构造函数调用其父类的方法。

在这里我是用了声明(抛出 throws)的方法解决异常,所以异常代码后面的代码将不会不执行到,

但是这个数组脚标不能为负数的异常是可以用catch的解决的,下面我会用catch的方法来处理这个的异常。

声明和捕捉:

  处理异常的两个方法。

  声明:声明异常的目的就是为了让调用者处理异常,所以如果声明了异常,那么一定要处理。要么throws要么try catch。

  捕捉:try(需要被检测异常的代码) catch(处理异常的代码) finally(里面的代码一定会被执行到),即对异常进行针对性的处理。

     1.try catch finally

     2.try catch(可以多个)没有需要释放的资源

     3.try finally异常无法catch处理,但是需要释放资源

 class Text{
public static void main(String[] args) {
int[] a=new int[3];
Text1 Dome=new Text1();
try{
Dome.show(a, -1);
}
catch(FuShuIndextException e){
// System.out.println(e);
// System.out.println(e.toString());
// System.out.println(e.getMessage());
// e.printStackTrace(); }finally{
System.out.println("finall中一定会被执行到的代码");
}
System.out.println("解决了问题后依然会运行的代码"); } }
class Text1{
void show(int[] a,int b) throws FuShuIndextException{
if(b<0){
throw new FuShuIndextException("数组脚标不能为负");
}
} }
class FuShuIndextException extends Exception{
FuShuIndextException(String a){
super(a);
}
}

第9-12行的代码是打印异常的信息即"数组脚标不能为负"输出为

FuShuIndextException: 数组脚标不能为负

FuShuIndextException: 数组脚标不能为负

数组脚标不能为负

FuShuIndextException: 数组脚标不能为负
at Text1.show(Text.java:26)
at Text.main(Text.java:6)

第9行等价于第10行,它默认的是e.toString

第12行,JVM默认的异常处理机制就是调用了这个方法

异常处理的原则:

  1.函数内容如果抛出了需要检测的异常,那么函数上一定要声明或者try catch捕捉否则编译失败

  2.如果调用到了声明异常的函数,那么调用者一定要声明或者try catch捕捉否则编译失败

  3.能够处理的异常用try catch自己解决,不能处理的异常用throw告诉调用者,让调用者解决

  4.一个功能如果抛出了多个异常,那么调用时要有相对应的catch进行针对性的处理。

   内部有几个需要被检测的异常,就要有对应的catch来解决异常

     但是当多catch出现的时候要注意父类的catch要放在最后面,否则编译失败,因为父类catch下面的catch都变成了废话

异常的注意事项:

  子类覆盖父类,就只能抛出父类的异常,或者子类或者子集

父类没有异常,子类绝对不能抛出异常,只能try catch

Throwable.异常的更多相关文章

  1. java.lang.Throwable 异常/深入

    有几个现象是需要总结的: -------------------------------------- 在java语言中,错误类的基类是java.lang.Error,异常类的基类是java.lang ...

  2. 黑马程序员:Java编程_异常

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 异常即对问题的描述,将问题进行对象的封装. 1. 异常体系:Throwable ...

  3. Java异常与异常处理简单使用

    异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...

  4. ScheduledExecutorFactoryBean忽略异常继续执行

    ScheduledExecutorFactoryBean忽略异常继续执行 程序中有一个定时任务,每10分钟把满足条件的任务从一个表迁移到另一张表,程序启动的时候数据库异常了一段时间,之后数据库恢复了. ...

  5. 跟着刚哥梳理java知识点——异常(十一)

    异常:将程序执行中发生的不正常情况(当执行一个程序时,如果出现异常,那么异常之后的代码就不在执行.) java.lang.Throwable:异常的超类 1.Error:java虚拟机无法解决的严重问 ...

  6. 第33节:Java面向对象中的异常

    Java中的异常和错误 Java中的异常机制,更好地提升程序的健壮性 throwable为顶级,Error和Exception Error:虚拟机错误,内存溢出,线程死锁 Exception:Runt ...

  7. JavaSE 异常抛光解析

    异常 异常指的是程序中的不正常现象,一般异常都是由第三方数据的使用造成的.java中每种异常现象都会有一个对应的异常类.java对异常的处理方式就是终止程序.异常机制其实是为了帮助我们找到程序中的问题 ...

  8. 异常 Exception 堆栈跟踪 异常捕获 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. 9.异常Exception

    9.1 异常概述 package exception; /* * 异常:程序运行的不正常情况 * * Throwable: 异常的超类 * |-Error * 严重问题,这种问题我们通过异常处理是不能 ...

随机推荐

  1. Jar程序使用MyBatis集成阿里巴巴druid连接池

    在写jar程序,而不是web程序的时候,使用mybatis作为持久层,可以集成POOLED连接池,而阿里的druid不能用,确实很郁闷.不过有办法. 首先准备好数据库配置文件 然后对Druid进行一个 ...

  2. 天猫精灵X1智能音箱使用感想

    11.22音箱到手,等了刚好一个月. 主要是测评语音交互功能. 测试条件:正宗普通话. 1)问天气.温度:表现良好.2)找手机功能:试了多次,每次都说手机号码格式不对3)小孩听故事:正常.但是开头会有 ...

  3. Hadoop压缩

    为什幺要压缩? 压缩会提高计算速度?这是因为mapreduce计算会将数据文件分散拷贝到所有datanode上,压缩可以减少数据浪费在带宽上的时间,当这些时间大于压缩/解压缩本身的时间时,计算速度就会 ...

  4. html input密码显示为*号

    <!DOCTYPE html> <html encoding="utf-8"> <head> <style> *{margin:0; ...

  5. 深度学习菜鸟的信仰地︱Supervessel超能云服务器、深度学习环境全配置

    并非广告~实在是太良心了,所以费时间给他们点赞一下~ SuperVessel云平台是IBM中国研究院和中国系统与技术中心基于POWER架构和OpenStack技术共同构建的, 支持开发者远程开发的免费 ...

  6. Windows下基于ADS+J-Link 的ARM开发环境搭建

    在一般ARM编程教学和实验环境里,一般采用 ADS加+并口转Jtag板+H-Jtag的开发环境.但是这种方法最大缺点是需要机器上有一个并口.现在无论PC还是笔记本都很难有并口,因此采用USB接口调试器 ...

  7. [php错误]PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法

    使用unserialize函数将数据储存到数据库的时候遇到了这个报错, 后来发现是将gb2312转换成utf-8格式之后, 每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问 ...

  8. R语言︱文本(字符串)处理与正则表达式

    处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本.R语言是统计的语言,处理文本不是它的强项,perl语言这方面的功能比R不知要强多少倍.幸运的是R语言的可扩展能力很强,DN ...

  9. freemarker获取封装类中对象的属性

    freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...

  10. ATA接口寄存器描述

    ATA接口寄存器描述 .ATA接口的三种数据传输方式 位. )MDMA(Multiword DMA)传输,用于数据传输.ATA主机控制器向ATA设备下达MDMA传输命令后,等待设备向主机发送DMARQ ...