java面向对象
面向对象由 OOA分析 OOD设计 (用UML来记录描述) OOP编程有机组成
三种基本特征
封装 将对象的实现细节隐藏起来 不允许外部程序直接访问对象内部信心 而是通过该类所提供的方法实现访问
提高类的内聚 降低对象的耦合
继承 实现软件复用 子类继承父类之后 子类作为一种特殊的父类 直接获得父类的属性和方法
多态 子类对象可以直接赋值给父类变量 但运行时依然表现出子类的行为特征 同一个类型对象在执行同一个方法表现出多种行为特征
ps:基于对象的语言如 javascript 无法通过继承产生新的对象 因而无多态特征 不能称为面向对象编程
类与对象
修饰符
权限
public
default 当前包 (默认)
protected 子类 (不能修饰类)
private 当前类(不能修饰类)
非权限
abstract 抽象 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
final 类不可继承 父类中的 final 方法可以被子类继承,但是不能被子类重写。
static 静态
面向对象程序单位是类 面向过程程序单位是函数
程序的最小单位是类 类生成系统中多个对象 对象 映射成现实中的事物
类定义=成员变量+方法
构造方法无返回值类型 返回的是当前类的实例(隐式)
Person p = new Person();
Person p = null; 声明一个引用变量 存储在栈
p = new Person(); 实例化一个对象并赋给引用变量 存储在堆
引用变量里存放的是一个引用 它指向实际的对象
多个引用变量可以指向同一个对象 即 Person p2=p;p2/p指向同一个对象
如果堆内存里的对象没有任何变量指向该对象,
程序将无法访问该对象,该对象则变为垃圾,
java回收机制则回收该对象,释放该对象所占的内存区。
把引用变量的赋值为null 切断引用变量与对象之间的联系 对象被回收
this关键字
this可以代表任何对象 当this出现在方法体中时 它所代表的对象时不确定的但它的类型是确定的
他所代表的是当前类的实例 只有当这个方法被调用时 他所代表的类才被确定下来 谁调用这个方法 this代表谁
在同一个类中方法调用同类的另一个方法时不加this存在但默认省略
构造器中有一个与成员变量同名的局部变量 又必须在构造器中访问这个被覆盖的成员变量 成员变量前加this
静态成员不能直接访问非静态成员
静态方法是不需要实例化,非静态方法是必须实例化的。所以,静态方法调用非静态方法不能用this.方法名()来调用。必须先实例化一个对象,然后用对象名.方法名()。
static修饰的成员变量属于类的本身 而不属于该类的实例
static修饰的方法直接使用类名调用 在方法中使用this关键字则无法指向合适的对象 static修饰的类中不能使用this关键字
方法
声明方法时给包含了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时实际传递给方法的参数值称为实参。
值传递:将实参的副本传入方法内 实参本身不受影响
可变参数函数
java5以后允许为方法指定数量不确定的形参 最后一个形参类型后面增加 … public void say(int …a){ } 多个参数值被当作数组传入棵百年
数组形式的形参可以处于形参表的任何位置 位数可变的形参每个方法仅有一个且处在参数表最后
方法重载 多个方法方法名相同 形参列表不同 (修饰符 返回参数 与重载无关)
方法重构 方法名 形参列表相同 方法访问权限大 返回值类型 异常捕捉类的范围小
变量
成员变量
类变量(static修饰) 生命周期为类的生命周期
实例变量 生命周期为实例的生命周期
局部变量
形参 整个方法体有效 无需初始化
方法局部变量 方法结束时失效
代码块局部变量 代码块结束时失效
使用get set方法 可以的在setter方法中添加控制逻辑
构造器
通过new关键字调用构造器 构造器返回该类的对象
在程序调用构造器时 系统会先为该对象分配内存空间并初始化
执行构造器执行体之前已经创建了一个对象 但是无法被外部程序访问只能在构造器内部通过this访问
当执行完构造器执行体后返回对象
使用this调用其它构造器时 会根据实参与构造器的形参自动匹配
继承
单一继承
super.方法()/变量; 调用父类中被子类覆盖的方法
super(a,b);在构造器中调用父类的构造器
引用类型之间的强制转换只能在存在继承关系的类之间进行
可以被外部类类调用但是无法修改用public final
==与equals
==当比较基本类型时 比较数值的大小 比较引用类型时 比较是否指向同一个对象
equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象 比较基础数据类型直接报错
类成员
java类包含 成员变量 方法 构造器 初始化块 内部类(接口 枚举)
static可以修饰除构造器以外的四种
类成员无法调用非类成员 类成员生命周期等于类范围大
static与abstract不能修饰同一个方法
单例类
一个类只能拥有一个实例对象
构造方法使用private修饰
提供一个public static修饰的方法用于创建该类的对象
static成员变量记录创建的对象