《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 ...
随机推荐
- 浅谈MySQL集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- Arduino 开源库 u8glib2 之 图标显示【原创】
Arduino 开源库 u8glib2 研究之 图标显示 -----------------关于drawXBM drawXBMP函数使用的研究 因为心血来潮,近来想做一个 ...
- [国嵌攻略][045-046][一跃进入C大门]
[一跃进入C大门] 跳转方式 1.相对跳转:b或bl指令,通过计算两个地址之间的差值来给pc赋值相对跳转 2.绝对跳转:ldr指令,通过给pc直接赋值,完成绝对跳转 代码编写 1.在汇编代码中直接使用 ...
- ubuntu 下 apt /apt-get command not found 命令找不到
简介:apt 命令在ubuntu下找不到.(针对云平台,等可联网的ubuntu 如果是虚拟机,请确认能否联网 (如是虚拟机且不能联网请参考其他文章,大致方向是先挂载系统镜像再安装)) (ps:一般的 ...
- c++---天梯赛---N个数求和
★题目: ★难点:要求只能以有理数和分数去输出结果. ★分析:可以对输入的数据进行通分处理,随后把结果按格式输出. ★代码: #include<iostream> #include< ...
- mysql中的union和order by、limit
我有一个表 CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) N ...
- base64是啥原理
Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于4个Base64单元,即3个字节可表 ...
- DEDECMS中的几个常见的自定义常量DEDEMEMBER等位置
http://www.dede58.com/a/dedejq/3567.html dedecms新建栏目时默认都是允许投稿的,可以投稿本来对网站来说是件好事,但是dedecms是开源的,使用太广泛了, ...
- extends和implements的区别
extends表示继承 implements表示抽象类的接口
- struts2 从一个action跳转到另一个action的struts.xml文件的配置
解释: 想要用<result>跳转到另一个action,原来的配置代码是: <action name="insertDept" class="strut ...