《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 ...
随机推荐
- Educational Codeforces Round 2_B. Queries about less or equal elements
B. Queries about less or equal elements time limit per test 2 seconds memory limit per test 256 mega ...
- UEP-标签
这里的标签都是常用不好理解的: formatfunc="showFormatNumer" 显示数字在页面上 ockedcolumnnum="6" 几列是不动的 ...
- ES6中export , export default , import模块系统总结
最近在学习使用Webpack3的时候发现,它已经可以在不使用babel的情况下使用ES6的模块加载功能了. 说到ES6的模块加载功能,我们先复习一下CommonJS规范吧: 一 . CommonJS ...
- 如何完成域名和ip地址的绑定
首先,我们要知道什么是域名绑定,所谓域名绑定就是是指已选定的域名与服务器主机的空间绑定,实在是在域名注册查询上设置或者WEB服务器上设置,使一个域名被指导向一特定空间,从而使访问者访问你的域名的时候就 ...
- PHP move_uploaded_file() 函数
PHP Filesystem 函数 定义和用法 move_uploaded_file() 函数将上传的文件移动到新位置. 若成功,则返回 true,否则返回 false. 语法 move_upload ...
- [转]另一种遍历Map的方式: Map.Entry 和 Map.entrySet()
转自: http://blog.csdn.net/mageshuai/article/details/3523116 今天看Think in java 的GUI这一章的时候,里面的TextArea这个 ...
- Python 3 生成手写体数字数据集
0.引言 平时上网干啥的基本上都会接触验证码,或者在机器学习学习过程中,大家或许会接触过手写体识别/验证码识别之类问题,会用到手写体的数据集: 自己尝试写了一个生成手写体图片的python程序,在此分 ...
- Schema与数据类型优化
良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询数据来设计schema,这往往需要权衡各种因素. MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要. 更小的通 ...
- 利用10h号中断在dos中间显示自己名字
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- linux_inode和block
linux里一切皆文件 什么是文件属性? 文件本身带有的信息, 包括:索引节点编号. 文件类型以及权限.硬链接个数(备份作用).所有者.所属组.文件大小.修改月.修改日.时分 151387 -rw-- ...