此书,新手读不合适,讲得不全面;有多年经验的也不合适,讲得浅。
下面做一下读书笔记
第一章 基本概念
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 设计模式学习笔记。更多内容请参见文章内容。
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...
Head First设计模式读书笔记-DesignPatterns
我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。
这是看了一本书叫做《head frist--HTML与css》之后,记录的笔记,希望对大家有用。(必须要写满50个字那我就开始水了,其实我也很菜,看我的这个说不定根本就莫得用,但是我就是为了赚积分想下载老师提供的参考代码...
声明数组变量,只有数组变量才能接受数组。创建大小为7的数组,赋值给变量 Pets[1]=new Dog();对象数组的操作不需要变量名称,数组索引就可以操作特
中文高清版 喜欢的下载吧,对于初学者很有用
再看第二本《java核心技术卷1-基础知识》,bruce eckel推荐的入门书籍。 第三本是《java核心技术卷2-高级特性》。 第四本是bruce eckel本人编写...第五本是《head first servlet &jsp》。 第六本是《head first ejb》。
设计模式Head First学习笔记,以及使用java编写的设计模式源码,Java原生sdk实现23种设计模式
我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。
我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。
java原始中的设计模式 Gof设计模式 一个Android应用程序,该应用程序演示了以下来源的GoF设计模式的源代码: E.Freeman,E.Freeman,K.Sierra,B.Bates的书:copyright:O'Reilly 2004 布莱恩·汉森(Bryan Hansen),...
小白入门书,大一时学Java无聊看的,讲的十分通俗易懂,Head First一系列的书都很赞,适合入门。后来也完成了这本书最后的Demo,并加上自己天马星空的想法(ง •_•)ง Java核心技术 卷1(第10版) 大一时入门Java看的...
Java练习 我的Java练习 演算法 Robert Lafore在读《 ...读凯西·塞拉(Kathy Sierra)的伯特·贝茨(Bert Bates)的《 Head First Java》一书时,我进行了练习。 Java 1 在Geekbrains.RU Java一级上进行教学的笔记,
学习笔记都在这里了 好好学习,天天向上!生命不息,阅读不止! ...Head First Java CSS3揭秘 Linux Command Line 大型网站技术架构核心原理与案例分析 锋利的jQuery JavaScript设计模式与开发实践
leetcode 答案 Ombre 整理学习笔记 core_python: python核心编程 data_structure: 数据结构和算法 lettcodeinpython: Leetcode答案 weekly: 每周练习 PythonInLinux: ...headfirst: headfirst java
First 设计模式、设计模式 可复用面向对象软件的基础,实现了 Gof 的 23 种设计模式。 内容包括三大原则(继承、封装、多态)、类图、设计原则。 数据库 :floppy_disk: 参考 数据库系统原理。 参考 SQL 必知必会。 ...
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: ...