`
lixiongzhi_m
  • 浏览: 60858 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

java中异常机制总结

阅读更多
一、什么是异常。
  导致程序非正常结束,或导致程序可能出错(中断运行的原因)可谓异常。比如说我们常用的qq有时候会因为某种原因自动关闭了,这可以理解是一种异常。
二、异常的种类
  我们常见的异常可以分为两大类
1.运行时异常
比如:
  (1)空指针异常
当一个对象没有实例化拿过来用时会出现这样的异常,这种异常在运行时会抛出“java.lang.NullPointerException”这样的异常。
如下代码:
package net.java.t;
/*
 * 测试类
 */
public class Test {
	//声明Test对象属性
	private static Test t;

	/**
	 * 
		主函数
	 */
	public static void main(String[] args) {
		t.play();
	}
	
	public void play(){}
}

便会产生这样的异常。


(2)数组下标越界
这种异常是我们做练习中经常遇到的,因为当你定义了一个数组后,这个数组的大小就是固定的。
比如我们定义了这样一个数组int array[]=new int [8];
那么这个数组下边大小就只能从0到7当下标不在这个范围之内便产生异常。
如上面我们创建的数组当我们再输入这样的代码array[8]=89;时,便会抛出“java.lang.ArrayIndexOutOfBoundsException: 8”并指出下标8出现越界错误。

(3)栈溢出
当程序陷入死递归,死循环都会出现栈溢出,这也是一种常见的运行时异常,该异常会抛出“java.lang.StackOverflowError”这样的异常。

(4)类型转化错误
我们知道当两个类有继承关系,当要实例化父类对象时,可以用子类来new 一个,这种便是类型的自动转化,当子类要转化成父类类型时就必须强制转化。
如下:
public class A extends B{
	
}

B b=new A();

这样是正确的,但是当我们用两个没有任何关系的类这样做时,假设上面所得A类和B类没有继承关系,当程序运行时便会抛出“java.lang.ClassCastException: net.java.t.B cannot be cast to net.java.t.A”这样的异常。
从上面几个例子中,抛出的异常前面是异常的类型如java.lang.StackOverflowError
java.lang.ClassCastException等等,而后面的是异常根据你代码的一些提示,这个能让你更好的去发现出现的异常在什么地方,如上面例子中的“8”和“B cannot be cast to net.java.t.A”。


2.强制异常
强制异常便涉及到了try{}catch(){}异常处理机制。
所谓强制异常,便是出现异常,强制要你去处理这个异常,比如调用的方法中有未处理的异常(即方法中使用了throws异常类名),就要求我们必须去捕获这个异常并处理或者将这个异常再抛出,这也可以理解是对异常处理的一种方法。
比如我们实例化一个文件类对象f并调用创建新文件的方法如下:
File f=new File();
f.createNewFile();
第二句代码便是一个可能产生异常的语句(只是可能),因为当我们去创建一个新文件时要去指定它的路径,要是该路径不存在或者另外的原因使新文件不能产生,那么这样就会出现错误,所以在定义createNewFile()方法时便考虑到了这一点,所以在定义这个方法时用了throws异常类名下面是该方法定义代码:
public boolean createNewFile() throws IOException {
	SecurityManager security = System.getSecurityManager();
	if (security != null) security.checkWrite(path);
	return fs.createFileExclusively(path);
    }

可能我们会想这个异常从哪里来呢?在这里我们就很容易想到这也是自定义的一个东西果然在createNewFile()方法的返回值fs.createFileExclusively(path)调用的方法定义中我们可以看到这样的语句;
下面是这个方法的定义:
 public abstract boolean createFileExclusively(String pathname)
	throws IOException;

该方法继续抛出异常,我们可以找到后面一个自定义异常对象。
即throw 实例化的一个异常对象
throws是将异常抛出。
比如我们去定义这样一个方法:
public void test() throws Exception{
		int index = 8;
		int array[]=new int [8];
		array[index]=10;
		if(index>=8||index<0){
			throw new Exception("数组越界");
		}

当你去调用这个方法时便会提醒你是要用try{}catch(){}去捕获异常并处理还是把异常再抛出即add throws declaration or surround with try/catch
现在知道异常怎么来了吧。

3.关于try{}catch(){}finally{}的运用
这个语句用来发现异常并处理异常
try{}大括号中用来放可能出现的代码语句,若有异常catch(){}会去铺货该异常,并在{}中去处理
那要是try{}中有多个可能的异常存在呢?
catch(){}中的小括号有带异常类对象参数当有多个异常时我们可以用多个catch(){}并给catch小括号参数分别设置可能的对应的异常类对象参数。或者将该参数设置成Exception e 该异常类是所有异常类的父类,这这边会实现父类子类对象间的自动转型。
注意点:try()catch(){}语句,他只会执行捕获的第一个出现异常的代码语句,当第一个语句出现异常,它会去发现并捕获和处理,第二句代码就不会去执行。
而finally{}是都会去执行的代码语句块,不管是否出现了异常在finally中的代码都会被执行。


三.异常信息分析和程序调式
上面讲了java中的异常种类举了不少例子,也可以看出java中出现异常都会给我们一些提示信息,这会大大方便了我们去寻找错误。
一般异常信息分析和程序调式步骤可以如下:

          1.根据异常类,来确定异常的类型(JDK的API)
2.异常的提示信息
3.找到出错的行(位置)【第一个类名是否是你定义的,如果不是,则再看下一行】
4.分析问题(System.out.println();)
5.修改代码

          System.out.println();输出语句功能非常强大,是我们去调式程序的第一选择,比如上面例子的数组下标出现越界问题时,我们根据异常类java.lang.ArrayIndexOutOfBoundsException
知道它是数组下标越界异常,利用输出语句将数组长度输出并根据异常提示信息数字8,知道是下标8出现了错误,在去找到改行代码,分析为什么会出现这样的错误,发现了原来我们定义的这个数组长为8但数组下标从0开始所以最大只能到7,这样我们就很快很改正这个错误了。。

分享到:
评论
3 楼 netwelfare 2015-05-31  
相比较而言,这篇文章讲解的更深入更详细:异常的深入研究与分析
2 楼 lixiongzhi_m 2012-07-11  
GLC 写道
 

 
1 楼 GLC 2012-07-11  
 

相关推荐

    java异常机制总结

    关键字:throws 声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结,也就是说一定要有相应的catch处理,否则编译时会产生错误。如果方法声明了throws的话,可以交给上一级方法去...

    异常处理机制知识点小总结

    这是自己通过看书对java异常处理的一些总结

    java异常处理机制

    详细地总结了有关java异常,比如异常产生的原因,抛出异常的方法等等

    java异常机制研究

    对java异常的总结,详细描述了JAVA异常的分类,异常的抛出和捕捉的机制,以及在项目应用中应该如何对异常作单独处理

    Java异常机制

    对面试过程中Java异常机制总结、包括异常的分类、运行机制和实例分析等

    异常机制的总结与处理

     异常的概念  Java中的异常  异常的分类  异常处理机制语法  常见异常及异常类API介绍  自定义异常  异常总结

    java异常小结

    本文重在Java中异常机制的一些概念。写本文的目的在于方便大家很长时间后若是忘了这些东西可以通过这篇文章迅速回忆起来。

    Java实验报告——用户登录系统

    1、实验项目名称:用户登录系统 2、实验要求: (1)了解自定义异常的用法; (2)熟悉异常处理机制及创建自定义异常。 3、使用:在了解Java异常机制的基础上自己编写的实验报告。

    java异常机制分析

    主要介绍了java异常机制,包括异常机制的捕获、抛出及常见的异常机制总结,需要的朋友可以参考下

    java-IO流与异常机制学习笔记

    自己总结,知识点全面,包含了,IO流,异常机制等学习笔记 含有代码实例可供参考,需要mybase打开 持续更新,需要的自行下载 附上本人写的学习博客 https://blog.csdn.net/qq_35577787/article/details/105088073

    java 面试题 总结

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    java各知识点详细总结(毕向东笔记整理)

    第一章:编程基础 3-11 第二章:数组 11 -31 第三章:面向对象程序开发 31 -74 第四章:异常机制 74 -89 第五章:多线程技术 89 -122122122 第六章:常用类 API 122API 122 API 122API 122API 122API 122API 122-...

    Java异常处理总结

    异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用...这是Java语言设计者的高明之处,也是Java语言中的一个难点,下面是我对Java异常知识的一个总结,也算是资源回收一

    Java集合总结【面试题+脑图】,将知识点一网打尽!

    8. Java中的异常处理机制是什么?如何处理异常? 以上只是一些常见的Java面试题,实际面试中可能会涉及到更多的问题。在准备Java面试时,需要对Java语言的基础知识和常用的类库有深入的了解,并且需要多做一些练习...

    【大厂面试题总结】JavaSE面试题总结详细教程

    深入理解Java异常体系 谈谈NIO的理解 谈一谈对JUC的理解 ArrayList的底层原理 HashMap的底层原理 iava单例模式详解 JAVA的内存结构 java队列 Java基础思考之数据传递 JAVA内存泄漏详解 java序列化方式 java中实现...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承、封装、多态的实现原理 容器 Java集合类总结 Java集合...

    Java知识点总结.zip

    安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...

    黑马程序员入学Java知识——精华总结

    含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,

    jisuanqi.zip_java 计算器 异常处理

    要求:有简单的需求分析,功能设计,详细设计(程序流程),异常处理,测试,源程序清单,总结,具体格式见附件。 知识点: 掌握 图形用户界面设计; 掌握基本类的设计与使用; 掌握事件处理机制; 掌握使用异常...

    Java后端面试问题整理.docx

    Java后端面试知识点总结,涉及JVM • 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、...

Global site tag (gtag.js) - Google Analytics