读书笔记-《Java核心技术卷I-基础知识》
来源:互联网 发布:淘宝上买黄牛票犯法吗 编辑:程序博客网 时间:2024/05/05 08:28
构造定时器时,需要设置一个时间间隔,并告知定时器,当到达时间间隔时需要做什么操作。定时器需要知道调用哪一个方法,并要求传递的对象所属的类实现了java.awt.event包的ActionListener接口
例:
Class TimePrinter implements ActionListener{ public void actionPerformed(ActionEvent event ) { Date now = new Date(); System.out.println(now); }}ActionListener listener = new TimePrinter();Timer t=new Timer(1000,listener);t.start();
2.局部类final变量做计数器
使用一个长度是1的数组做计数
final int[] count =new int[1];for(int i=0;i<dates.length;i++) dates[i]=new Date() { public int compareTo(Date other) { counter[0]++; return super.compareTo(other); } };
3.抛出原始异常
在catch子句中可以抛出一个异常,这样做的目的是改变异常的类型。如需抛出高级异常,而不丢失原始异常的细节,可使用:
try{ access the database}catch(SqlException e){ Throwable se =new ServletException(“database error”); se.initCause(e); throw se;}
4.finally语句中异常的处理
finally中的语句可能出现异常时,建议独立使用try/catch 和try/finally语句块,这样可以提高代码的清晰度。例如:
InputStream in= …try{ try{ code that might throw exceptions }finally{ in.close(); }}catch(IOException e){ Show error dialog}
内层的try语句块只有一个职责,就是确保关闭输入流。外层的try语句块也只有一个职责,就是确保报告出现的错误。这种设计方式不仅清楚,而且还具有一个功能,就是将会报告finally中出现的错误。
5.断言
断言机制允许在测试期间向代码中插入一些检查语句。当代吗发布是,这些插入的检测语句将会被自动的移走
方式一:assert 条件 ;
方式二:assert 条件 : 表达式 ;
表达式的将被传入AssertionError的构造器,并转换成一个消息字符串。
6.泛型中变量的命名
在构造泛型时,类型变量使用大些形式,且比较短。在Java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值得类型。T(需要时还可以使用临近的字母U和S)表示“任意类型”
Java泛型在运行时存在一个类型擦除的过程,中间过程会将泛型擦除为Object类,因此,不能使用基本类型实例化类型参数。因此,没有Pair<double>,只有Pair<Double>
7.Iterator使用
Iterator接口的remove方法见会删除上次调用next方法时返回的元素。在大多数情况下,决定删除某个元素之前应该先看一下这个元素是很具有实际意义的。然而,如果想要删除指定位置上的元素,仍然需要约过这个元素。
例:删除字符串集合中第一个元素:
Iterator<String> it = c.iteraotr();it.next();it.remove();
8.Vector与ArrayList
对于一个经验丰富的Java程序员来说,在需要动态数组时,可能会使用Vector类。Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象,但是,如果由一个线程访问Vector,代码要在同步操作上耗费大量的时间。而ArrayList方法不是同步的,因此,建议在不需要同步时使用ArrayList,而不是Vector
9.线程中断异常处理
不要将InterruptedException异常抑制在很低的层次上,比如
void mySubTask(){ try{ sleep(delay);} catch(InterruptedException e){}}
这样会导致调用者无法检测或捕获这一异常。应使用以下两种方式
1) 在catch字句中调用Thread.currentThread().interrupt()来设置中断
Void mySubTask(){ try{ sleep(delay); }catch(InterruptedException e){ Thread.currentThread().interrupt(); }}
2) 更好的选择是,用throws InterrupterException标记你的方法
void mySubTask() throws InterrupterException{ sleep(delay);}
10.synchronized关键字
public synchronized voi method() { method body}
等价于
public void method(){ this.intrinsicLock.lock(); try{ method body }finally{ this.intrinsicLock.unlock(); }}
11.使用Object锁
public class Bank{ public void transfer(int from ,int to , int mount){ synchronized(lock){ accounts[from]-=amount; accounts[to]+=amount; } System.out.println(…); } private double[] account; private Object lock = new Object();}
12.Java类库中的集合
ArrayList 一种可以动态增长和缩减的索引序列
LinkedList 一种可以在任何位置进行高效的差如何删除操作的有序序列
ArrayDeque 一种用循环数组实现的双端队列
HashSet 一种没有重复元素的无序集合
TreeSet 一种有序集
EnumSet 一种包含枚举类型值的集
LinkedHashSet 一种可以记住元素插入次序的集
PriorityQueue 一种允许高效删除最小元素的集
HashMap 一种存储键值关联的数据结构
TreeMap 一种键值有序排列的映射表
EnumMap 一种键值属于枚举类型的映射表
LinkedHashMap 一种可以记住键值项添加次序的映射表
WeakHashMap 一种其值无用后可以被垃圾回收器回收的映射表
IdentityHashMap 一种用==,而不是用equals比较键值的映射表
- 读书笔记-《Java核心技术卷I-基础知识》
- 【笔记】Java核心技术 卷1 基础知识 第一章 读书笔记
- 《Java核心技术 卷I:基础知识(原书第8版)》勘误表
- Java核心技术卷I:基础知识(原书第8版):6.1 接口
- Java核心技术卷I:基础知识(原书第8版):6.5 代理
- Java核心技术卷I:基础知识(原书第8版):11.4 断言
- Java核心技术卷I:基础知识(原书第8版):13.4 算法
- Java核心技术卷I:基础知识(原书第8版):14.5 同步
- Java核心技术卷I:基础知识(原书第8版):14.10 同步器
- Java核心技术卷I基础知识-学习笔记(一)
- 读《JAVA 核心技术》卷I 基础知识(原书第10版)
- Java核心技术 ( 卷 I ) 读书笔记(第一~三章)
- Java核心技术(卷I)读书笔记 第四~六章
- Java核心技术(卷I)读书笔记 第七~九章
- Java核心技术(卷1):基础知识
- 《Java 核心技术卷一》读书笔记
- java 核心技术卷1读书笔记
- java核心技术卷一 读书笔记
- (七) Freemarker 发送邮件
- 使用C++实现OO观察者模式
- windows 2003 配置多个tomcat需注意的配置点
- 读书笔记-《Linux/Unix设计思想》
- Python网络爬虫(1)--url访问及参数设置
- 读书笔记-《Java核心技术卷I-基础知识》
- ORACLE中 %TYPE 和 %ROWTYPE 的使用
- Robot Framework 教程 (1) - 环境配置及简单网站兼容性测试
- mysql修改数据库表和表中的字段的编码格式的修改
- Robot Framework 教程 (2) - 页面元素定位
- Robot Framework 教程 (3) - Resource及关键字 的使用
- (八) Freemarker 总结
- Robot Framework 教程 (4) - 自定义Library
- Robot Framework 教程 (5) - 连接Oracel数据库