语法错误、编译时错误
语义错误、逻辑错误、运行时错误
数组下标越界,c,c++不检查,需要程序员控制。

1、注意:这里说的异常是运行期错误,不包括编译期错误。
2、try尝试运行,catch捕获并处理,finally无论出错不出错都会执行。
3、throw 用来手动抛出异常。

4、throws 用来不捕获异常,抛给上一层;或者在手动抛出异常的情况下提醒别人我这个方法可能会抛出异常,手动抛出的异常如果是RunTimeException可以throws,也可以不throws,上一层方法可以处理,也可以不处理,可以继续throws,也可以不throws,手动抛出的异常如果是普通的Exception,必须要throws,否则通不过编译。

5、异常类根类:Throwable
Throwable又有两个子类,Error和Exception。Error不是我们关注的,不是我们能够处理的。
Exception是必须处理或抛出的,不处理或不抛出通不过编译,一般JDK里声明方法后紧跟着throws 的方法,我们在调用它的时候必须处理,或者抛出。
Exception还有一个子类,RuntimeException,可捕捉也可不捕捉,可以throws 也可以不throws。例如:
public class TestException {
public static void main(String[] args) {
int i = add(1, 0);
System.out.println(i);
}
public static int add(int i, int j) throws ArithmeticException {//这里没有写throws也可以
if(j == 0) {
throw new ArithmeticException("0不能作除数");//注意这种写法//请看控制台异常信息
}
return i/j;
}
}
6、注意:不要轻易地抛出异常,不要轻易地吞掉异常。
  该处理的一定要处理;处理不了,没关系,可以往外抛。在main方法上也可以抛异常,但永远都不要这样做,除非测试。
7、printStackTrace()打印堆栈错误信息,一个地方出错可能是另一个地方引起的。
8、e.getMessage()异常信息,异常类都有无参的构造方法,也都有一个有参的构造方法,用来让我们自定义异常信息。
public class TestException {
public static void main(String[] args) throws Exception {//主方法也必须捕获或抛出
int i = add(1, 0);
System.out.println(i);
}
public static int add(int i, int j) throws Exception {//这里必须写throws
if(j == 0) {
throw new Exception("0不能作除数");//注意这种写法//请看控制台异常信息
}
return i/j;
}
}
9、java异常处理机制:
  java程序执行过程中如出现异常,系统会监测到并自动生成一个相应的异常类对象(里面封装了异常信息),然后再将它交给运行时系统,这一过程称为抛出异常。自定义异常需要我们自己预测,并手动生成这个异常对象,然后抛出交给运行时系统。
  运行时系统再寻找程序里有没有catch这种异常,如果有,把这个异常对象交给catch语句块处理,这一过程称为捕获异常;如果没有,抛,main方法也没有,抛,缺省的异常处理程序处理,打印堆栈信息,程序结束。
      生成------>抛出------>捕获------>处理
10、人工抛出异常
java异常类对象除了在程序运行出错时由系统自动生成并抛出之外,也可根据需要人工创建并抛出。
throw new IOException();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
自定义异常示例:
自定义异常可以继承RunTimeException,也可以继承Exception,区别:一个必须处理,一个可以不处理不抛出。
自定义异常需要人工抛出。
class MyException extends Exception {
 
    public MyException(String message) {
        super(message);
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public class TestException {
    public void regist(int number) throws MyException {
        if (number < 0) {
            throw new MyException("人数不能为负数");
        }
    }
 
    public static void main(String[] args) {
        TestException t = new TestException();
        try{
            t.regist(-1);
        }catch(MyException m) {
            m.printStackTrace();
        }
    }
 
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1java异常详解的更多相关文章

  1. JAVA基础——异常详解

    JAVA异常与异常处理详解 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1 ...

  2. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的

    本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...

  3. Java面向对象之异常详解

    目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往 ...

  4. cpp异常详解

    1. 异常介绍 在函数在执行过程中如果碰到对错误的处理可以有两种方式, 1. 返回错误,2. 使用异常. 如果作为函数的调用者想要知道具体的错误信息, 就需要维护一套错误列表, 或者用string类型 ...

  5. Java基础 - 异常详解

    异常的层次结构 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示 ...

  6. java笔记--异常详解与处理

    一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出.     2.只有此类或其子类才 ...

  7. c++异常详解

    一.什么是异常处理 一句话:异常处理就是处理程序中的错误. 二.为什么需要异常处理,以及异常处理的基本思想 C++之父Bjarne Stroustrup在<The C++ Programming ...

  8. Java中的异常详解

    一.异常定义 阻止当前方法或作用域继续执行的问题,称为异常 二.异常分析      所有不正常类都继承Throwable类,这个类主要有两个子类Error类和Exception类.Error指系统错误 ...

  9. java异常详解

    java异常需要弄清楚如下几个问题: 1.java异常的层次结构 2.搞清楚问题:java中异常抛出后代码还会继续执行吗? 答:该问题可以参考该博文,完美的回答了我的疑惑:http://www.cnb ...

随机推荐

  1. 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案

    场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...

  2. centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本)

    centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本) #####################     sendmail.py  begin     ######## ...

  3. hive多表联合查询(GroupLens->Users,Movies,Ratings表)

    hive (UserMovieRating)> create table if not exists Users(                      > UserID int co ...

  4. Dubbo架构设计详解(转载)

    原文地址:http://shiyanjun.cn/archives/325.html Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解 ...

  5. spring boot整合RabbitMQ(Topic模式)

    1.Topic交换器介绍 Topic Exchange 转发消息主要是根据通配符. 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发 ...

  6. Spring+Druid+SpringMVC的搭建(附Demo)

    最近公司事情比较少,便想利用这段空闲时间做一个自己的博客. 前端界面已经搞好,感谢杨姐的模板,自己稍微把模板没有的模块给补全了. 今天便开始自己的SSM框架搭建,数据库链接是采用数据库连接池.先上个项 ...

  7. 高级网络功能(Docker支持的网络定制配置)

    网络的高级知识,包括网络的启动和配置参数.DNS的使用配置.容器访问和端口映射的相关实现. 在一些具体场景中,Docker支持的网络定制配置,通过Linux命令来调整.补充.甚至替换Docker默认的 ...

  8. Java正则表达式防注入小例子

    /** * 第一行匹配特殊字符: * 第二行匹配开头和结尾都有空格的: * 第三行匹配结尾有空格的 * */ private Boolean DetermineChar(String reqData, ...

  9. 远程通信机制RPC与RMI的关系

     1.RPC RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC不依赖于具体的网 ...

  10. 使用ichartjs进行布局图表页面

    先说官网  http://www.ichartjs.com/ 进入里面会有一个可视化布局系统,布局起来自己想要的样式快捷方便,和bootstrap可视化布局系统是一个道理的.