今天要分享的是关于 《Head First Java》
这本书的读后感,这本书有点小厚差很少有七百页左右,因此我花了几乎整个国庆的时间去阅读,学习。读完以后发现,受益颇多。正如书名所说的,它是一本重视大脑的学习指南。不管你是Java
开发工程师,仍是android
开发工程师,这本书都是良师益友。下面让咱们一块儿看看,我会以零碎的列表方式呈现,并以通俗的方式讲解那些你迷糊不清的细节?(细心的你恐怕已经发现了,这个系列的文章的前言都是一毛同样的,由于我不肯定你先点开的是第几篇,哈哈)java
[1]
将被序列化的对象写到文件中,而后就可让你的程序去文件中读取序列化的对象并把它们展开回到活生生的状态。序列化的文件时很难让通常人阅读的,但他比纯文本文件更容易让程序恢复会原来的状态,也比较安全,由于通常人不会知道如何动手动脚改数据。[2]
Stream
这类串流须要两两链接才能作出有意义的事情,一个是低层的串流,一个高层的串流,这样的设计是出于面向对象考虑,一个类只作好一件事。同时经过组合不一样的串流,又能够变化出不少花样。[3]
序列化的对象保存了实例变量的值,所以以后能够在堆上带回如出一辙的实例。比较叼的就是当对象被序列化时,被该对象引用的实例变量也会被序列化。且全部被引用的对象也会被序列化。。。。最棒的是,这些操做都是自动进行的![4]
若是要让类可以被序列化,就实现Serializable
。Serializable
接口又被称为marker
或tag
类的标记用接口,由于此接口并无任何方法须要实现的。若是某类事可序列化的,则它的子类也自动地能够序列化(接口的本意就是如此)。[5]
若是一个类中有引用到其余不可序列化的对象,那么这个类也是没法序列化的,切记!若是有变量不想被序列化的,则用transient
来修饰变量便可。那些变量主数据类型值会变成默认值,引用的变量会变成null
。[6]
若是有两个对象都有引用实例变量指向相同的对象对怎么样?例如两个Cat
都有相同的Owner
对象?那Owner
会被存储两次吗?答案:序列化聪明得足以分辨两个对象是否相同,在此状况下只有一个对象会被存储,其余引用会复原成指向改对象。[7]
FileInputStream
跟ObjectInputStream
组合使用的时候,若是os.close()
;的话FileInputStream
会自动跟着关掉![8]
被序列化的对象在解序列化的时候,它的构造函数是不会执行的!切记![9]
静态变量,它们会被序列化吗?答案:不会。要记得static
表明“每一个类一个”而不是“每一个对象一个”。当对象被还原时,静态变量会维持类中本来的样子,而不是存储时的样子,本身测试哈。[10]
关于File
有个颇有用的功能就是它提供一种比使用字符串文件名来表示文件更安全的方式。[11]
缓冲区的奥妙之处就在于使用缓冲区比没有使用缓冲区的效率更高。由于每趟磁盘操做都会比内存操做要花费跟多时间。经过BufferedWriter
和FileWriter
的连接,BufferedWriter
能够暂存一堆数据,而后到满的时候再实际写入磁盘,这样就能够减小对磁盘操做的次数,从而提升效率。[12]
若是想要强制缓冲区当即写入,只要调用writer.flush()
这个方法便可[13]
String
的split()
能够把字符串拆开成数组。[14]
每台服务器上都有65536
个端口,可是咱们本身在写测试socket
的时候,用的端口都要在1023
以后,由于0~1023
都已经被保留给已知的特定服务。[15]
Socket serverSocket = new Socket("127.0.0.1",5000)
这是创建服务器的Socket
链接写法。Socket sock = serverSocket.accept()
;当用户连上来的时,此方法会返回一个Socket
(在不一样的端口上)以便与客户端通讯。Socket
与ServerSocket
的端口不相同,所以ServerSocket
能够空出来等待其余的用户。[16]
当启动多线程的时候,咱们会以为同时在作好几件事情,其实只有真正的多处理器系统可以同时执行好几件事,因此其实多线程只是在执行空间里面很是地快速来回交换执行而已。[17]
Runnable threadJob = new MyRunnable()
;,该类就是你对线程要执行的任务的定义,也就是说此方法会在线程的执行空间运行。[18]
一旦线程执行.start()
;线程会进入可执行状态,它会在可执行与执行中两种状态中来来去去,同时也有另一种状态:暂时不可执行(又称为被堵塞状态)。[19]
当多个线程同时操做同一个对象的时候,容易发生数据错误的状况,解决方式就是同步化方法,synchronized
。当对象有一个或多个同步化的方法时,线程只有在取得对象锁的钥匙时才能进入同步化的方法。从而保护数据的安全。(不过代价就是损耗性能,须要本身权衡)同时注意死锁的状况。[20]
每一个Java
对象都有一个锁,每一个锁只有一把钥匙。类也有个锁,?[21]
高级java
类设计中,泛型
的使用是很是高明的,什么是泛型,只要你看到<>就是了,其实处处都是。以泛型的观点来讲,extend
表明extend
或implement
。哈哈,不看不知道哈[22]
数组的类型是在运行期间检查的,但集合的类型检查只会发生在编译期间,在多态赋值的时候,集合可没那么容易让你过哈,?[23]
远程过程调用的设计,要建立4种东西:服务器,客户端,服务器辅助设施和客户端辅助设施。其实真相就是两个辅助设施二者在负责通讯,客户端跟服务器只是把命令给他们,结果拿回来而已。android
大结局啦,?,其实这三篇文章是我看完以后,以为有必要从七百多页的书中提出去来的要点,也但愿对你们有帮助。咱们但是攻城狮,fight!数组