JAVA基础复习总结---------面向对象小结
1.对象导论
-
(1) "万事万物皆对象"
理论上讲:你可以抽取待求解问题的任何概念化构件(狗,建筑物,服务等),将其表示为程序中的对象.
在java语言眼中,99.99%的东西都是对象(剩余部分仍存在争议,比如Math类就不具有面向对象的特征,但是现在我们可以认为是100%的对象)
tip:面向对象和面向过程的区别:
- 以谁为中心
- 面向对象以对象为首要,我们首先创建对象,其次才考虑如何去完成任务编写方法。
- 面向过程以过程为首要,也就是我们的函数,只有大概的思路后才去考虑如何编写结构体.
- 人的思维就是以对象为主,所以说面向对象更适合人的思考,当然代价就是在很多事情上效率不如更接近计算机思维的面向过程,但是已经可以不用在乎了。
-
(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("回复中!"); } /* 真正的对象可以根据我们的需求改变,毕竟在学校,老师只关心你的学习成绩,在公司只关心你的业绩.*/ }
做该做的事情,在现实生活中很难, 但是代码中很容易(maybe),不要做多余的事情,让对象中保持一定的简洁性。
-
(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 可以将对象内部细节隐藏.*/ }
与之相关的技术:
- 权限控制符(public,protected,default,private),限制了谁可以访问内部成员(变量or方法)
- 接口,想象一下:如果谁都能访问一个对象的东西,那么你还改随意改动其中的代码吗?可能,这回导致整个系统的崩溃。
(5) 代码复用是面向对象程序设计语言所提供的最了不起的优点之一.
代码复用其实是函数就提供的功能,我认为这句话的意思就是:把函数分给相对应的方法,使其更加便捷的可以被调用。
毕竟Collections.sort(arr); 更容易让人明白这里面发生了什么,需要传入的参数。
2. 一切都是对象
-
1.在JAVA中你所做的全部工作就是
- 定义类
- 产生类的对象
- 发送消息给这些对象
不要小瞧上面每一步。想象一下几万亿行代码做的事情都是这些。始终保持敬畏之心。
-
2.尽管有时变量不做初始化没有问题,但是你最好明确地对变量进行初始化.
public class InitData { public static void main(String[] args) { int i; //尽管这样写没有语法问题,依然建议你写成 // int i = 0; /** * 没有初始化的话.下面几行都会报错. */ i++; System.out.println(i); } }
相信我,这个习惯会让你的代码少改很多Bug。而且也不会被别人鄙视。
-
3.编码约定:
- 类名的首字母要大写。
- 方法和变量的名字尽可能满足:"驼峰风格"(int thisIsAExample = 0)
- 包的命名规则全部使用小写字母,包括中间的字也是如此