面相对象编程思想
1.从用户(终端用户、使用你代码的用户)角度思考问题
2.摒弃完全基于逻辑的思维(要有些文科的知识)
类与对象
类的成员变量——>对象状态
类的成员函数——>对象行为
类的静态变量——>属于类的一部分
类的静态函数——>属于类的一部分
类的静态变量特点
1、没有this引用,全局只有唯一一份
2、普通函数可以引用静态变量和函数
3、对象上可以引用静态变量、函数(编译器警告)
4、静态函数不能引用普通成员变量、函数
接口与抽象类的区别:
接口与抽象类的区别:
- 抽象类可以有成员变量
- 抽象类可以有部分实现
- 抽象类不可以多重继承
面向对象的不可变性
对象一旦创建完了它的内部的成员变量创建完了就再也不能被改变,我们认为我们对对象的一些改变对打破我们的一些假设,比如循环不变式、其它逻辑关系的假设
不可变对象性的好处:
1.可以引用传递,可以缓存
2.线程安全
实现不可变性
final关键字
1.类申明 -->类不可以被继承
2.函数申明-->函数不可以在派生类中重写
3.变量申明-->变量不可以指向其它对象
实现不可变性
1.final关键字无法保证不可变性
2.从接口的大定义,类的实现上保证不可变性
3.Conllection.unmodifiableXXX
泛型
泛型在百度百科中的定义是: 泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。
上面的解释有时并不好理解,我们可以从List中来看看泛型
在一般情况下为了把ArrayList和IntArrayList或StringArrayList组合成一起就要把两个做乘法,这就会变大非常大,并不利于我们去实现,所以这就要引用泛型从List变成List<T> //泛型规定List中的元素只能是类型T
复制代码
然后就可以写成下面这样:
ArrayList<Integer>,ArrayList<String>
LinkedList<Integer>,LinkedList<String>
复制代码
补充知识:
list是线性表,可以拿出第一个元素、第N个元素,可以插入元素。
ArrayList数组,获取第N个元素非常快,插入删除非常慢。
LinkedList链表,获取第N个元素非常慢,要从头开始,但插入删除非常快。
这是我对面向对象知识的总结,内容不是很全面,主要是挑了些内容来写,有什么问题可以在下方说下。