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-基础知识》的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. 《Java 程序设计》实验报告汇总

    <Java 程序设计>实验报告汇总 20145207<Java程序设计>实验一 (Java开发环境的熟悉)实验报告 20145207<Java程序设计>实验二 (J ...

  2. iOS开发-通过正则表达式进行各种判断银行卡,车牌号,邮箱地址,QQ,身份证,全字母,仅输入字母或数字同时包含大小写字母和数字,仅能输入中文等

    /* *  验证银行卡号是否正确 *  车牌号验证 *  检验邮箱地址是否正确 *  手机号中间四位密文显示 *  判断QQ号是否正确(5-11位) *  判断身份证号是否正确(如末位为字母请用“x” ...

  3. python之shutil模块详解

    shutil模块 -- --High-level file operations  高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如 ...

  4. CSS快速入门-箭头和图标

    一.三步搞懂箭头产生的原理 在前面的盒子模型一文中,我们已经知道了一个元素空间占位.为了弄明白箭头的产生,我们可以三步走: #demo12 { border: 100px solid; border- ...

  5. 【原创】标准HTTP请求工具类

    以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...

  6. JavaScript判断对象是否是NULL(转)

    写js经常会遇到非空判断,看了你不就像风一样的文章 自己没有做总结,特地转载.很有帮助 function isEmpty(obj) { // 检验 undefined 和 null if (!obj ...

  7. FICO(费埃哲)评分系统有什么优缺点?在国内的发展怎么样?

    权威回答: FICO的优点很明显: 在美国数据库较全面.一般存储有最近7-10年的个人信用记录,包括银行信用.商业信用甚至保险等. 客观性.计算机自动完成评估工作,克服人为操作的失误. 快捷性.出结果 ...

  8. Python图形界面开发—wxPython库的布局管理及页面切换

    前言 wxPython是基于Python的跨平台GUI扩展库,对wxWidgets( C++ 编写)封装实现.GUI程序的开发中界面布局是很重要的一个部分,合理的页面布局能够给予用户良好使用体验.虽然 ...

  9. JS中判断对象是不是数组的方法

    JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Arra ...

  10. 记事本APP之Alpha报告

    项目名称 记事本APP 项目版本 Alpha版本 负责人 北京航空航天大学计算机学院 Echo软件团队 联系方式 http://www.cnblogs.com/echo-buaa/ 要求发布日期 20 ...