1. Java异常补充

  a.使用try/catch捕获了异常之后,catch之后的代码是会正常运行的,认为即使进行了异常捕获,出现了异常就不往下执行,这是很多新手会犯的错误。

public class ExceptionTest {

    public static void main(String [ ] args) {
try{
throw new RuntimeException();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("still operate here!");
} }

  将输出:

  java.lang.RuntimeException
  still operate here!
     at exception.ExceptionTest.main(ExceptionTest.java:20)

  b.捕获多个异常时,一旦匹配将退出,因此捕获Exception时应该放到最后,否则连编译都通不过

public class ExceptionTest {

    public static void main(String [ ] args) {
try{
throw new RuntimeException();
}catch(Exception e){
e.printStackTrace();
}catch(RuntimeException e){
e.printStackTrace();
}
System.out.println("still operate here!");
} }  

  在catch(RuntimeException e){这一行会报错:

    unreachable block for RuntimeException.It is handled by the catch block for Exception。

  正确的顺序是先捕获RuntimeException,再尝试捕获Exception。

  c.告诉调用方法的调用者可能会抛出异常,可以在方法后面加上throws,然后在方法中thorw。这样别人再调用该方法时就必须处理该异常或者抛出该异常。

  下面是BufferedInputStream中的例子:

private byte[] getBufIfOpen() throws IOException {
byte[] buffer = buf;
if (buffer == null)
throw new IOException("Stream closed");
return buffer;
}

  需要注意的是,方法后面加上throws,方法内部不一定非要thorw。

  下面是InputStream中的例子:

 public int available() throws IOException {
return 0;
}

  d.捕获异常时,子类的异常也可以被父类的try/catch所捕获。

public class ExceptionTest {

    public static void main(String [ ] args) {
try{
throw new SubException();
}catch(MyException e){
e.printStackTrace();
}
} } class MyException extends Exception{} class SubException extends MyException{}  

  将会输出:

exception.SubException
   at exception.ExceptionTest.main(ExceptionTest.java:15)

  注意只能先捕获子类异常,再捕获父类异常。

  e.将检查时异常变为运行时异常

  如果调用的方法抛出了一个异常,我们在调用时就需要进行处理,如果不知道怎么处理,又不想catch之后什么都不做(这样是很不好的),可以向上抛出异常或者抛出运行时异常。  

public class ExceptionTest {

    public static void main(String [ ] args) throws IOException{
try{
InputStream is = new FileInputStream(new File("abc.txt"));
is.read();
}catch(IOException e){
//e.printStackTrace();
//throw e; //自己无法处理时向上抛出
throw new RuntimeException(e);
}
} }

  注意,如果方法内throw,则需要再次捕获或者方法上throws。

 2.格式化输出

  Java中的格式化输出需要使用到Formatter类,可以按照格式输出希望得到的结果。 

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter; public class SimpleFormat { public static void main(String [ ] args) throws FileNotFoundException {
float f = 5.54312f; System.out.format("[%5.3f]\n", f);
System.out.printf("[%5.3f]\n", f); Formatter forma = new Formatter();
System.out.println(forma.format("%-3s %3s %5.3f", "abcde","abcde",f));
//System.out.println(forma.format("%2$-5.2s %1$2s", "123", "456")); error Formatter forma2 = new Formatter(System.out);
forma2.format("%-3s %3s %5.3f\n", "abcde","abcde",f);
forma2.format("%2$-5.2s %1$2s\n", "123", "456"); Formatter forma3 = new Formatter(new File("abc.txt"));
forma3.format("%-3s %3s %5.3f", "abcde","abcde",f);
forma3.flush();
forma3.close();
} }

   输出为:

[5.543]
[5.543]
abcde abcde 5.543
abcde abcde 5.543
45    123

  从上面的代码可以看到,可以直接使用System.out.format或者System.out.printf直接在输出中完成格式化。

  更多地,我们使用Formatter类来完成格式化的工作,Formatter的构造函数可以是无参的,可以是一个PrintStream(例子中的System.out),或者File,或者是OutputStream。

  这里还需要注意的是格式化的参数,例如%5.3f表示,格式化的结果为:总长度为5,小数部分长度为3.

  %2$-5.2s, 2$表示取得是第二个参数,-5.2s表示左对齐,长度最小为5位,不足补空格,有效值为2位。

  还有常用的格式类就是SimpleDateFormat,常用来格式化时间、日期或者做一些时间、日期的计算。

  还需要注意,%5.3f中的f不是对应java的float类型,这里的f指的是小数,对应于java的float和double。里面例子中的float f = 5.54312f;可以用double f = 5.54312d;代替。

  d==》整数  f==》浮点型  s==》字符串   c==》unicode  b==》boolean  e==》浮点型 x==》十六进制整数  h==》十六进制散列码

《Thinking in Java》学习笔记(五)的更多相关文章

  1. 《CSS网站布局实录》学习笔记(一)

    今天开始,认真学习前端技术,哈哈哈~~~加油~~~ 推荐这本<CSS网站布局实录>(第2版)给初级入门选手,虽然这本书年代有点久远,不过很经典. 注明一下:这里讲述的CSS均为CSS 2. ...

  2. 《CSS网站布局实录》学习笔记(六)

    第六章 CSS高级应用与技巧 6.1 id与class 6.1.1 什么是id id是XHTML元素的一个属性,用于标识对象名称.无论是class还是id,都是XHTML所支持的公共属性,并且也是其核 ...

  3. 《CSS网站布局实录》学习笔记(四)

    第四章 CSS网站元素设计 4.1 网站导航 网站导航是网站中最重要的元素.从形式上看,网站导航主要分横向导航.纵向导航.下拉及多级菜单导航灯3种常见形式. 横向导航:作为门户网站的设计而言,主导航一 ...

  4. 《CSS网站布局实录》学习笔记(三)

    第三章 CSS网页布局与定位 3.1 div 几乎XHTML中的任何标签都可以用于浮动与定位,而div首当其冲.对于其他标签而言,往往有它自身存在的目的,而div元素存在的目的就是为了浮动与定位. 3 ...

  5. 《CSS网站布局实录》读书笔记

    从Web标准.HTML标记.CSS语法基础介绍到实用技巧,事无巨细.实体书已不印刷,只能下载电子版 书的背景: 国内第一本web标准的CSS布局书,2006年9月第一版,作者李超. 环境背景: 当时主 ...

  6. 《css网站布局实录》(李超)——读书札记

    1.web表现层技术 2.HTML链接设计思想 3.对信息进行合理的分析.分类与处理来创造商业价值. 4.头部描述浏览器所需信息,主体包含所需要展现的具体内容. 5.HTML(XHTML)XML 6. ...

  7. 《CSS网站布局实录》学习笔记(五)

    第五章 CSS内容排版 5.1 文字排版 5.1.1 通栏排版 进行网页通栏排版时,只要直接将段落文字放置于p或者其他对象中,再对段落文字应用间距.行距.字号等样式控制,便形成了排版雏形. 5.1.2 ...

  8. 《CSS网站布局实录》学习笔记(二)

    第二章 XHTML与CSS基础 2.1 XHTML基础 XHTML是网页代码的核心内容,标准XHTML代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  9. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  10. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. bzoj usaco 金组水题题解(2)

    续.....TAT这回不到50题编辑器就崩了.. 这里塞40道吧= = bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 比较经典的最小割?..然而 ...

  2. hdu_1012(水题。。。不能再水)

    #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using ...

  3. [国嵌笔记][027][ARM协处理器访问指令]

    协处理器作用 协处理器用于执行特定的处理任务,如数学协处理器可以执行控制数字处理,以减轻处理器的负担.ARM处理器最多可以支持16个协处理器,其中CP15是最重要的一个协处理器 CP15的作用 CP1 ...

  4. 如何把域名解析到网站空间IP上?

    建立网站首要就是要有一个域名和网站空间,怎么把这两者联系在一起呢?这就要通过域名解析,把域名指向空间的IP,让我们能够通过域名访问网站空间.通过域名解析把我们容易记住的域名转化成IP地址,由DNS服务 ...

  5. PHP flock() 函数

    定义和用法 flock() 函数锁定或释放文件. 若成功,则返回 true.若失败,则返回 false. 语法 flock(file,lock,block) 参数 描述 file 必需.规定要锁定或释 ...

  6. dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全

    文章来源:小灰博客| 时间:2013-10-30 13:40:21| 作者:Leo | 1 条评论 文章分类:IT技术分享.PHP     标签: dedecms 今天偶尔发现给一篇dede下的长文章 ...

  7. ADO.NET复习总结(6)-断开式数据操作

    一.基础知识 主要类及成员(和数据库无关的)(1)类DataSet:数据集,对应着库,属性Tables表示所有的表(2)类DataTable:数据表,对应着表,属性Rows表示所有的行(3)类Data ...

  8. Git学习(2)-使用Git 代码将本地文件提交到 GitHub

    上次随笔写到git的安装和运用命令窗口创建本地版本库,这次主要讲一下用git代码将本地文件提交到GitHub上. 前提是有一个GitHub账号. 1.创建一个新的版本库,进入到你本地项目的根目录下(我 ...

  9. Angular 4 自定义组件封装遇见的一些事儿

    你用Angular 吗? 一.介绍 说说封装Angular 组建过程中遇见的一些问题和感悟.用久了Angular,就会遇见很多坑,许多基于Angular开发的框架最喜欢做的事情就是封装组件,然后复用. ...

  10. vue学习笔记(二)——简单的介绍以及安装

    学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html ...