Java OOP心得
1. 面向对象的java实现——封装
封装的优势 |
重复使用
|
可维护性好
|
限制影响的范围
|
分离关注点
|
安全
|
封装的粒度(复用)
平台
|
组件—> 框架—> 设计思想
|
对象/类
|
方法
|
粘贴
构造方法的目的:
初始化对象——创建一个内存空间(堆)
特性:
1.方法名和类名相同
2.没有返回类型
3.new调用自我反射机制
4.不能被继承
5.默认公有一个
方法重载:
同一类中
完成相同的功能
参数列表不一样
(同一类中返回の不同,不可重复定义的方法)
类方法 (静态)少用——常用则用。
实例方法 (对象)
public 任何地方
protected 同一包或其他子类
package 同一包下
private 同一类中
注意:
面向对象的代码只是过程化程序设计方法的一个层次,它是目前我们所知的一种比较高级的过程化境界(但不是最高的),面向对象的代码有较好的组织结构和重用性,从而适用比较大型的应用程序开发中。但面向对象是一种思想而不是一种固定的套路。面向对象思想利用对问题的高度抽象来提升代码的可重用性。
2. 面向对象的java实现——继承和多态
继承:
必须要满足is-a的关系。<里氏替换原则>
为什么需要继承:代码的复用,给框架提供类的结构。
总结类与类的关系:
继承<泛化>
关联<包含>
依赖<A是B某方法的局部变量>
接口<A implement B>
聚合——整体部分的关系是强关联
组合——<生命周期是一致的>
两种方法来识别类
自底向上<抽象>,自顶向下<分解>
关于继承
慎用继承:继承破坏了封装性。
当开发时对超类进行了修改或扩展后,可能会对其子类造成破坏,错误不易察觉。
应为编译时通过,运行时通过。但结果不一定是想要的。
只有当类结构相似时,考虑使用继承。
关于多态
一个类可以具有多种行为,定义具有名称相同的方法,又有不同的行为。
由于不同的对象可具有相同的动作。所以在针对同一动作操作中,又可有不同的对象来实现。
Java提供2种类型的多态性
基于接口的多态性
基于继承的多态性
1.方法的重载
2.方法的覆盖
重载时尽量用@Overide标注
Java中获取对象:
1.new
2.反射机制
3.工厂模式
4.依赖注入
注意:子类中不能有重复定义的方法。<名称相同但返回类型不同>
3. 面向对象的java实现——接口
Java中接口有两种不同的含义。
第一种是指java接口,这是一种java语言中存在的结构,有特定的语法和结构。
第二种仅仅是指一个类所具有的方法的特征集合,是一种逻辑上的抽象。
关于建立抽象思想
Java这种OO语言到了今天已经非常的成熟的原因之一是它可以构建出一强大的抽象层,并且在各个领域都已经得到了成熟的应用。
我们初学着对这些OO的思想难以理解,不怕。我们可以利用现成的,成熟的,完善的抽象层应用,来帮助我们建立OO思想。
等我们具备了这些以后,任何高级语言的应用也就不过如此了。
OO的思想在程序的设计方面(越大的项目越可以)充分的体现出来,他的好处。但我们在代码的实现方面(由于个方面的原因)很难做到完全的OO产品实现。
个人发表:
任何的抽象,都依赖与具体。不要痴迷于过度的抽象,而才去实现具体。 |
以前我们写代码的时候喜欢设计,设计的我们认为很详细了,然后开始将所有的功能模块都写完,接着再调试,在调试的过程中我们可能花费比写代码长的多的时间。是的,因为你在运行一个复杂的东西,当然不容易搞定了。Martin Flower认为我们调试的时间可以不用那么长,原因是我们不能在写完了一个复杂系统的时候再调试,我们可以先建立一个好的测试用例,在写这个测试用例的过程中我们更能对整个系统了解,也能够帮助我们写代码;然后我们一点点的写,写一部分测试一下,保证每次新写的代码都能正确运行,从而当代码写完了,系统调试也完毕了。这样的情况下可以认为我们没有在调试上花时间,我们把时间花在测试和编写代码上了。 |
4. 使用异常处理程序错误
JAVA编程语言的优点之一是它的健壮性
Java的异常处理功能负责错误处理,错误恢复。
Try…ctch…finally 捕获…处理…不管数否发生异常,都将保证运行。
Error和Exception继承自Throwable类又继承自object类。
printStackTrace(); //显示有关异常信息。
getMessage(); //获得异常相关的详细性息。
getStackTrece(); //输出堆栈跟踪信息
throw //显示的引发异常
throws //不想处理
Java异常有API异常也有自定意异常
常见异常:
异 常 |
说 明 |
Exception |
异常基类 |
ClassCastException |
不能强制转换 |
NullPointerException |
尝试访问null对象成员 |
ArrayIndexOutOfBoundsException |
数组下标越界 |
IOException |
I/O异常的根类 |
FileNotFoundException |
找不到文件 |
ClassNotFoundException |
不能加载所需要的类 |
RuntimeException |
Java。Lang异常的基类 |
ArithmeticException |
算数错误 |
IllegalArgumentException |
方法接受到非法的参数 |
NumberFormatException |
字符串到float型数字的转换无效 |
InteruptedException |
线程中断 |
EOFException |
文件结束 |
NoSuchMethodError |
但是该类不再有该方法的定义 |
5. JAVA集合存储对象
A. 为什么需要使用集合框架:
分析:数组的特点:
1长度相同;
2数据类型相同;
3添加删除效率不高;
4内存中存放的方式是不一样的
5通过下标查找效率高;
6可以有重复的元素;
7是一个有序的列表
个人观点:由于数组由以上优点与缺点,在java中曾对不同特定业务的应用,JAVA中有不同的存储集合类,来满足不同的业务需求。
B. JAVA中集合框架的内容
Collection<单值>是最基本的接口,由List,和Set接口来继承
List是有序的接口(可有重复元素),有:ArrayList(侧重查询),LinkedList(侧重修改),vector向量,支持线程同步
Set是无序的接口(不能有重复的元素),有:HashSet,TreeSet使用时应优先考虑
Map<对值>接口提供了键值对访问(不能包含相同的key),有:HasMap.HasTable支持线程同步
C. 迭代器的使用和集合中的辅助类
iterator()方法返回一个Iterator对象,
通过hasNext()方法判断下个元素是否有值。
Collections类提供的静态方法,提供对集合中的元素管理的一些功能。