`
zy19982004
  • 浏览: 661858 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251950
社区版块
存档分类
最新评论

Java异常学习四:Thinking In Java and Effective Java关于异常的一些描述

 
阅读更多

一.Thinking In Java

  1. 发现错误的最佳时期是编译期间,然而编译期间并不能找出所有数据,余下的问题必须在运行期间解决。
  2. switch case语句里如果throw Exception的话是不需要break的。
  3. 异常处理理论上有两种基本模型。终止模型,java和c++支持的模型,将假设错误非常关键,一旦异常被抛出,就表明错误已经无法挽回,也不能继续执行;恢复模型,遇到错误不能抛出异常,而是调用方法来修正错误。
  4. 尽量不要捕获RuntimeException,但还是可以在代码中抛出RuntimeException类型的异常。
  5. 如果一个方法只申明了异常,但并没有在方法体抛出任何异常,调用此方法的方法是没有异常可以捕获的。
  6. 丢失异常:1.不使用异常链;2.从finally语句返回。
    package com.jyz.study.jdk.exception;
    
    import java.io.IOException;
    
    /**
     * 丢失异常
     * @author JoyoungZhang@gmail.com
     *
     */
    public class LostException {
    	
    	public static void test1() {
    		try{
    			throw new IOException();
    		}finally{
    			return;
    		}
    	}
    	
    	public static void test2() throws IOException {
    		try{
    			throw new IOException();
    		}finally{
    			System.out.println(1);
    		}
    	}
    	
    	public static void main(String[] args) {
    		test1();
    		try {
    			test2();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    
    
    控制台:
    1
    java.io.IOException
    	at com.jyz.study.jdk.exception.LostException.test2(LostException.java:22)
    	at com.jyz.study.jdk.exception.LostException.main(LostException.java:31)
     
  7. 异常的限制:1.父类异常大于等于子类异常,子类要么不抛,要么抛出父类异常或父类异常的子异常。2.如果一个对象声明为父类引用时,调用此对象的方法,抛出父类里声明的异常;如果一个对象声明为是自己引用时,调用此对象的方法,当然抛出自己声明的异常,跟父类无关。3.异常声明不是方法签名的一部分,方法签名由方法名字和参数个数及类型组成,所以异常声明不能作为重载的判断标准。4.构造器可以抛出任何异常,而不必理会父类构造器抛了什么异常。
  8. 在创建需要清理的对象之后,立即进入try-finally块清理此对象。
  9. 异常匹配顺序:找出最近的异常;子类的对象也可以匹配其父类的处理程序。找到匹配的后,不再继续查找。
  10. 异常的重要准则是只有在你知道如何处理的情况下才捕获异常。重要目标是把错误处理的代码同错误发生的地点相分离。举个列子service-dao两层,在dao里产生了SQLException我无需处理直接抛出,到了service层,我知道要将其转换成自己的业务异常。

二.Effective Java 

  1. 基于异常的模式:用try catch然后忽略异常的手段来达到你想要的目的。
  2. 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流。对此我不赞同。、
  3. 对可恢复的情况使用受检异常,对编程错误使用运行时异常。何为可恢复的情况,是指不改变代码的基础上,这个异常情况是可以恢复的,比喻IOExcepion可能是网络的问题,解决了网络,代码就能继续运行下去了;何为错误,当然指不能恢复的啦,比喻从你控制范围之外传递进来的null引用,所以,此类异常都是程序员的问题,作为程序员,应该在代码中进行必要的检查。
  4. 异常类越少,意味着内存印迹就越小,装载这些类的时间开销也越少。
  5. 异常转译:高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。异常链就是一种特殊的异常转译形式,高层异常可以通过getCause来获得低层的异常。
  6. 异常的细节信息应该包含所有的对该异常有贡献的参数和域的值。比喻IndexOutOfBoundsException应该包含lowerBound,upperBound,Index三个参数。遗憾的是Java平台里并没有广泛的使用这种做法,而是全部清一色的简单继承了下父Exception。
  7. 失败原子性:失败的方法调用应该使对象保持在调用前的状态。如果没有size==0的判断,可能导致size域同之前的不一致。
    	public Object pop(){
    	    if(size == 0){
    		throw new EmptyStackException();
    	    }
    	    Object result = elements[--size];
    	    //...
    	}
     

二.try catch finally break continue return 

    准则 

  1. finally一般情况总会执行,无论在try块里return break continue。除了调用System.exit(0)方法,该方法终止java虚拟机进程。
  2. try块里return之前,finally会被执行。
  3. return语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return的是引用类型的,改动将可以起效果。执行顺序:将要return时调用jsr指令----->finally代码块,finally代码块最后执行ret指令----->继续return。
  4. finally里的return语句会把try块里的return语句效果给覆盖掉。finally语句里的return,break,continues,抛出异常,finally子句结尾处的ret指令永远不会执行,不会在去调用finally的地方了。

      我们需要做的是

  1. 最好把return放到方法尾而不要在try里return。
  2. 如果非要的话:不要在try块和finally块里都包含return;如果在try块里return, 则不要在finally块里操作被return的变量。

 

 

1
0
分享到:
评论

相关推荐

    Java学习网站大全

    - **《Thinking in Java》**:深入理解Java的经典之作。 - **《Head First Java》**:适合初学者的趣味教材。 - **《Effective Java》**:提升Java编程水平的必读之书。 "Java学习网站大全.txt"很可能包含了上述...

    5本java学习用书

    3. **《Thinking in Java》**:Bruce Eckel的这部巨著深入细致地介绍了Java语言,不仅涵盖基础,还涉及高级特性如多线程、网络编程、反射等。它的特点是理论与实践相结合,通过大量的实例来阐述概念,是提升Java技能...

    10来本java学习书籍

    标题中的"10来本java学习书籍"表明这是一个关于Java编程语言的学习资源集合,而描述中的重复信息似乎是为了强调书籍的数量。从标签中我们可以看出,这些书籍不仅涵盖了Java语言的基础和进阶,还涉及到"算法"这一核心...

    Java学习推荐书(包含各类java入门)

    1. 《Thinking in Java》:入门第一位是建立正确的概念。这本书提供了 Java 的基本概念和编程思想,是 Java 初学者的必读书籍。 2. 《Core Java》:这本书更贴近实践,提供了更多的 API 介绍,更新也更频繁。它可以...

    java领域四大名著

    - **书名及版本**:《Thinking in Java》(第四版) - **主要内容**: - 本书是学习Java语言的一本经典之作,涵盖了Java语言的核心概念和技术细节。 - 内容包括但不限于面向对象编程的基础、泛型、集合框架、多...

    java chm 帮助文档下载地址以及一些好的网址

    6. **Java编程书籍**:经典的Java教程书籍,如《Head First Java》、《Thinking in Java》、《Effective Java》等,也提供了丰富的学习材料。虽然不是电子文档,但它们深入浅出的讲解方式对初学者尤其有益。 7. **...

    Java学习合集(绝对超值)

    1. **《Thinking in Java》**:Bruce Eckel的经典之作,深入浅出地介绍了Java编程思想。 2. **《Effective Java》**:Joshua Bloch的书籍,提供了许多实用的编程建议和最佳实践。 3. **《Head First Java》**:...

    java 初学者 必看的一些资料 清单

    以下是一些关于Java初学者必须了解的知识点,这些知识点涵盖了从基础到进阶的各个阶段,帮助你构建坚实的学习路径。 一、Java基础 1. **语法结构**:Java的基础包括变量、数据类型、运算符、控制流程(如if-else,...

    Java学习资料&项目源码&教程资源

    - **《Java 编程思想》(Thinking in Java)**:这是一本深入讲解Java编程语言及其设计思想的书籍,对于想要理解Java内部工作原理的读者来说是一本不可多得的好书。 ##### 在线课程 - **Coursera: Java ...

    Java学习必备的书籍和网站列表

    1. **《Thinking in Java》** (作者:Bruce Eckel):这本书以其深入浅出的面向对象编程讲解而闻名,提供了大量示例代码来解释概念,适合初学者和有经验的开发者。 Bruce Eckel的实用视角和多语言背景为Java开发者...

    java初学者应该阅读的书籍

    ### 第三本书:《Thinking in Java》(《Java编程思想》) #### 知识点概述 - **面向对象思想**:深入讲解面向对象的核心思想,如抽象、封装等。 - **泛型与集合**:掌握泛型的使用技巧,了解集合框架的设计理念。 ...

    java编程教程代码学习

    - **书籍**:《Effective Java》、《Thinking in Java》和《Java核心技术卷I & II》等。 - **实践项目**:通过GitHub上的开源项目或个人项目来实践所学知识。 ### BBCode详解 #### BBCode定义 BBCode(Bulletin ...

    JAVA学习总结与JAVA书籍网站推荐.docx

    - `Concurrent Programming in Java: Design Principles and Patterns` 由Doug Lea撰写,是并发编程的经典之作,有第二版。 - `Refactoring` 由Martin Fowler等人合著,讨论了代码重构的重要性和方法。 - `Design...

    c++熟手如何学习Java.pdf

    - **书籍**:《Thinking in Java》是一本经典的Java入门书籍;《Effective Java》深入介绍了编写高质量Java代码的最佳实践。 - **在线教程**:如Oracle官方提供的Java教程、W3Schools网站上的Java教程等。 - **实战...

    java学习书籍

    以下是一些推荐的Java学习书籍及其涵盖的关键知识点: 1. **孙卫琴《java 面向对象编程》**:这本书是针对Java初学者的入门读物,它深入浅出地介绍了Java的基本语法和面向对象编程的概念。面向对象编程是Java的核心...

    java的概要介绍与分析

    2. **书籍** - 有很多经典的 Java 学习书籍,如《Effective Java》(Joshua Bloch 著),《Thinking in Java》(Bruce Eckel 著),《Java Concurrency in Practice》(Brian Goetz 等著),这些书籍不仅覆盖了基础...

    Thinking in Java

    Thinking in Java,这本东东说得蛮深入的。哈哈,不过感觉effectvie Java更好些,当然这不同层次了,Thinking in Java是初入者,effective Java是进阶了

    Java学习必须看的书籍

    #### 九、《稳健的Java:异常处理、测试和调试》(Robust Java: Exception Handling, Testing, and Debugging) Stephen Stelting编著的《稳健的Java:异常处理、测试和调试》专注于Java中的异常处理、单元测试和...

    学习好java必须要看的几本书

    以下是一些推荐的书籍,对于学习和提升Java技能有着极大的帮助。 1. 《Java核心技术卷》(Core Java Volume I - Fundamentals)与《Java核心技术卷II》(Core Java Volume II - Advanced Features):由Cay S. ...

Global site tag (gtag.js) - Google Analytics