1.异常处理的越早,损失越小
2.在一些传统的编程语言中,如C语言中,没有专门处理异常的机制,程序员通常用方法的特定返回值来表示异常情况。Java语言按照面向对象的思想来处理异常,使得程序具有更好的可维护性,Java语言处理异常具有以下优点:
>把各种不同类型的异常情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势
>异常流程的代码和正常流程的代码分离,提高了程序的可读性,简化了程序结构
>可以灵活的处理异常,如果当前方法有能力处理异常,就捕获并处理他,否则就只需要抛出异常,由方法调用者来处理
3.Java虚拟机的方法调用栈
每个线程都有一个独立的方法调用栈。对于Java应用程序的主线程,堆栈底部是程序的入口方法main(),当一个新的方法被调用时,Java虚拟机把描述改方法的栈结构置入栈顶,位于栈顶的方法为正在执行的方法。方法的调用顺序为:main()方法调用mathodB()方法,methodB()方法调用methodA()方法。

当一个方法正常执行完毕,Java虚拟机会从调用栈中弹出改方法的栈结构,然后继续处理前一个方法。如果在执行方法的过程中抛出异常,则Java虚拟机必须找到能捕获该异常的catch代码块。他首先检查看当前方法是否存在这样的catch代码块,若果存在就执行该catch代码块,否则Java虚拟机会从调用栈中弹出该方法的栈结构继续到前一个方法中查找合适的catch代码块。在回溯的过程中,若果Java虚拟机在某个方法中找到了处理改异常的代码块,则该方法的栈结构将成为栈顶元素,程序流程将转到改方法的异常处理代码部分继续执行。
当Java虚拟机追溯到调用栈的底部的方法时,如果仍没有找到处理改异常的代码块,将按照以下步骤处理
(1)调用异常对象的printStackTrace()方法,打印来自方法调用栈的异常信息,
(2)如果该线程不是主线程,那么终止这个线程,其他线程继续正常执行,如果该线程是主线程(即方法调用栈的底部为main()方法),那么整个应用程序终止。
public class MainCatcher {
public void methodA(int money) throws SpecialException{
if(--money <= 0){
throw new SpecialException("Out of money");
}
System.out.println("methodA");
}
public void methodB(int money) throws SpecialException{
methodA(money);
System.out.println("MethodB");
}
public static void main(String[] args) throws SpecialException {
new MainCatcher().methodB(1);
}
}
class SpecialException extends Exception{
public SpecialException() {
super();
// TODO Auto-generated constructor stub
}
public SpecialException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
}
打印的结果是
Exception in thread "main" com.gao.exception.SpecialException: Out of money
at com.gao.exception.MainCatcher.methodA(MainCatcher.java:10)
at com.gao.exception.MainCatcher.methodB(MainCatcher.java:16)
at com.gao.exception.MainCatcher.main(MainCatcher.java:21)
如果改成
public static void main(String[] args) throws SpecialException {
//new MainCatcher().methodB(1);
try {
new MainCatcher().methodB(1);
System.out.println("mian");
} catch (SpecialException e) {
System.out.println("Wrong");
}
}
打印的结果是Wrong
如果new MainCatcher().methodB(2);
methodA
MethodB
mian
4.throws:生命可能会抛出的异常
如果一个方法可能会抛出异常,但是没有能力处理这种异常,可以在方法声明处使用throws字句来声明抛出异常。例如汽车在运行时可能会出现故障,汽车本身没有办法处理这个故障,因此Car()类的run()方法声明抛出CarWrongException。
Worker类的gotoWork()方法调用以上run()方法,gotoWork()方法捕获并处理CarWrongException异常,在异常处理过程中又生出新的异常LateException,gotoWork()方法本身不会再处理LateException而是声明抛出LateException。谁回来处理Worker类的LateException呢?显然是职工老板,如果某职工上班迟到,那么就扣他的工资。
public class Worker {
private Car car;
public Worker(Car car) {
super();
this.car = car;
}
public void gotoWork() throws LateException {
try {
car.run();
} catch (CarWrongException e) {
walk();
Date date = new Date(System.currentTimeMillis());
String reason = e.getMessage();
throw new LateException(date, reason);
}
}
private void walk() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
}
}
class Car{
public void run() throws CarWrongException{
if(true/*车子无法刹车*/){
throw new CarWrongException("车子无法刹车");
}
if(true/*发动机无法启动*/){
throw new CarWrongException("发动机无法启动");
}
}
}
class CarWrongException extends Exception{
public CarWrongException() {
super();
// TODO Auto-generated constructor stub
}
public CarWrongException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
}
class LateException extends Exception{
private Date arriveTime;
private String reason;
public LateException(Date arriveTime, String reason) {
super();
this.arriveTime = arriveTime;
this.reason = reason;
}
public Date getArriveTime() {
return arriveTime;
}
public String getReason() {
return reason;
}
}
分享到:
相关推荐
Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出异常的关键字是 `...
1. Java 异常处理机制是 Java 语言的一大特色,它可以使程序更加可靠、可读和可维护。 2. Java 异常处理的设计原则是指在设计时把那些有可能发生异常情况的语句放在 try 块中,通过该语句块来打开 Java 的处理异常...
java异常练习题,北大青鸟学士后课后练习,主要是异常处理的小测验
java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理
这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...
零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理...
Java异常处理是编程中至关重要的一个环节,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java中的异常处理机制基于一个独特的概念——异常(Exception),这是一种表示程序运行中...
第7章 java异常处理
### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...
Java异常处理设计是Java编程中一个至关重要的环节,它直接影响到程序的稳定性和可维护性。在Java中,异常处理是通过try-catch-finally语句块来实现的,主要涉及两大类异常:编译时异常(Checked Exception)和运行时...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本篇文章将深入探讨Java异常处理的概念、机制以及如何通过代码实例进行有效的异常管理。 Java异常处理的核心...
### Java异常处理总结 #### 一、Java异常的基础知识 在Java编程中,异常处理是一项极其重要的技术。异常处理能够帮助开发者优雅地处理程序运行时遇到的问题,避免程序崩溃,并提供给用户友好的反馈信息。 **什么...
Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时可能出现的错误和不正常状况。在Java中,异常是程序执行过程中出现的问题,它们中断了正常的控制流程,使得程序无法继续按照预期的...
C++的异常处理还支持异常规范(exception specification),即函数声明中可以指定可能抛出的异常类型,但这一特性在C++11标准后被认为不推荐使用,因为其可能导致编译时错误过于严格。 异常与异常处理器的绑定方面...
14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理...
Java异常处理是Java编程中一个至关重要的概念,它关乎到程序的健壮性和稳定性。在Java语言中,异常处理提供了一种机制,使得程序在遇到错误或非正常情况时能够优雅地处理问题,而不是突然崩溃。这个“java高端技术...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...
本文将从 Java 异常的基本概念和语法开始,讲述 Java 异常处理的基本知识,分析 Java 异常体系结构,对比 Spring 的异常处理框架,阐述异常处理的基本原则,并提出了自己处理一个大型应用系统异常的思想,并通过设计...
### Java异常处理之陋习详解 #### 一、引言 在Java开发中,异常处理是确保程序稳定性和健壮性的关键环节。然而,在实际编程过程中,开发者往往会因为种种原因而形成一些不良的习惯,这些习惯可能会导致代码质量...
通过遵循上述最佳实践,开发者可以编写出更健壮、可维护的Java代码,有效地利用Java异常处理机制来提高程序的稳定性。同时,阅读并理解"Effective Java Exceptions"文档可以帮助进一步深化对Java异常处理的理解。