构造器的功能是把对象设置成安全状态,但还会有别的动作,比如打开一个文件,这样的动作只有在对象使用完毕并且用户调用了特殊的清理方法之后才能得以清理。如果在构造器内出现了异常,这些清理行为也许就不能正常工作了。这意味着在编写构造器时候要格外细心。请看下面的例子
package com.bird.thinking;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class InputFile {
/**
* @use 构造器的异常处理
* @param args
* @author Bird
*/
private BufferedReader in;
public InputFile(String FileName) throws Exception{//带一个参数的构造器
try{
in = new BufferedReader(new FileReader(FileName));
}catch(FileNotFoundException e){
System.out.println("Could not Open " + FileName);//它现在没有打开文件,所以不需要关闭
throw e;//一定要抛出异常,方便使用者知道构造函数会有异常
}catch(Exception e){//抛出其他异常说明文件已经打开,则需要关闭
try{
in.close();
}catch(IOException e2){
System.out.println("in.close() unsuccessful");
}
throw e;
}
}
public String getLine(){//出现异常则抛出运行错误异常
String s = null;
try{
s = in.readLine();
}catch(IOException e){
throw new RuntimeException("readLine() failed");
}
return s;
}
public void dispose(){
try{
in.close();
System.out.println("dispose close successful");
}catch(IOException e2){
throw new RuntimeException("in.close() unsuccessful");
}
}
public static void main(String[] args) {//使用这个类的构造函数
try{
InputFile in = new InputFile("d:\\测试.txt");//构造函数的初始化需要单独放在一个try-catch模块里面
try{
String s = null;
while((s = in.getLine()) != null){
System.out.println(s);
}
}catch(Exception e){
System.out.println("Cauch Exception in main");
e.printStackTrace(System.out);
}finally{
in.dispose();
}
}catch(Exception e){
System.out.println("InputFile Construction failed");
}
}
}
当这个文件找不到时候,运行结果如下
Could not Open d:\试.txt
InputFile Construction failed
当这个文件找到的时候,运行结果如下
测试
dispose close successful
1.可以看出,如果构造器失败了,将抛出FileNotFoundException异常,而其他的异常会提示,并且关闭输入流
2.调用的时候多了一个try-catch模块,这是为了不要误导使用者,让他认为对象已经创建完毕,可以使用了
3.总之,使用构造器里面的异常一定要注意,嵌套try-catch,和抛出处理完的异常
分享到:
相关推荐
研讨课 Hands-on Java研讨课CD Thinking in Objects研讨课 Thinking in Enterprise Java Thinking in Patterns(with Java) Thinking in Patterns研讨课 设计咨询与复审 附录B 资源 软件 编辑器与IDE 书籍 分析与设计...
在Java编程语言中,构造器...了解和掌握构造器的调用、初始化、默认构造器、继承中的构造器调用以及构造器重载等概念,是编写高质量Java代码的基础。通过熟练运用这些知识,可以更有效地管理对象的生命周期和状态。
《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书以其详尽的解释、丰富的示例和实践性强的习题深受程序员喜爱。"Thinking in Java 习题答案"是配套的解答集,...
### 《Thinking in Java》第四版重要知识点概览 #### 第1章 对象入门 - **对象的概念**:介绍面向对象编程的基本概念,包括对象、类、实例等。 - **创建对象**:详解如何在Java中创建对象,包括使用`new`关键字。 -...
《Thinking in Java》是Bruce Eckel的经典Java编程教材,它以其深入浅出的讲解和丰富的实例赢得了广大程序员的赞誉。这个源码包包含了第4版的开发源码,旨在帮助读者更好地理解书中所阐述的概念和原理。以下是基于...
《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的权威指南。该书的第三版详细介绍了Java语言的核心概念和技术,对于初学者和有经验的开发者来说都是宝贵的资源。这里我们主要讨论两个文件:...
### 《Thinking in Java》核心知识点解析 #### 一、书籍概述 《Thinking in Java》是一本由布鲁斯·埃克尔(Bruce Eckel)编写的经典Java编程指南。本书首次出版于1998年,并迅速成为学习Java语言的最佳教程之一。...
- **类与对象**:书中源代码通常包含各种类的实现,展示了如何定义类、构造器,以及如何创建和使用对象。 - **方法重载与重写**:通过源码可以学习如何根据参数列表不同实现方法的重载,以及如何通过@Override注解...
《Thinking in Java 3rd Edition》是一本深受程序员喜爱的经典Java编程教材,由Bruce Eckel撰写。这本书以其深入浅出的讲解方式,详尽全面的内容覆盖,为学习者提供了掌握Java编程的坚实基础。第三版出版时,Java...
### Java入门理解构造器 #### 一、构造器的基本概念 在Java中,构造器(Constructor)是一种特殊的方法,主要用于初始化对象。构造器的名字必须与类名相同,并且没有返回类型,甚至连`void`也不可以有。构造器的...
### Thinking in Java 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...
总的来说,这份“Thinking-in-Java-4th-Edition习题答案”涵盖了Java编程的广泛领域,从基本语法到高级特性,从理论到实践,是提高Java技能的宝贵资源。通过解决这些习题,你不仅可以巩固所学知识,还能锻炼解决问题...
### Thinking in Java – 第四版解决方案指南知识点概览 #### 一、背景介绍 《Thinking in Java》(TiJ)是一本经典的Java编程语言学习教材,由Bruce Eckel撰写,首次出版于1998年,并随着Java的发展不断更新版本。...
5. **异常处理**:Java的异常处理机制是其强大之处,书中阐述了try-catch-finally语句块的使用,以及如何自定义异常。 6. **集合框架**:Java集合框架是存储和管理对象的重要工具,包括ArrayList、LinkedList、...
JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...
- 构造器用于初始化新创建的对象,书中详细讨论了默认构造器、带参数的构造器以及构造器的链。 - Java没有析构器,但有 finalize() 方法,用于资源清理。 3. 接口与抽象类: - 接口是完全抽象的类,只包含常量和...
《Thinking in Java》是Bruce Eckel的经典编程教材,第三版主要涵盖了Java编程语言的核心概念和技术。这本书深入浅出地介绍了面向对象编程的思想,是初学者和有经验的程序员理解Java的宝贵资源。以下是对该书内容的...
《Thinking in Java》是Bruce Eckel的经典之作,它是一本深度探索Java编程语言的书籍,深受全球程序员喜爱。这本书不仅适合初学者,也适合有一定经验的开发者深入理解Java的精髓。书中涵盖了Java语言的各个方面,从...
《Thinking in Java》是Bruce Eckel的经典Java编程教材,第3版在IT界广受好评。这本书深入浅出地介绍了Java语言的核心概念和技术,旨在帮助读者建立坚实的基础,并培养解决问题的思维方式。以下将从标题、描述、标签...