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方法中添加控制逻辑
来源:CSDN
作者:Eisou7
链接:https://blog.csdn.net/quhaha/article/details/104017781