`

《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 中文高清PDF

    《Head First Java》是一本备受推崇的Java编程学习书籍,其中文高清PDF版本为学习者提供了方便快捷的阅读体验。这本书以其独特的教学风格和丰富的视觉元素,帮助初学者以直观易懂的方式理解复杂的Java概念。 Java是...

    《HEAD FIRST JAVA》笔记

    ### 《HEAD FIRST JAVA》笔记知识点总结 #### 第一章 进入Java的世界(基本概念) - **Java的工作原理与发展简史**: - Java是一种跨平台、面向对象的编程语言,由Sun Microsystems公司于1995年推出。它的设计...

    Head First Servlet & JSP

    总之,《Head First Servlet & JSP》是一本全面且易于理解的教程,无论你是Java Web新手还是准备认证考试,都能从中受益匪浅。通过阅读这本书,你可以熟练掌握Servlet和JSP的核心技术,为构建复杂的企业级Web应用...

    HeadFirst 设计模式学习笔记1--策略模式Demo

    《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...

    HeadFirst设计模式笔记

    《HeadFirst设计模式笔记》是深入理解软件设计思想的一份宝贵资料,主要涵盖了设计模式这一核心编程概念。设计模式是经过实践验证的解决方案模板,用于解决在软件开发中经常遇到的问题,尤其在面向对象设计中。这篇...

    Head First Servlets & JSP 学习笔记

    《Head First Servlets & JSP》是一本广受欢迎的教材,它深入浅出地讲解了这些概念,帮助开发者通过SCWCD(Sun Certified Web Component Developer)认证。以下是一些关键知识点的详细解释: 1. **Servlet**: - *...

    Java学习笔记.pdf

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

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    HeadFirst的设计模式系列书籍以其直观易懂的方式深受程序员喜爱,本笔记将深入探讨观察者模式的概念及其应用。 观察者模式的核心思想是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的...

    基于Java语言的《Head First 设计模式》学习笔记及实战练习源码

    本项目为《Head First 设计模式》的Java语言学习笔记与实战练习源码集合,包含104个文件,主要包括88个Java源文件、12个Markdown文档、3个XML配置文件及少量其他辅助文件。内容涵盖设计模式的学习笔记以及相应的代码...

    head_first_servlet&jsp学习笔记

    【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。

    【笔记】【Head_First_Java】1

    《Head First Java》读书笔记——ZhangHao 在学习Java编程时,了解并掌握基本概念、类与对象、原始主数据类型和引用是至关重要的。这篇笔记将深入探讨这些核心概念,帮助初学者建立坚实的Java编程基础。 一、基本...

    《Head First设计模式》读书笔记 -- (第一章)策略模式

    《Head First设计模式》是软件开发领域的一本经典著作,其深入浅出地介绍了23种设计模式。第一章主要讲解的是策略模式,这是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式的核心思想是定义一系列算法...

    Head First Servlet JSP(中文版)

    《Head First Servlet JSP(中文版)》是一本专为初学者设计的Java Web开发教程,旨在通过生动有趣的方式引导读者快速掌握Servlet和JSP的核心概念和技术。这本书以易理解的图文并茂的形式,深入浅出地讲解了这两个重要...

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

    《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,它以易懂且生动的方式介绍了23种经典设计模式。这些模式是软件工程中经过实践验证的最佳实践,旨在提高代码的可重用性、可读性和可维护性。下面,...

    Head Frist笔记.txt

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

    Head First 设计模式学习笔记(十四)模式的组合使用

    在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...

    Head First Python_ A Brain-Frie - Barry, Paul

    这种方法也被其他“Head First”系列书籍所采用,例如在其他书籍中提及的《Head First Java》,它通过将枯燥的理论知识与实际编程实践相结合,以图文并茂的方式使学习变得既有趣又充满挑战,从而激发学习者的兴趣和...

    java入门级学习笔记

    除了课程内容,阅读官方文档、经典教材如《Head First Java》、《Effective Java》等,以及观看开源项目和在线教程,可以帮助巩固理论知识,提升实践能力。 总之,Java学习笔记旨在为初学者提供全面的学习路径,从...

Global site tag (gtag.js) - Google Analytics