《Java程序员修炼之道》阅读笔记

第一章 初识Java7

1.1Java编译流程

《Java程序员修炼之道》阅读笔记_第1张图片
Paste_Image.png

从图中可以看出,Java既是编译性语言,也是解释性语言。编译型语言是值Java类变为class文件,实际上javac和c与c++的编译有区别,更多的是一种类文件生成工具。解释型语言是说转换后的.class文件需要被解释为可执行代码。动态编译时指可执行代码转换为机器码。所以从不同的角度看,Java属于不同的类型的语言。

1.2何为语法糖

语法糖是描述一种语言特性的短语,是一种语法冗余——已经存在同样的特性,但是却更加便捷。语法糖一般在编译的时候就会去掉。

1.3异常处理

1.3.1多异常处理

try{
}catch(FileNotFoundException|ParseException e){
}
主要用在异常归类处理上

1.3.2异常抛出

try{
}catch(final Exception e){
throw e;
}
主要用在对运行时异常不确定,但是又想捕获所有异常,且在抛出时不丢失原有异常信息的情况。例如运行时发生IOException,那么抛出的也就是IOExcepiton。

1.3.3 try-with-resources

try(){
}catch(Exception e){}
主要用在资源管理上,在try()代码块中声明资源性对象,然后不管是否发生异常,都会自动关闭。但是对声明的资源必须依赖AutoCloseable接口。Java自带接口基本都已经实现,一般在自己写的时候需要实现。

第二章 新NIO

1nio变迁

1.1-1.3 io;1.4-1.6nio;1.7-nio.2。Java7对io有了新的实现

第三章 依赖注入

1依赖注入和控制反转

是控制反转的一种形式。依赖注入(DI)技术可以让对象从别处得到依赖项,而不用自己创建,降低代码耦合度等。控制反转(IOc)是一种机制,而注入依赖是一种具体实现。IOC的实现方式有多种,包括工厂模式,服务器定位模式,依赖注入等。
控制反转是指把控制权交给别人,而业务代码只处理业务。例如依赖注入这种实现中,创建一类对象本来是自己的功能,但是通过依赖注入交给别人去创建,自己只处理核心业务。就是一种控制权的转让。

第四章 现代并发

4.1 synchronized

synchronized可以作用在代码块或者方法上,表明在执行这段代码的时候必须取得合适的锁。对于方法,要取得对象实例锁(静态方法取得类锁);代码块,由开发人员指定取得哪个对象的锁。

4.2Java同步的常识

1、只能锁定对象,不能锁定原始类型;
2、被锁定的对象数组中的单个对象不会被锁定;
3、同步方法可以视为包含整个方法代码块的同步;
4、静态同步方法会锁定他的Class对象,因为没有实例对象可以锁定;
5、如果要显示锁定一个类对象,请慎重考虑是显示锁定,还是用getClass,两种方式对子类的影响不一样;
6、内部类的同步是独立于外部类的;
7、synchronized不是方法签名,所以不能用来声明接口;
8、非同步方法不查看或关心任何锁的状态,而且在同步方法运行时人能继续运行;
9、Java的线程是可以重入的。

4.3到底同步什么?

被同步的是在不同线程表示被锁定对象的内存块,就是把表示锁定对象的内存卡进行同步。获取线程锁之后,被锁定对象的任何修改都是从主内存中读出来的,释放线程锁之前,所有的改动都写会主内存。所以锁定区域代码开始执行之前,持有锁的线程就和锁定对象内存中的视图同步了。

4.4 volatile

volitile修饰变量,每次修改都是从内存中读,然后在写会内存。线程安全,但是只有写入时不依赖当前状态的变量才应该声明为volatile变量,要关注当前状态的写入值,要使用线程锁保证绝对安全性。

总结

这本书看到了第四章,感觉啥都讲,但不讲透。定位一本教科书不对,定位为一本经验书,感觉也不对。可能真想序言里面写的那样,这本书的起点就是公司招人时培训用,提到一些规范等。感觉对我作用不大,只看到了前四章,后面的没有去看。

你可能感兴趣的:(《Java程序员修炼之道》阅读笔记)