2 类与对象
main()的两种用途:
(1)测试真正的类
(2)启动你的JAVA应用程序
真正的Java程序只会让对象与对象交互。此处所说的交互是指相互调用方法。
question 1:若需要全局变量或方法时该如何?
answer 在Java的面向对象概念中并没有全局变量这回事。然而实际上会有需要方法或常量可被任何程序存取。在任何类中的任何程序都可以存取public static的方法。任何变量只要加上public、static和final,基本上都会变成全局变量取用的常数。
question 2:如果能做出全局的函数和数据,那又怎么算得上是面向对象呢?
answer Java中的事物都必须待在类中。pi常数或random()方法也必须定义在Math这个类中。这类似全局的事物在Java中算是例外。它们是非常特殊的情况,不会有多个实例或对象。
3 primitive主数据类型和引用
局部变量:声明在方法中的变量。
变量有两种口味:清凉的primitive主数据类型(保存基本类型的值)与香辣的对象引用(保存对象的引用)。
类、方法、变量命名规则:
(1)名称必须以字母、下划线(_)或$符号开头,不能用数字开头。
(2)除了第一个字符以外,后面就可以用数字。反正不要用在第一个字符就行。
每一个包装对象都是不可变的(就是说它的状态绝不能改变),它存储一种当该对象被构建时设置的原值,并提供一种方法以重新得到该值。
4 方法操作实例变量
形参与实参:
方法会运用形参。调用的一方会传入实参。
实参是传递给方法的值。当它传入方法后就成了形参。参数跟局部变量是一样的。它有类型与名称,可以在方法内运用。
重点是:如果某个方法需要参数,你就一定得传东西给它。那个东西得是适当类型的值。
java是通过值传递,也就是通过拷贝传递的。
question: 如果想要传入的参数是对象而不是primitive主数据类型会怎样?
answer 在Java中所传递的所有东西都是值,但此值是变量所携带的值。引用对象的变量所携带的是远程控制而不是对象本身。若对方法传入参数,实际上传入的是远程控制的拷贝。
question: 可不可以忽略返回值?
answer 可以调用返回非void类型的方法而不必理会返回值,这代表你要的是方法的行为而不是返回值。
Getter 与Setter 执行get与set。Getter 返回实例变量的值。Setter 取用一个参数来设定实例变量的值。
数据隐藏(封装)
使用共有和私有两个存取修饰符。
封装的基本原则:将你的实例变量标记为私有,并提供共有的getter 与 setter 来控制存取动作。
(将实例变量标记为private,将getters 与setters标记为public)
实例变量与局部变量之间的差别:
- 实例变量是声明在类内而不是方法中。
- 局部变量是声明在方法中的。
- 局部变量在使用前必须初始化。
- 实例变量有默认值,局部变量木有。
使用==来比较两个primitive主数据类型,或者判断两个引用是否引用同一个对象。
使用equals()来判断两个对象是否在意义上相等。
==只用来比对两个变量的字节组合,实质所表示的意义则不重要。字节组合要么就是相等,要么就是不相等。
5 编写程序
- 伪码
- 测试码
XP规则:
(1)多次经常性的小规模发布。
(2)避免加入规格没有的功能。
(3)先写测试用的程序。
(4)经常工作上下班。。。
(5)随时随地重构(refactor),也就是改善程序代码。
(6)保持简单。
(7)双双结伴进行工作,并经常交换伴侣以便让大家都清楚全局。
- 真实码
7 继承与多态
有三种方法可以防止某个类被做出子类:
(1)存取控制。就算类不能标记为私有,但它还是可以不标记共有。(即protected类)非公有的类只能被同一个包的类作出子类。
(2)使用final修饰符。这表示它是继承树的末端,不能被继承。
(3)让类只拥有private的构造程序。
8 接口和抽象类
当某个对象是以Object类型来引用时,Java会把它当做Object类型的实例。这代表只能调用由Object类中所声明的方法。若: