读书笔记-《Java核心技术卷I-基础知识》
1.定时器Timer类
构造定时器时,需要设置一个时间间隔,并告知定时器,当到达时间间隔时需要做什么操作。定时器需要知道调用哪一个方法,并要求传递的对象所属的类实现了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-基础知识》的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践
20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...
- jQuery学习-显示与隐藏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- matplotlib 代码风格
当查看 matplotlib 官方文档和示例时,你会发现不同的编码风格和使用模式.这些风格是完全有效的,各有其优缺点. 几乎所有的例子都可以转换成另一种风格,以实现相同的结果.当然,需要注意的是不要把 ...
- 2734: [HNOI2012]集合选数
2734: [HNOI2012]集合选数 链接 分析: 转化一下题意. 1 3 9 27... 2 6 18 54... 4 12 36 108... 8 24 72 216... ... 写成这样的 ...
- Codeforces 1155 D Beautiful Array DP,最大子段和
题意 给出一个长度为\(n\)的数列和数字\(x\),经过最多一次操作将数列的一个子段的每个元素变为\(a[i]*x\),使该数列的最大子段和最大 分析 将这个数列分为3段考虑,第一段和第三段是未修改 ...
- USACO Section1.2
section1.1主要包括四道题和两个编程知识介绍.下面将对这6个部分内容进行学习. Your Ride Is Here 这道题没什么难度,读懂题目意思就行:把两个字符串按照题目要求转换成数字,然后 ...
- JS 四舍五入有小数点
后台传值 先整数化 var a = parseInt(10); var b = parseInt(3); var c = (a / b).toFixed(3)*100; 除之后进行小数点截取后三位再* ...
- springmvc框架开发常用的注解总结
1.@Controller使用:表示表现层中的JavaBean被spring容器管理. 2.@requestMapping使用: a) 在方法上: 标记url到请求方法的映射, 就相当于从一个ur ...
- PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)(转)
一.摘要 在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间, ...
- stl源码分析之hash table
本文主要分析g++ stl中哈希表的实现方法.stl中,除了以红黑树为底层存储结构的map和set,还有用哈希表实现的hash_map和hash_set.map和set的查询时间是对数级的,而hash ...