什么是异常?

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

  什么是异常处理?

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

  具体的过程是怎样的?

    知己知彼方能百战百胜。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. MyEclipse弹出提示窗口

    MyEclipse弹出提示窗口 1.弹窗如下

  2. DirectX--Filter属性页的调用

    IEnumFilters* pEnum; HRESULT hr ; if (pigb) { hr = pigb-> EnumFilters(&pEnum); if (FAILED(hr) ...

  3. Nginx 原理解析和配置摘要

    前言 Nginx 作为高性能的 http 服务器,知名度不必多言,相似产品中无出其右.本篇随笔记录我认为较为重要的原理和配置. 1. 原理解析 1.1 结构 以上是 Nginx 的结构图,其包含一个 ...

  4. Java之CyclicBarrier使用,任务等待

    1.类说明: 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 Cycl ...

  5. angular路由参数说明

    AngularJS 路由 本章节我们将为大家介绍 AngularJS 路由. AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 通过 AngularJS 可以实现多视图的单页Web ...

  6. Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons

    提供两种思路 一种线段树区间更新 另一种用map维护连续的区间,也是题解的思路 第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了) #include<iostream> #incl ...

  7. 优先队列运用 TOJ 4123 Job Scheduling

    链接:http://acm.tju.edu.cn/toj/showp4123.html 4123.   Job Scheduling Time Limit: 1.0 Seconds   Memory ...

  8. 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

    前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正. 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目. ...

  9. 一个仿3D的平面游戏页面

    package com.totoo.TouhouMassLight;import android.os.Bundle;import android.view.MotionEvent;import an ...

  10. Qtree3题解(树链剖分(伪)+线段树+set)

    外话:最近洛谷加了好多好题啊...原题入口 这题好像是SPOJ的题,挺不错的.看没有题解还是来一篇... 题意: 很明显吧.. 题解: 我的做法十分的暴力:树链剖分(伪)+线段树+\(set\)... ...