什么是异常?

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

  什么是异常处理?

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

  具体的过程是怎样的?

    知己知彼方能百战百胜。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. javaWeb中request请求转发和response重定向

    1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL.  2.request.get Forward代码中的&q ...

  2. Linux之磁盘与文件系统管理

    磁盘及文件系统管理详解 [参考文献:马哥视频] 原文:http://blog.csdn.net/u013008795/article/details/51150075 目前市场上主流的磁盘是机械式硬盘 ...

  3. EF6CodeFirst+MVC5+Autofac泛型注册 入门实例

    贴一个EF6 CodeFirst模式结合MVC5和Autofac(泛型注册)的一个入门实例 网上类似的例子实在太少,最近自己也有用到这一块的知识,总结了一下,不要让后人踩了自己踩过的坑. 1:新建三个 ...

  4. PyTorch官方中文文档:torch

    torch 包 torch 包含了多维张量的数据结构以及基于其上的多种数学操作.另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化. 它有CUDA 的对应实现,可以在NVIDIA ...

  5. 【NOIP2014】解方程(枚举)

    题面 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入格式 输入共n + 2 行. 第一行包含2 个整数 ...

  6. .net remoting在wpf中的应用

    我做一个remotting的通讯测试,让控制台程序和wpf窗体通讯.具体实现的功能如下: 1.wpf获取信息在控制台上显示 2.控制台启动wpf,以及在屏幕前端显示 首先,我们来看项目结构: 共三个项 ...

  7. 伯克利推出世界最快的KVS数据库Anna:秒杀Redis和Cassandra

    天下武功,唯快不破. 伯克利 RISE 实验室推出了最新的键值存储数据库 Anna,提供了惊人的存取速度.超强的伸缩性和史无前例的一致性保证.Jeff Dean 说,当一个系统增长到十倍规模时,就需要 ...

  8. Oracle用户、授权、角色管理

    创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...

  9. Mininet简介

    在Coursera SDN开放课程中,编程作业要用Mininet来完成.这里对Mininet做一个简单的介绍. 什么是Mininet Mininet是由一些虚拟的终端节点(end-hosts).交换机 ...

  10. 学习 CosmosDB (NoSql)

    Microsoft Azure官网 学习cosmos DB,也称作 documentDB,NoSql,不是关系型数据库,数据以Json的格式存储,灵活性强. 1.DLL 2.Connector set ...