面向对象
关于面向对象的程序设计模式
对象:对象具有状态,行为,标识.意味着每一个对象都可以拥有内部数据(对象的状态)和方法(对象的行为),每一个对象在内存当中都有一个地址
- 万物皆为对象.
- 对象可以存储数据,可以在自身上执行操作.
- 是指可以抽取问题当中的任何概念化的构件(一个生物,一个建筑零件,一项服务),将其表示为程序当中的对象.
- 程序是对象的集合,通过发送消息来告知彼此所要做的
- 要请求一个对象,就要对对象发送一条信息
- 消息是对象或对象的方法调用的请求
- 每个对象度有自己的由全体对象所构成的存储
- 每个对象都拥有其类型
- 每个对象都有一个类,对象是类的实例
- 类区别于其他类的最重要的特性就是可以发送什么信息给它
- 某一特定类型的缩影对象度可以接受相同的消息
- 圆形是几何形,那么可以接受几何形的消息
程序设计
对象是服务的提供者
程序本身向用户提供服务,它将调用其他对象提供的服务来实现这一目的。
SE基础
对象与类
比较对象是否相等
引用相等
- hashCode()默认的行为会返回每个对象特有的序号,(根据内存位置计算)
- 比较引用相等,则可以比较hashcode(不能是重写过的)
对象相等
- 重写equals和hashcode,保证有相同对象有相同的hashcode,进行equals会返回true
对象状态准则
- 如果两个对象相等,则hashcode必须相等
- 如果两个对象相等,则equals返回true
- 如果两个对象有相同的hashcode则它们不一定相等
- 如果equals被覆盖,则hashcode必须被覆盖
- hashcode默认是对heap上对象产生独特的值,如果没有覆盖,两个对象的hashcode不可能相同
- equals默认是执行==,判断是否引用heap上同一个对象,若没有覆盖,则两个对象永不相同
断言
- assert(height>0);
- true执行
- false抛出assert异常
- 只有在打开断言时,断言才会成功运行,否则没有影响
- 断言可以运来进行debug
静态
- final修饰
- 修饰方法:可以防止方法被覆盖
- 修饰类:可以防止方法被继承
- 如果不想写System,使用import static java.lang.System.out,那么就可以out.println
泛型T和E
集合
基础
- 集合的类型检查只会发生在编译期间
- 数组的类型检查会发生在运行期间
集合使用泛型参数
- 对方法的参数设置为一个ArrayList
,那么不能传进去一个ArrayList - 因为当传入后者,方法可以认为该集合是animal,那么可以传入一个cat,问题是这样破坏了泛型
解决方法
- 使用万用字符
- 注意:下面的extends可以表示接口
- ArrayList<? extends Animal>(使用了万用字符,你无法在方法内对list添加任何值)
- ArrayList
同理 - 使用T:
- public
void take(ArrayList one)
hashset集合
检查重复
- 检验hashcode
- true则检验equals
- true则判断相同,拒绝加入集合
寻值方式
- 利用hashcode寻找,速度较快,它会通过对象的hashcode来计算找到对象的地址
继承,多态,接口,抽象类
- java虚拟机对待继承时,会在类先寻找该方法,如果找不到,就找它的父类,依次寻找上级直到找到为止
- 继承关系可以通过is-a关系检验
- public成员会被继承,private成员不会被继承