一、什么是异常。
导致程序非正常结束,或导致程序可能出错(中断运行的原因)可谓异常。比如说我们常用的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,这样我们就很快很改正这个错误了。。
分享到:
相关推荐
### Java异常处理总结 #### 一、Java异常的基础知识 在Java编程中,异常处理是一项极其重要的技术。异常处理能够帮助开发者优雅地处理程序运行时遇到的问题,避免程序崩溃,并提供给用户友好的反馈信息。 **什么...
Java异常处理机制是Java编程中不可或缺的一部分,它用于处理运行时出现的错误和不正常情况。异常处理通过五个关键字来实现:`try`、`catch`、`finally`、`throw`和`throws`。在这里,我们将重点讨论`throw`、`throws...
总结来说,Java异常处理机制提供了一种结构化的方法来处理程序运行时的错误,通过try-catch-finally结构捕获和处理异常,同时,利用断言进行内部逻辑验证,以及日志记录来跟踪程序行为。这样的机制增强了代码的健壮...
### Java异常总结 #### 一、Java异常概述 在Java编程语言中,异常处理机制是一项非常重要的特性。它提供了一种方法来响应错误条件,并且能够有效地管理程序运行时可能出现的各种异常情况。Java中的异常主要分为两...
总之,Java异常处理机制是编程中必不可少的工具,它使得程序能够在遇到问题时能够优雅地处理,保证了代码的稳定性和可靠性。通过对异常的捕获、处理和重新抛出,开发者可以更好地控制程序的流程,提高软件的质量。在...
为了更好地理解和处理这些异常,本文将详细介绍几种常见的Java异常类型及其处理方法。 #### 1. `java.lang.NullPointerException` - **异常概述**:`NullPointerException`是Java中最常见的运行时异常之一,它发生...
Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出异常的关键字是 `...
Java的异常处理机制提供了一种强大的工具来管理程序中的错误和异常情况。通过合理地使用异常处理机制,开发人员可以构建更加健壮、易于维护的应用程序。理解异常处理的基础概念和具体实践对于每一个Java开发者来说都...
详细地总结了有关java异常,比如异常产生的原因,抛出异常的方法等等
### Java异常机制详解 #### 一、Java异常机制概述 Java异常处理机制是Java语言的一个重要组成部分,用于处理程序在运行过程中可能出现的各种错误情况。它能够帮助开发者更好地控制程序流,确保程序即使遇到异常也...
下面,我们将逐步揭示 Java 异常处理机制中的一些重要知识点。 反例之一:丢弃异常 在 Java 编程中,捕获异常却不作任何处理是一个常见的坏习惯。这种做法可能会导致程序出现问题,而这些问题可能会被忽视或忽略。...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...
为了帮助开发者更好地理解和处理这些异常,本文将深入探讨一系列常见的Java异常,涵盖从基本的`ArithmeticException`到复杂的`TypeInitializationException`,以及一些特定于类型或操作的异常。通过理解每种异常的...
### Java异常学习总结 #### 一、Java异常概述与分类 在Java开发中,异常处理是确保程序稳定性和健壮性的关键部分。本篇总结了Java异常的基本概念、分类及处理方式等内容,对于从事Java开发的技术人员具有重要的...
在Java编程中,异常处理是一种用于处理程序运行过程中可能出现的错误或意外情况的重要机制。它可以帮助开发者更好地控制程序流,确保程序即使在遇到错误的情况下也能优雅地进行处理或者终止。 #### 核心概念解析 1...
以上列举了几种常见的Java异常类型及其处理策略。理解这些异常的触发原因以及如何避免它们对于编写健壮可靠的Java程序至关重要。除了上述异常之外,Java还提供了许多其他类型的异常来处理不同的错误情况,开发者应该...
JAVA基础第6章异常处理机制练习题 本资源是关于JAVA基础第6章异常处理机制的练习题,涵盖了异常处理机制的基本概念、try-catch-finally...这些知识点都与JAVA基础第6章异常处理机制相关,是JAVA开发中非常重要的概念。
以下是对Java异常处理的一些误区和经验总结。 **误区一:过度使用try-catch块** 有些开发者习惯于在每个函数的开始部分都套用try-catch块,以为这样可以捕捉所有可能出现的异常。实际上,这种做法使得代码变得混乱...