第一二章都是面向对象的相关知识,放在一起总结一些小的零碎的知识点.
1.对象导论
-
(1) "万事万物皆对象"
理论上讲:你可以抽取待求解问题的任何概念化构件(狗,建筑物,服务等),将其表示为程序中的对象.
在java语言眼中,99.99%的东西都是对象(剩余部分仍存在争议,不过现在都认为是100%的对象)
-
(2) 将对象抽象出来,找到需要的字段(属性)和方法(动作)
- 字段/属性, 例如:人拥有名字,出生年月
- 方法/动作,例如: 人会吃,喝;
import java.sql.Date;
/*一个简单的小例子*/
public class Person {
//简单起见,不使用权限控制
String name; //人的姓名
Date brithDate; //人的生日
byte sex; //1 表示男,0表示女
int hp = 100; //人的血量
int mp = 10; //人的精神气
/*这里只是举个例子,说明可以抽取很多属性*/
/* 模拟人吃食物的动作,实际上远比这复杂. */
void eat(String food) {
System.out.println(name + " 正在吃 " + food);
hp++;
mp++;
System.out.println("回复中!");
}
/*模拟人跑步*/
void run() {
System.out.println(name + "在跑步");
hp--;
mp++;
System.out.println("精神恢复中");
}
}
-
(3) 在良好的面向对象设计中,每个对象都可以很好完成一项任务,但是他并不试图做更多的事.
import java.sql.Date;
/*对上个例子修改,我不关心他跑步,只关心他吃东西,所以删掉无关变量和无关方法*/
public class Person {
//简单起见,不使用权限控制
String name; //人的姓名
int hp = 100; //人的血量
int mp = 10; //人的精神气
/*这里只是举个例子,说明可以抽取很多属性*/
/* 模拟人吃食物的动作,实际上远比这复杂. */
void eat(String food) {
System.out.println(name + " 正在吃 " + food);
hp++;
mp++;
System.out.println("回复中!");
}
/* 真正的对象可以根据我们的需求改变,毕竟在学校,老师只关心你的学习成绩,在公司只关心你的业绩.*/
}
-
(4) 对象的具体实现应该被隐藏
让客户端程序员(即调用你方法的程序员)无法触及他们不应该触及的部分
允许库设计者可以改变类内部的工作方式而不用但系会影响到客户端程序员.
public class Person {
// private 代表其他class中不可访问
private String name; // 人的姓名
private int hp = 100; // 人的血量
private int mp = 10; // 人的精神气
/* 这里只是举个例子,说明可以抽取很多属性 */
/* 模拟人吃食物的动作,实际上远比这复杂. */
void eat(String food) {
System.out.println(name + " 正在吃 " + food);
hp++;
mp++;
System.out.println(name + "回复中!");
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
/* 其余 getter 和 setter被我省去 */
/* 使用getter和setter 可以将对象内部细节隐藏.*/
}
(5) 代码复用是面向对象程序设计语言所提供的最了不起的优点之一.
2. 一切都是对象
-
1.在JAVA中你所做的全部工作就是
定义类
产生类的对象
发送消息给这些对象
-
2.尽管有时变量不做初始化没有问题,但是你最好明确地对变量进行初始化.
public class InitData {
public static void main(String[] args) {
int i; //尽管这样写没有语法问题,依然建议你写成
// int i = 0;
/**
* 没有初始化的话.下面几行都会报错.
*/
i++;
System.out.println(i);
}
}
-
3.编码约定:
类名的首字母要大写
方法和变量的名字尽可能满足:"驼峰风格"(int thisIsAExample = 0)
包的命名规则全部使用小写字母,包括中间的字也是如此