`

《Head First Java》读书笔记

    博客分类:
  • java
阅读更多

此书,新手读不合适,讲得不全面;有多年经验的也不合适,讲得浅。

下面做一下读书笔记

 

第一章 基本概念

Java是个强类型的语言

 

第二章 类与对象

面向对象帮助我们用更自然的方法设计;加入新功能时,不会搞乱已经写好的程序代码

对象--》堆区 Heap

方法--》方法区

临时变量--》栈区 Stack

存档的jar文件中,可以引入一个manifest文件,在其中指明哪个有启动应用程序的main方法

 

第三章 主数据类型与变量

boolean类型占内存大小由虚拟机决定

char占2个字节

float占4个字节

double占8个字节

float f = 32.5f 除非加上“f”,否则当做double处理

对于同一个java虚拟机,引用的大小都一样,但不同虚拟机,可能会以不同的方式来表示引用

数组也是对象

变量有两种:主数据类型与引用。引用变量的值代表对象在堆中的存取方法

 

第四章 方法操作实例变量

引用对象的变量所携带的是远程控制而不是对象本身

类定义对象的所知(实例变量)及所为(方法)

无需初始化实例变量,它会有默认值,如boolean的是false,int是0,对象是null

局部变量不有默认值,使用前必须初始化

 

第五章 编写程序

思考与编写测试用的程序,能够帮助你了解被测试程序的功能

 

第六章 认识Java的API

ArrayList,内部实现使用的是数组

包的作用:

一、将类以功能划分到相应的包中,起到组织作用

二、包可以制造出名称空间,不同包下,可以使用相同类名,由包名做区分

三、通过访问权限设置,使程序更安全

 

第七章 继承和多态

当你调用对象引用的方法时,会调用到与该类型最接近的方法,最低阶的会胜出,最低价的意思是层次树的最下方。比如父类有个test()方法,父类的父类也有一个test()方法,那么子类对象在使用test()方法时,调用的就是父类的,而不是爷爷类的。

引用类型可以是实际对象类型的父类,即可以用父类来声明对象

多用接口,少用实现,使代码更易扩展和灵活

override覆盖的要求:

一、参数必须要一样,且返回类型必须要兼容。子类必须声明返回相同的类型或者该类型的子类

二、不能降低方法的存储权限,存取权限必须相同,或者更开发

 

第八章 接口与抽象类

接口有很好的适用性,若你以接口取代具体的子类或抽象的父类作为参数或返回类型,则你就可以传入任何有实现该接口的东西,你就可以为不同的需求组合出不同的继承层次。不管你来自哪里,只要你实现这个接口,别人就知识你一定会履行这个合约。

参数为类,对象的类型必须来自同一继承树。但参数为接口,那么对象就比灵活,只要实现过该接口就可以。

super这个关键词可以让你在子类中调用父类的方法

 

第九章 构造器与垃圾收集器

当你调用一个方法时,该方法会被放在调用栈的栈顶。方法栈。

构造函数在赋值给引用变量执行,这代表可以在使用前介入做一些操作,比如实例变量赋值。

构造函数不能被继承。所以构造函数,不能用protected修饰。

如果你写了一个构造函数,则编译器不会创建默认的构造函数。

子类对象创建时,会先执行父类的构造函数,抽象的类也有构造函数。子类对象可能需要父类对象的东西,所以父类对象必须先创建。每个子类的构造函数会调用父类的构造函数,如此一直往上直到Object.

this可以来调用同一个类的另外一个构造函数。但super和this不能同时使用。this只能出现在第一行。

局部变量只会存在声明该变量的代码块中,但实例变量的寿命与对象相同。

只要对象的引用还活着,对象就会活着。如果对象的唯一引用死了,对象就会从堆中移除。垃圾处理器处理。所以尽量在里层(小)的范围内申明变量,这样能更快的被释放。

 

第十章 数字和静态

静态方法的产生原因:不依赖于实例变量,所以不需要创建对象。

static关键词,可以标记出不需要类实例的方法。静态的方法无法引用到该类的任何实例变量。

静态的方法也不能调用非静态的方法。

静态变量是共享的

同一个类的所有实例共享一份静态变量。静态变量会在该 类的任何对象创建之前就完成初始化。

一个被标记为final的变量,代表其初始化后就不能被改动。静态的final变量即常量,常量名称应该全部使用大字字母。

final的方法不能被覆盖,fianl的类不能被继承。

静态的方法,应该用类的名称来调用

 

第十一章 异常处理

finally块用来存放无论有没有异常都要执行的程序,通常做收尾工作。

 

第十四章 序列化和文件的输入/输出

序列化程序会将对象版图上的所有东西存储起来,包括实例变量引用对象。如果让类能够被序列化,就实现Serializable接口

如果某实例变量不能或不应该被序列化,就把它标记为transient的

反序列化过程

一、对象从stream中读出来

二、Java虚拟机通过存储的信息,判断对象的class类型

三、Java虚拟机尝试寻找和加载对象的类,找不到则抛出异常

四、新的对象会被配置在堆上,但不会执行构造函数

五、对象若有不可序列化的祖先类,则这个祖先类的构造函数会被执行

六、对象的实例变量被还原成序列时的状态值。

静态变量不会被序列化

使用ObjectOutputSteam来序列化对象,使用ObjectInputStream来实现反序列化。反序列化的readObject()方法返回的是Object对象,所以需要强转

File代表磁盘上的文件,但不代表文件的内容,可以把File当做文件的路径

对象必须实现Serializable接口才能被序列化。如果父类实现序列化,则子类就会自动的实现。

nio两项能力

一、直接控制buffer

二、非阻塞

serialVersionUID为版本识别ID,序列化与反序列化的serialVersionUID必须一致,否则反序列化会失败

 

第十五章 网络与线程

从设计角度看,使用线程比较好的方法是实现Runnable,而不是继承Thread。

Java中的每个线程都有独立的的执行空间。

同步化(synchronized)的方法会让你的程序因为要同步并行的问题面慢下来。换句话说,同步化会强制线程排队等着执行方法,同步化有可能造成死锁。

死锁会发生是因为两个线程互相持有对方正在等待的东西。

Java没有处理死锁的机制,甚至不会知道死锁的发生。

对象就算是有多个同步化的方法,也还是只有一个锁。一旦某个线程进入该对象的同步化方法,其它线程就无法进入该对象上任何同步化线程。

 

第十六章 集合和泛型

--只能传Animal对象

public void showAnimal(ArrayList<Animal> a)

--可传Animal的子类

public <T extends Animal> void showAnimal2(ArrayList<T> a)

public  void showAnimal3(ArrayList<? extends Animal> a)

equals(),hashCode()重写原因

当把对象加入HashSet中时,它会使用对象的HashCode与已加入对象的HashCode进行对比,如果相同,就再调用equals()方法是否相同。

因为hashCode()所使用的算法,可能会造成多个对象有相同的hashCode。越糟糕的算法,越容易碰撞。如果HashSet发现在比对的时候,同样的hashcode有多个对象,它会使用equals()来判断是否有完全的符合。也就是说,hashcode是用来缩小寻找成本,但最后equals()才能认定是否真的找到相同的项目。

TreeSet中的元素,要么实现了Comarable接口,要么取用Comparator参数的构造函数。因为要排序。

分享到:
评论

相关推荐

    HEAD FIRST JAVA学习笔记

    HEAD FIRST JAVA全书的学习笔记

    《HEAD FIRST JAVA》笔记

    《HEAD FIRST JAVA》第一次回顾和整理,给需要的朋友参考学习

    Head First 设计模式学习笔记

    Head First 设计模式学习笔记。更多内容请参见文章内容。

    《Hear First设计模式》阅读笔记

    1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...

    Head First设计模式读书笔记-DesignPatterns.zip

    Head First设计模式读书笔记-DesignPatterns

    Java学习笔记.pdf

    我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。

    Head Frist笔记.txt

    这是看了一本书叫做《head frist--HTML与css》之后,记录的笔记,希望对大家有用。(必须要写满50个字那我就开始水了,其实我也很菜,看我的这个说不定根本就莫得用,但是我就是为了赚积分想下载老师提供的参考代码...

    【笔记】【Head_First_Java】1

    声明数组变量,只有数组变量才能接受数组。创建大小为7的数组,赋值给变量 Pets[1]=new Dog();对象数组的操作不需要变量名称,数组索引就可以操作特

    Head first java

    中文高清版 喜欢的下载吧,对于初学者很有用

    java jdk7 学习笔记

    再看第二本《java核心技术卷1-基础知识》,bruce eckel推荐的入门书籍。 第三本是《java核心技术卷2-高级特性》。 第四本是bruce eckel本人编写...第五本是《head first servlet &jsp》。 第六本是《head first ejb》。

    设计模式笔记及其源代码(java版)

    设计模式Head First学习笔记,以及使用java编写的设计模式源码,Java原生sdk实现23种设计模式

    Tomcat安装、配置和部署笔记 - 辛伯达 - 博客园.pdf

    我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。

    windows10上安装mysql详细图文教程.pdf

    我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。

    java源码中的设计模式-gof_design_patterns:“HeadFirst设计模式”,Pluralsight“Java设计模式”,

    java原始中的设计模式 Gof设计模式 一个Android应用程序,该应用程序演示了以下来源的GoF设计模式的源代码: E.Freeman,E.Freeman,K.Sierra,B.Bates的书:copyright:O'Reilly 2004 布莱恩·汉森(Bryan Hansen),...

    高级java笔试题-reading-notes:做阅读笔记和练习

    小白入门书,大一时学Java无聊看的,讲的十分通俗易懂,Head First一系列的书都很赞,适合入门。后来也完成了这本书最后的Demo,并加上自己天马星空的想法(ง •_•)ง Java核心技术 卷1(第10版) 大一时入门Java看的...

    JavaExercises:我在JavaCore上的练习

    Java练习 我的Java练习 演算法 Robert Lafore在读《 ...读凯西·塞拉(Kathy Sierra)的伯特·贝茨(Bert Bates)的《 Head First Java》一书时,我进行了练习。 Java 1 在Geekbrains.RU Java一级上进行教学的笔记,

    Reading-Notes:读书笔记们

    学习笔记都在这里了 好好学习,天天向上!生命不息,阅读不止! ...Head First Java CSS3揭秘 Linux Command Line 大型网站技术架构核心原理与案例分析 锋利的jQuery JavaScript设计模式与开发实践

    leetcode答案-Ombre:java,python学习记录整理

    leetcode 答案 Ombre 整理学习笔记 core_python: python核心编程 data_structure: 数据结构和算法 lettcodeinpython: Leetcode答案 weekly: 每周练习 PythonInLinux: ...headfirst: headfirst java

    高级java笔试题-Notebook:记录日常学习知识的笔记本

    First 设计模式、设计模式 可复用面向对象软件的基础,实现了 Gof 的 23 种设计模式。 内容包括三大原则(继承、封装、多态)、类图、设计原则。 数据库 :floppy_disk: 参考 数据库系统原理。 参考 SQL 必知必会。 ...

    LotusDomino学习笔记(400页涵盖代理和公式使用)

    54. Displays the contents of the Subject field in the first document in theExamples view. 124 55. Example: GetLastDocument method 125 56. Examples: GetNextDocument method 125 57. Example: ...

Global site tag (gtag.js) - Google Analytics