`

thinking in java notes

    博客分类:
  • java
阅读更多

覆盖一个方法时,只能产生已在方法的基础类版本中定义的异常,或者是基类版本中定义的异常的子类。

但是可以在基类声明抛出异常时,覆盖的子类不抛出异常。

这意味着与基类协同工作的代码也会自动应用于衍生类。

 

可以声明一场却不抛出异常,因为可能在子类中抛出这些异常。

构建器不受上述影响。

 

 

除了将内存设置为默认状态外,如果还需要设置一些其他值,finally就是必须的。

如果调用了continue和break,finally机制还是能够工作。

 

丢失异常:

public class LostMessage {
	void f() throws VeryImportantException {
		throw new VeryImportantException();
	}

	void dispose() throws TrivalException {
		throw new TrivalException();
	}

	public static void main(String[] args) throws VeryImportantException, TrivalException {
		LostMessage lostMessage = new LostMessage();
		try {
			lostMessage.f();
		} finally {
			lostMessage.dispose();
		}
	}
}

class VeryImportantException extends Exception {
	@Override
	public String toString() {
		return "Very Important";
	}
}

class TrivalException extends Exception {
	@Override
	public String toString() {
		return "Trival";
	}
}

 在此例中,不存在VeryImportantException(非常重要的违例)的迹象,它只是简单地被finally从句中的TrivalException 代替了。

 

构建器:

class InputFile {
	private BufferedReader in;

	InputFile(String fname) throws Exception {
		try {
			in = new BufferedReader(new FileReader(fname));
			// Other code that might throw exceptions
		} catch (FileNotFoundException e) {
			System.err.println("Could not open " + fname);
			// Wasn't open, so don't close it
			throw e;
		} catch (Exception e) {
			// All other exceptions must close it
			try {
				in.close();
			} catch (IOException e2) {
				System.err.println("in.close() unsuccessful");
			}
			throw e;
		} finally {
			// Don't close it here!!!
		}
	}

	String getLine() {
		String s;
		try {
			s = in.readLine();
		} catch (IOException e) {
			System.err.println("readLine() unsuccessful");
			s = "failed";
		}
		return s;
	}

	void cleanup() {
		try {
			in.close();
		} catch (IOException e2) {
			System.err.println("in.close() unsuccessful");
		}
	}
}

public class Cleanup {
	public static void main(String[] args) {
		try {
			InputFile in = new InputFile("Cleanup.java");
			String s;
			int i = 1;
			while ((s = in.getLine()) != null)
				System.out.println("" + i++ + ": " + s);
			in.cleanup();
		} catch (Exception e) {
			System.err.println("Caught in main, e.printStackTrace()");
			e.printStackTrace();
		}
	}
}

 若FileReader构建器不成功,就会产生一个FileNotFoundException(文件未找到违例)。必须单独捕获这个违例——这属于我们不想关闭文件的一种特殊情况,因为文件尚未成功打开。

执行完本地操作后,违例会被重新“掷”出。这样做是必要的,因为这个构建器的执行已经失败,我们不希望调用方法来假设对象已正确创建以及有效。

 

Java的一项缺陷——除内存清除之外的所有清除都不会自动进行,所以必须知会客户程序员,告诉他们有责任用finalize()保证清除工作的正确进行。

 

 

catch(Annoyance e)能捕获一个Annoyance以及从它衍生的任何类。

这一点非常重要,因为一旦我们决定为一个方法添加更多的违例,而且它们都是从相同的基础类继承的,那么客户程序员的代码就不需要更改。至少能够假定它们捕获的是基础类。
若将基础类捕获从句置于第一位,试图“屏蔽”衍生类违例,则编译器会产生一条出错消息,因为它发现永远不可能抵达Sneeze捕获从句。

 

其中最大的挑战似乎是如何覆盖所有可能的因素。不仅有三种不同的种类的IO需要考虑(文件、控制台、网络连接),而且需要通过大量不同的方式与它们通信(顺序、随机访问、二进制、字符、按行、按字等等)。
分享到:
评论

相关推荐

    Thinking in Java 4th Edition Annotated Solutions Guide

    根据提供的文件信息,以下是对文件《Thinking in Java 4th Edition Annotated Solutions Guide》中所包含知识点的详细解释: 首先,文件标题《Thinking in Java 4th Edition Annotated Solutions Guide》指出了这是...

    Thinking in java .txt

    《Thinking in Java》第四版由布鲁斯·埃克尔(Bruce Eckel)撰写,他是MindView公司的总裁。这本书被广泛认为是学习Java编程语言的经典教材之一。从读者的反馈来看,《Thinking in Java》不仅覆盖了Java的核心概念...

    Thinking in Java 4 源码 导入IDEA可直接运行

    《Thinking in Java》是Bruce Eckel的经典之作,第四版(TIJ4)更是Java程序员必读的书籍之一。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程等众多主题。源码是...

    Thinking in java4(中文高清版)-java的'圣经'

    研讨课 Hands-on Java研讨课CD Thinking in Objects研讨课 Thinking in Enterprise Java Thinking in Patterns(with Java) Thinking in Patterns研讨课 设计咨询与复审 附录B 资源 软件 编辑器与IDE 书籍 分析与设计...

    Thinking in Java 练习题答案

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书的练习题是学习Java的重要组成部分,因为它们能够帮助读者巩固理论知识并提升实践能力。以下是对"Thinking in ...

    Thinking in Java 4th Edition + Annotated Solution Guide (代码)英文文字版 带书签 有答案

    《Thinking in Java》是Bruce Eckel的经典之作,第四版涵盖了Java编程语言的广泛主题,适合初学者和有经验的程序员。这本书深入浅出地讲解了Java的核心概念和技术,旨在帮助读者建立坚实的编程基础,并理解面向对象...

    Thinking In Java-Java 编程思想(中英文版 第四版)

    Thinking In Java-Java 编程思想(中英文版 第四版) Thinking In Java-Java 编程思想(中英文版 第四版)

    《thinking in java》第三版完整PDF书籍+习题答案(中文版)

    《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的权威指南。该书以其深入浅出的方式,详尽地介绍了Java语言的核心概念和技术。第三版是此书的一个重要里程碑,它涵盖了Java语言的诸多关键特性,...

    Thinking in Java Second Edition.doc

    在众多关于Java的学习材料中,《Thinking in Java》第二版以其独特的视角和方法论成为了一本备受推崇的教科书。 本书由Bruce Eckel所著,作为一本权威性的Java编程教程,它不仅仅是向读者介绍Java语言的语法和基础...

    Thinkingin Java电子书

    《Thinking in Java》是一本备受推崇的Java编程教材,由Bruce Eckel撰写,被誉为Java学习者的必读之作。这本书深入浅出地介绍了Java语言的核心概念和技术,覆盖了从基础到高级的主题,对于有一定Java基础的读者来说...

    thinking in java 第四版 源码

    《Thinking in Java》是Bruce Eckel的经典之作,第四版更是被广大Java开发者视为学习和进阶的重要参考书籍。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程、GUI...

    Thinking in Java 习题答案

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书以其详尽的解释、丰富的示例和实践性强的习题深受程序员喜爱。"Thinking in Java 习题答案"是配套的解答集,...

    Thinking in java 电子书

    《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...

    Thinking in Java 3rd Edition.rar

    Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar Thinking in Java 3rd Edition.rar

    thinking in java annotated solution guide 电子书格式

    《Thinking in Java》是Bruce Eckel的经典Java编程教材,它以其深入浅出的讲解和全面系统的内容深受程序员喜爱。这本书的Annotated Solution Guide是作者为读者提供的配套解答指南,帮助读者理解和解决书中练习题,...

    Thinking In Java(英文版 第四版)

    《Thinking In Java(英文版 第四版)》是一本由Bruce Eckel所著的经典Java编程教程。Bruce Eckel是MindView公司的总裁,他凭借自己在Java编程领域的深刻理解和丰富的教学经验,为读者呈现了一本深受世界各地Java...

    Thinking In Java 源码

    《Thinking in Java》是Bruce Eckel的经典Java编程书籍,它深入浅出地讲解了Java语言的核心概念和技术。这本书不仅适合初学者,也对有经验的程序员提供了深入理解Java的宝贵资源。现在,我们有机会免费下载这本书的...

    Thinking in java java核心思想英文原版(带目录)

    Thinking in java java核心思想英文版(带目录),学java必备

    Thinking in Java (中文版)-经典书籍

    他是《Thinking in Java》、《Thinking in C++》、《C++ Inside & Out》《Using C++》和《Thinking in Patterns》的作者,同时还是《Black Belt C++》文集的编辑。他的《Thinking in C++》一本书在1995年被评为...

    Thinking in Java

    《Thinking in Java》是Bruce Eckel的经典之作,它被誉为学习Java编程的最佳教材之一。这本书以其深入浅出的讲解方式和全面覆盖的Java知识点而受到广大程序员的推崇。本压缩包包含的是《Thinking in Java》的第三版...

Global site tag (gtag.js) - Google Analytics