什么是异常?

    就是在编程过程中或者程序运行过程中出现的一些意外。

  什么是异常处理?

    就是提前编写程序处理可能发生的意外。

  具体的过程是怎样的?

    知己知彼方能百战百胜。Java中的异常是用对象来表示的,那么异常的对象从哪里来呢?异常主要有两个来源:

      一是java运行时环境自动抛出的系统生成的异常,例如:除数是零的时候。

      二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是java语言中定义的,使用throw关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。

    异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。

    知道了异常的来源,我们再来看一下,在java应用程序中处理异常时使用那些工具,是通过try 、catch、 throw、 throws、 finally这五个关键字来进行管理的。

    好了 说的这里我们大体说一下这五个关键字都承担着什么样的责任。

      try:是用来包住你认为有可能发生异常的一些语句,当这些语句出现异常时,这个异常将会被抛出。

      Catch:它可以捕获到异常并做处理 ,一般接在try 语句块后面。

      Throws :放在方法名的后面,声明该方法要抛出异常。

      Throw:放在方法内部 抛出异常对象。

      Finally:它的语句块会在方法执行return 语句之前执行。

    该做的一些铺垫基本说完了,让我们来了解一下 java的异常处理机制吧。

    Java虚拟机是用方法调用栈 来跟踪一系列的方法调用过程。该栈堆保存了每个方法的基本信息,当一个新的方法被

    调用时,java虚拟机就把描述该方法的栈结构置入栈顶,位于栈顶的方法为正在执行的方法。看下面的图:

             

    图中是main 方法调用 method B()方法,methodB()方法调用methodA()方法。具体的代码在下面 

 public class MethodInvocationStack {
public static void main(String[] args) {
MethodInvocationStack methd = new MethodInvocationStack();
methd.methodB();
}
public void methodA()
{
System.out.println("我是A");
}
public void methodB()
{
System.out.println("我是B");
this.methodA();
}
}

    当methodA()被调用时会面临着两种情况,一是正常执行,二是出现异常。

    当正常执行时,执行完毕后,java虚拟机会从调用栈中弹出该方法的栈结构,然后继续处理前一个方法。

    当出现异常时,又会面临着两种情况:

       一种是这种异常自己有能力处理,通过try-catch语句捕获并处理异常。代码如下:

public void methodA()
{
try {//举例一个算数错误
int a = 1/0;
} catch (ArithmeticException e) {
System.out.println("除数不能为零");
}
}

      另一种是自己解决不了的,就需要通过throws语句声明抛出异常,让调用你的那个方法去解决

    代码的样子如下:

 public void methodA(int status) throws ArithmeticException
{
if(status == -1)
{
throw new ArithmeticException();
} }
public void methodB()
{
try {
System.out.println("我是B");
this.methodA(-1);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
System.out.println("A发生了异常");
}
}

    代码中methodA()的问题自己解决不了,抛出让methodB()解决。同时本方法(methodA())的栈结构会在java虚拟机的调用栈中弹出,如果他也解决不了,以同样的方式继续向下,只不过methodB()的形式换成methodA()的形式。当java虚拟机追溯到调用栈的最底部的方法时,如果仍然没有找到处理该异常的代码块,将调用异常对象的printstacktrace()方法,打印异常信息,随后终止程序。

总结了一些java中常用异常类的信息

http://blog.csdn.net/xiaokangboy/article/details/76554188

希望阅读者  阅读此文后 给我一些建议或者批评,让我们共同进步

Java异常处理认识的更多相关文章

  1. 札记:Java异常处理

    异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...

  2. java异常处理(父子异常的处理)

    我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”.那个时候还不知道子类方法为什么 ...

  3. Java 异常处理

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out ...

  4. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  5. JAVA 异常处理机制

    主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...

  6. Java异常处理和设计

    在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...

  7. 深入理解java异常处理机制

       异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...

  8. Java提高篇——Java 异常处理

    异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用Syst ...

  9. java异常处理的设计

    有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码. 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲 ...

  10. java异常处理机制

    本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...

随机推荐

  1. Caused by: org.h2.jdbc.JdbcSQLException: Table "T_STUDENT_INFO" not found; SQL statement

    1.错误描述 org.hibernate.exception.SQLGrammarException: error executing work at org.hibernate.exception. ...

  2. Linux显示工作路径

    Linux显示工作路径 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ pwd /home/youhaidong

  3. 2016四川省赛 Floyd-Warshall

    这题真的有毒 首先你忽略 N-M < 100 的条件你就gg吧 其次就算你知道了怎么做之后 还有可能因为写vector或者各种常数大的原因被卡 #include<iostream> ...

  4. 简述MyBatis的体系结构

    MyBatis体系结构主要由以下几个关键部分: 1.加载配置 配置有两种形式:一种是xml配置文件,另一种是java代码的注解MyBatis将SQL的配置信息加载成为一个个的MappedStateme ...

  5. ajax 状态码

    状态码定义 ... 10 信息1xx ... 10.1 100继续 ... 10.1.1 101交换协议 ... 10.1.2 成功的2xx ... 10.2 200 OK ... 10.2.1 20 ...

  6. Servlet和Filter生命周期

    1. 生命周期 1.1. Servlet生命周期 servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.s ...

  7. Cannot find a valid baseurl for repo: base

    Linux下执行yum命令的时候一直报错:Cannot find a valid baseurl for repo: base 网上找了好多办法都没有解决... 我之前也遇到过一次, vi /etc/ ...

  8. handsontable 方法汇总

    核心方法 1.为handsontable添加钩子方法 addHook(key,callback):key为钩子方法名 例如:hot.addHook('beforeInit', myCallback); ...

  9. MSSQL存储过程--CAST和CONVERT使用区别

    数据类型显示转换:CAST和CONVERT(CAST 函数基于 SQL-92 标准并且优先于 CONVERT) ①: CAST是时间类型和字符串之间的转换,使用:CAST(expression AS ...

  10. pc端响应式-媒体查询

    媒体查询(@media):能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的渲染效果 列举常用的pc屏幕宽度: 1024  1280  1366  1440  1680  1920  ...