《head first java 》读书笔记
Updated 2014/03/26 P300-P402
Updated 2014/03/25 P213-300
Updated 2014/03/20 P0-P213
对象本身已知的事物被称为: 实例变量(instance variable)
对象可以执行的动作称为: 方法(methods)
类不是对象,却是用来创建它们的模型。
3.Primitive主数据类型和引用--------------认识变量
Primitive主数据类型有8种:
Boolean, char, byte, short, int, long, float, double
数组也是对象
Dog dog = new Dog() 1)声明引用变量 2)堆上创建对象 3)将引用变量指向对象
Java值传递,拷贝传递
无需初始实例变量,因为它们会有默认值。数字的primitive(包括char)预设为0,boolean的预设为false,而对象引用则为Null
局部变量(声明在方法中)没有默认值!如果在变量被初始前就使用,编译器会报错
使用 == 来比较两个primitive主数据类型,或者判断两个引用是否引用同一个对象。
使用equals()来判断两个对象是否在意义上相等(如两个String对象是否带有相同字节组合)
运用多态时,引用类型可以是实际对象类型的父类。 Animal dog = new Dog();
问:你能够继承任何一个类吗?就像类的成员一样如果类是私有的你能不能继承?
答:内部类我们还没有介绍到。除了内部类之外,并没有私有类这样的概念。但是有三种方法可以防止某个类被作出子类。
第一种是存取控制。就算类不能标记为私有,但它还是可以不标记共有。非共有的类只能被同一个包的类作出子类。
第二种是使用final修饰符。表示它是继承树的末端,不能被继承。
第三种是让类只拥有private的构造程序
问:可不可以只用final去标识方法而不使用整个类。
答:如果你想要防止特定的方法被覆盖,可以将该方法标识上final这个修饰符。将整个类标识成final表示没有任何的方法可以被覆盖。
覆盖方法:
1) 参数必须要一样,且返回类型必须要兼容
2) 不能降低方法的存取权限。
重载的意义是两个方法的名称相同,但参数不同。它与继承或多态无关。
1) 返回类型可以不同
2) 不能只改变返回类型,参数需要不同
3) 可以更改存取权限
8 接口与抽象类 深入多态
抽象类:类前加abstract。 能够防止这个类被初始化,只有其子类可以被初始化
抽象的类代表此类必须要被extend过,抽象的方法代表此方法一定要被覆盖过。抽象的方法没有实体。 E.g. public abstract void eat();
如果你声明出一个抽象的方法,就必须将类也标记为抽象的。抽象类可以同时带有抽象和非抽象的方法。 继承下来的具体类必须实现其抽象父类的所有抽象方法。
Updated 2014/03/25 P213-300
编译器是根据引用类型来判断有哪些method可以调用,而不是根据Object确实的类型
接口可以用来解决多重继承的问题却又不会产生致命方块这种问题
Java的接口就好像是100%的纯抽象类。
接口的定义: public interface Pet {…..}
接口的实现: public class Dog extends Canine implements Pet {…}
要如何判断应该是设计类、子类、抽象类或接口呢?
如果新的类无法对其他的类通过IS-A测试时,就设计不继承其他类的类。
只有在需要某类的特殊化版本时,以覆盖或增加新的方法来继承现有的类。
当你需要定义一群子类的模板,又不想让程序员初始化此模板时,设计出抽象的类给它们用。
如果想要定义出类可以扮演的角色,使用接口。
栈存方法调用和局部变量。
堆存所有的对象。
如果局部变量是个对对象的引用,只有变量本身会放在栈上,对象本身只会存在于堆上。
super()必须放在构造函数的第一句。
使用this()来从某个函数调用同一个类的另外一个构造函数。
this()只能用在构造函数中,且必须是第一行语句。
super()与this()不能兼得
静态变量:被同类的所有实例共享的变量
静态方法:不需要对对象进行实例化,直接通过类名.方法名调用。静态方法中不能调用非静态成员和方法。
静态变量会在该类的任何对象创建之前就完成初始化;静态变量会在该类的任何静态方法执行之前就初始化
final的变量代表你不能改变它的值,final的method代表你不能覆盖掉该method,final的类代表你不能继承该类(也就是创建它的子类)
如果类只有静态的方法,你可以将构造函数标记为private的以避免被初始化(如Math类)。
在java中的常量是把变量同时标记为static和final的。
Final的静态变量必须在声明或静态初始化程序中赋值。E.g.:
static{
DOG_CODE = 420;
}
autoboxing:不必把primitive主数据类型与对象分得那么清楚.
可以把int类型的放入ArrayList<Integer>里,把boolean类型的放入ArrayList<Boolean>里,把char类型的放入ArrayList<Character>中
autoboxing不只是包装与解开primitive主数据类型给collection用而已,它还可以让你在各种地方交换地运用primitive主数据类型与它的包装类型。(P291)
1.方法的参数 2.返回值 3.boolean表达式 4.数值运算 5.赋值
Interger.parseInt(string) Double.parseDouble(string)
要取得当前的日期时间就用Date,其余功能可以从Calendar上面找。Calendar抽象类
Calendar cal = Calendar.getInstance();
Format() 格式化参数 %[argument number][flags][width][.precision]type
%符号: 把参数放在这里,若在%后加上,数字将以逗号分隔开,如476,578.10234
[argument number]: 如果要格式化的参数超过一个以上,可以在这里规定是哪一个。
[flags]: 特定类型的特定选项,例如数字里加逗号或正负号
[width]: 宽度,最小的字符数,不足补齐,可超过此宽度
[.precision]: 精确度
Type: 一定要指定的类型标识
Updated 2014/03/26 P300-P402
不是由编译器检查的RuntimeException的子类,被称为检查异常。编译器的检查异常和运行期间的异常都可以被捕获到
异常处理规则
1) catch与finally不能没有try.
2) try与catch之间不能有程序。
3) try一定要有catch或finally。
4) 只带有finally的try必须要声明异常。
Void go() throws FooException{
Try{
x.doStuff();
}finally{ }
}
5)如果try或catch块有return 指令,finally 还是会执行!流程会跳到finally然后再回到return 指令
Graphics2D引用上可以做的事情比Graphics对象更多。
PaintComponent(Graphics g){} 由g参数所引用的对象实际上是个Graphics2D的实例。
创建GUI四个步骤:
1) 创建Window(JFrame) JFrame frame = new JFrame();
2) 创建组件 JButton button = new JButton(“click me”);
3) 把组件加到frame上 frame.getContentPane().add(BorderLayout.EAST,button);
4) 显示出来 frame.setSize(300,300); frame.setVisible(true);
内部类可以使用外部所有的方法和变量
可以直接从外部类程序代码中初始化内部的类,也可以从外部类以外的程序代码来初始内部实例。
Class Foo{
Public static void main(String[] args){
MyOuter outerObj = new MyOuter();
MyOuter.MyInner innerObj = outObj.new MyInner();
}
}
《head first java 》读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- JAVA之经典Student问题1
通过“三目运算符”求最大值与最小值. class student { //定义学生编号 private String stu; //学生姓名 private String name; //学生书信成绩 ...
- javascript函数没有重载测试
今天继续学习javascript系列教程,虽然是基础,但我觉得还是有必要用心来学习的,不要怕难,不用怕忘记,不要怕学不会.哪个高手不是从零开始的,我要坚定自己的学习信心,并且认真的走下去.虽然路途艰辛 ...
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
- 关于web请求中 获取真实IP
HttpRequest request = HttpContext.Current.Request; if (!string.IsNullOrEmpty(request.ServerVariables ...
- Hibernate 拥有 Mybits 的SQL/HQL特性 (注解、XML两不误)
第一次写博客.文章有点渣,喜欢就看看,不喜欢路过点个赞. 效果:直接一条语句多种用法 FROM User A WHERE 1=1 <#if id??&g ...
- Codevs 5126 推销员 2015年NOIP全国联赛普及组
5126 推销员 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死 ...
- What are Upgrade, Product and Package Codes used for? By pusu
Following content is reprinted from here, please go to the original website for more information. Au ...
- Windows内存管理[转]
本文主要内容:1.基本概念:物理内存.虚拟内存:物理地址.虚拟地址.逻辑地址:页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理 一.基本概念1. 两个内存概念物理内存 ...
- grails导入excel
grails导入excel,意思是说从excel表中读取多条数据,批量写入数据库. 有2种方案,1是使用grails的excel插件,2是调用java代码使用POI等第三方java控件. 今天比较累, ...
- AngularJS(6)-选择框Select
1.在 AngularJS 中我们可以使用 ng-option 指令来创建一个下拉列表,列表项通过对象和数组循环输出 <!DOCTYPE html> <html lang=" ...