javaBase:Base

面向对象

关于面向对象的程序设计模式

对象:对象具有状态,行为,标识.意味着每一个对象都可以拥有内部数据(对象的状态)和方法(对象的行为),每一个对象在内存当中都有一个地址

  • 万物皆为对象.
  1. 对象可以存储数据,可以在自身上执行操作.
  2. 是指可以抽取问题当中的任何概念化的构件(一个生物,一个建筑零件,一项服务),将其表示为程序当中的对象.
  • 程序是对象的集合,通过发送消息来告知彼此所要做的
  1. 要请求一个对象,就要对对象发送一条信息
  2. 消息是对象或对象的方法调用的请求
  • 每个对象度有自己的由全体对象所构成的存储
  • 每个对象都拥有其类型
  1. 每个对象都有一个类,对象是类的实例
  2. 类区别于其他类的最重要的特性就是可以发送什么信息给它
  • 某一特定类型的缩影对象度可以接受相同的消息
  1. 圆形是几何形,那么可以接受几何形的消息

程序设计

对象是服务的提供者

程序本身向用户提供服务,它将调用其他对象提供的服务来实现这一目的。

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成员不会被继承

方法

可变参数列表