1.14 HeadFirstJava 前六章读书笔记总结
前六章介绍了一些java基础的概念,有c/c++基础的话就但觉很简单
读书笔记:
0
0.1 序
学习的方法: 形成深入的
· 可视化 · 深入思考 ·情绪深入
1 基本概念
1.1 工作方式
源代码 -》 编译器 -》 输出 -》 虚拟机
· 虚拟机(JVM)指可以读取并执行字节码的虚拟Java机器
1.2 java简史
Java 1.02 : 250个类 ,bug很多 ,applet是重点
Java 1.1 : 500个类,功能更强,适用于图形化界面
Java2(1.2-1.4): 2300个类,可达到平台原始速度,可书写企业级应用程序 ,有3个版本:J2ME ,J2SE ,J2EE
Java5.0 : 3500个类 ,更加容易开发,语言本身有重大优化
· java1.02称为java1 ,java1.2,1.3, 1.4 称之为java2 ,java1.5称之为java5(或 Tiger)
1.3 java程序结构
如图 ,类存在于源文件之中 ,方法存在于类之中 ,语句存在于方法之中
· 源文件 (.java文件):带有类的定义,类表示程序的组件,类的内容必须在花括号( { } )里面
. 类 :带有一或多个方法,方法必须在类内声明
· 方法 :一组指令的集合,可以看做一个函数或者一个过程
1.4 带有main( ) 的类
·虚拟机运行时会寻找命令列所指定的类,然后锁定到一个特定的方法,这个方法就是main( )方法 虚拟结会执行这个方法中的所有指令。
· Java中所有东西都会属于某一个类,源文件(.java)经过编译后会形成类文件(.class),真正被执行的是类 执行程序就是让虚拟机去加载类,并执行类的main( )方法
· 一个程序只需要一个main( ),并不是所有类都带main( )
1.5 循环语句
·有while ,do-while ,for三种形式 ,同c语言
.与c的区别 ,循环条件的测试结果必须boolean值,boolean和integer类型并不相容
例如 :
int x = 1;
while(x){ } //false ,integer值不能做条件结果
Boolean isHot = true;
While( isHot ){ } //true,boolean可做条件测试结果
1.6条件语句
.注意点同循环语句
·打印输出方法system.out.print 与 system.out.println 区别:
println输出末尾会换行
2 类与对象
2.0 引例:面向对象的优点
·编程思想:
面向过程:根据要求编写过程
面向对象:构建对象,编写相关方法
·当要求更新,需要加入有特定方法的对象时…
·面向过程:修改已有代码,添加特判
·面向对象:加入新的类,不用修改已有部分(可扩展性)
·对于不同对象的重复过程(方法)…
·面向过程:本身就是以过程为主编写的,所以不会有重复,但当加入新的对象时可能要对已有过程进行添加修改
·面向对象:对于各对象的共同方法可利用继承特性减少代码的重复,对于特定过程可利用覆盖特性完成方法的改变和延伸
2.1 类与对象的关系
·类不是对象,而是同一类对象的模型
·对象可以当做类的实例,它有用来表示状态的实例变量(instance variable)和表示执行动作的方法(methods),但这些都是类设计的一部分
2.2 创建对象
·一般创建类时会需要两个类,一个是用来操作的类,另一个是该类的测试类其请名称一般为“受测类 + TestDrive”,而main()在TestDrive类中,并在其中创建对象并存取对象的变量和方法:
· main()的用途:
·测试真正的类
·启动Java程序
真正的java程序重点在让对象交互(相互调用方法)来完成目的,而不是主要在main( )中完成
2.3其他与补充
·全局变量
全局(global)变量是违反面向对象特性的,在需要全局变量时(例如可被所有对象读取的方法和常量),常用public和static组成类似global的修饰符,这些在第十章进行讨论
·java程序与提交
Java程序是由一组类组成的,其中一个类带有main( )方法。如果用户没有运行java程序的虚拟机的话则需要将之一并提交给用户。
对于数量庞大的类可以放在不同文件中,然后一并放在依据pkzip格式存档的。Jar文件中,jar文件其中可以引入一个简单的文字文件mainfest来定义启动应用程序的main( )方法。
3 变量:primitive主数据类型和引用
3.1 primitive主数据类型
有六种: byte ,short ,int ,long ,float ,double
·除非小数后加f,否则所有带小数点的值都会被当double处理
· int x = y+32 这样赋值是可以的
·变量命名规则: 1.只能用下划线,字母,或符合$开头 2.数字不能开头 3.不能用保留关键字
3.2 引用(reference)
·对象并没有变量,而只有引用(reference),引用类似于指针,只有虚拟机知道如何通过引用来取得该对象
·我们不用知道引用变量占多少字节,一台虚拟机上所有的引用大小是相同的。
·引用变量不能参与计算,这也是同C语言中指针的区别。
··没有引用任何对象的引用值是null
·堆空间
如果一个对象没有被任何引用指向后将会无法存取,其空间会被抛弃且回收
3.3 数组
·数组是对象。就算元素类型是主数据类型,数组也依然是对象
·对象的数组,数组元素是引用,要记得赋值(初始是null)
4 方法操作实例变量
4.1行为和状态
·同一类的不同对象可以根据不同的状态(实例变量),来产生不同的行为(方法)
4.2 方法的形参和实参
·同c++
4.3 参数的传递
·java的参数是通过值传递的,也就是拷贝传递
4.4 封装
·同c++,封装是java的良好特性。
·最常见的封装方法就是用公有的getter和setter方法来存取私有的实例变量。
·setter可以对不正常的参数进行修改,退回,或者抛出异常,getter也是同样的。这样做的好处是可以避免程序修改的时候修改其他部分的程序。
4.5 实例变量的初始值
·就算没有初始化或者调用setter,实例变量还是有初始值的:
Integer:0 float:0.0 boolean: false reference:null
4.6 变量的比较
·实例变量与局部变量
·实例变量在类内声明,而局部变量在方法内声明
·局部变量没有默认初始值,如果没有初始化就会报错
·方法的参数实际上也是局部变量,但在传参过程就完成其初始化的过程,所以一般不会报错
·== 与 equal( )
·运算符==可以判断两个primitive主数据类型是否相等 和 两个引用是否指向同一个对象
·若比较两个对象之间是否相等则需要调用equal( )方法
6 简单java程序设计
设计流程:
6.1高层设计
·了解设计流程要求,可以用流程图来表示
·用面向对象的方法思考需要哪些对象,注意要关注流程中出现的事物,而非动作
6.2 极限编程(XP)
一种软件开发思想,这里主要应用其这样一种思想:
在创造一个类之前先写其测试码,通过编写测试码去了解该类的具体设计需要哪些实例变量和方法
代码顺序:伪代码 -> 测试码 -> 真实代码