《Thinking in Java》学习笔记(五)
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》学习笔记(五)的更多相关文章
- 《CSS网站布局实录》学习笔记(一)
今天开始,认真学习前端技术,哈哈哈~~~加油~~~ 推荐这本<CSS网站布局实录>(第2版)给初级入门选手,虽然这本书年代有点久远,不过很经典. 注明一下:这里讲述的CSS均为CSS 2. ...
- 《CSS网站布局实录》学习笔记(六)
第六章 CSS高级应用与技巧 6.1 id与class 6.1.1 什么是id id是XHTML元素的一个属性,用于标识对象名称.无论是class还是id,都是XHTML所支持的公共属性,并且也是其核 ...
- 《CSS网站布局实录》学习笔记(四)
第四章 CSS网站元素设计 4.1 网站导航 网站导航是网站中最重要的元素.从形式上看,网站导航主要分横向导航.纵向导航.下拉及多级菜单导航灯3种常见形式. 横向导航:作为门户网站的设计而言,主导航一 ...
- 《CSS网站布局实录》学习笔记(三)
第三章 CSS网页布局与定位 3.1 div 几乎XHTML中的任何标签都可以用于浮动与定位,而div首当其冲.对于其他标签而言,往往有它自身存在的目的,而div元素存在的目的就是为了浮动与定位. 3 ...
- 《CSS网站布局实录》读书笔记
从Web标准.HTML标记.CSS语法基础介绍到实用技巧,事无巨细.实体书已不印刷,只能下载电子版 书的背景: 国内第一本web标准的CSS布局书,2006年9月第一版,作者李超. 环境背景: 当时主 ...
- 《css网站布局实录》(李超)——读书札记
1.web表现层技术 2.HTML链接设计思想 3.对信息进行合理的分析.分类与处理来创造商业价值. 4.头部描述浏览器所需信息,主体包含所需要展现的具体内容. 5.HTML(XHTML)XML 6. ...
- 《CSS网站布局实录》学习笔记(五)
第五章 CSS内容排版 5.1 文字排版 5.1.1 通栏排版 进行网页通栏排版时,只要直接将段落文字放置于p或者其他对象中,再对段落文字应用间距.行距.字号等样式控制,便形成了排版雏形. 5.1.2 ...
- 《CSS网站布局实录》学习笔记(二)
第二章 XHTML与CSS基础 2.1 XHTML基础 XHTML是网页代码的核心内容,标准XHTML代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- bzoj usaco 金组水题题解(2)
续.....TAT这回不到50题编辑器就崩了.. 这里塞40道吧= = bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 比较经典的最小割?..然而 ...
- hdu_1012(水题。。。不能再水)
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using ...
- [国嵌笔记][027][ARM协处理器访问指令]
协处理器作用 协处理器用于执行特定的处理任务,如数学协处理器可以执行控制数字处理,以减轻处理器的负担.ARM处理器最多可以支持16个协处理器,其中CP15是最重要的一个协处理器 CP15的作用 CP1 ...
- 如何把域名解析到网站空间IP上?
建立网站首要就是要有一个域名和网站空间,怎么把这两者联系在一起呢?这就要通过域名解析,把域名指向空间的IP,让我们能够通过域名访问网站空间.通过域名解析把我们容易记住的域名转化成IP地址,由DNS服务 ...
- PHP flock() 函数
定义和用法 flock() 函数锁定或释放文件. 若成功,则返回 true.若失败,则返回 false. 语法 flock(file,lock,block) 参数 描述 file 必需.规定要锁定或释 ...
- dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全
文章来源:小灰博客| 时间:2013-10-30 13:40:21| 作者:Leo | 1 条评论 文章分类:IT技术分享.PHP 标签: dedecms 今天偶尔发现给一篇dede下的长文章 ...
- ADO.NET复习总结(6)-断开式数据操作
一.基础知识 主要类及成员(和数据库无关的)(1)类DataSet:数据集,对应着库,属性Tables表示所有的表(2)类DataTable:数据表,对应着表,属性Rows表示所有的行(3)类Data ...
- Git学习(2)-使用Git 代码将本地文件提交到 GitHub
上次随笔写到git的安装和运用命令窗口创建本地版本库,这次主要讲一下用git代码将本地文件提交到GitHub上. 前提是有一个GitHub账号. 1.创建一个新的版本库,进入到你本地项目的根目录下(我 ...
- Angular 4 自定义组件封装遇见的一些事儿
你用Angular 吗? 一.介绍 说说封装Angular 组建过程中遇见的一些问题和感悟.用久了Angular,就会遇见很多坑,许多基于Angular开发的框架最喜欢做的事情就是封装组件,然后复用. ...
- vue学习笔记(二)——简单的介绍以及安装
学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html ...