Java学习:面向对象笔记整理

Java面向对象笔记整理

基本概念

面向对象的三大特征:封装、继承、多态
面向对象:软件领域中的一种哲学思想,
OOA:面向对象分析,使用OO的思想分析需求
OOD:面向对象设计,使用OO 的思想设计程序结构
OOP:面向对象编程,使用OO 的思想开发代码

类与对象

类:一种数据类型,是对象的模板

寻找类

寻找类:从需求描述中发现名词,若改名词无法用已知类型描述,则新建类
语法
代码:

访问修饰符 class 类名{
    //属性
    //方法
    //构造函数
访问修饰符
访问权限子类其他包可修饰
public类、属性、方法
protect×类、属性、方法
default××类、属性、方法
private×××属性、方法
类成员

类成员:属性 方法
在一个类中可以书写:属性、方法、构造函数

属性
  • 属性:类型的特征,通常为名词,其数据会跟随对象产生,跟随对象消亡
  • 寻找属性:A有B(A包含B),则A是类,B是A的属性
  • Has a 关系
    A和B是两个类 A拥有B 或A拥有多个B 该关系在代码中表现为 B是A的属性 或B的数组是A的属性
  • 定义语法
访问修饰符 数据类型 属性名
  • 封装
    封装:狭义封装 将属性私有化,使用get和set方法访问
    广义:将零散的数据组装成类,提供公开的访问入口,隐藏内部实现
    属性必须私有
    全部使用get和set方法使用(快捷方式)
    只有在get和set方法中可以直接访问属性,其他位置必须使用get和set方法
方法
  • 方法:是指一种动作,往往是动词,若A能B 或A可以则A是类 B是方法 方法的生命期比对象短 它有开始也有结束
  • Use a 关系
    A和B是两个类 当A实施某种行为时,会与B的对象产生交互 代码表现为A的方法中会有B的对象作为参数或返回类型
  • 声明语法
访问修饰符 返回类型 函数名(参数列表){
    函数体
}
  • This关键词:表示当前对象(我)
    当前对象 执行改代码的对象
    This写在哪个类里面就是哪个类型
    在方法中,若需要使用自身成员,使用this.成员名
构造函数
  • 构造函数:在创建对象时运行的函数
    当一个类没有书写构造函数时,会有默认构造函数(无参数)
  • 作用:构造函数通常给属性赋值
  • 声明语法
访问修饰符 类名 (参数列表){
    函数体
}
  • 构造函数重载
    一个类可以拥有多个构造函数,只要参数列表不同

对象

对象:
某一个类的数据,一个类的一个实体

创建对象

代码:

new 类名();
new 类名 (参数列表);
  • 在创建对象时,会对属性进行初始化,给其赋值为类型默认值。
访问属性的语法

代码:

对象变量名.属性名
//表达式的类型为属性类型
调用方法的语法
对象变量名.方法(参数列表)
  • 值类型和引用类型
    1. 所有的基本类型(8種)都是值类型,所有的类都是引用類型
    2. 值类型:存放的是具体的数据
    3. 引用类型:存放的是对象的地址
    4. == 比较的是变量中储存的内容是否相等
    5. 所有引用类型的默认值都是NULL,表示沒有地址
    6. NullpointerException:空指针错误,一个对象为NULL,但是在使用他的成员時引发该错误
    7. 函数调用复制的是引用参数的地址

继承

  • Is a 关系:
    继承:如果A和B都是类,B是A
  • 子类父类
    如果B是A
    A是B的父类
    B是A的子类
    A派生B
    B继承与A

继承语法

代码:

Class B extends A{
}
  • 类B中将继承A中的所有公共成员
  • 当运行子类构造函数时,会先运行父类构造函数

Super关键词

表示父类
Super():调用父类构造函数
使用super可以使用父类方法

继承的特性

  • 单根性:一个类有且仅有一个父类
  • 传递性:若A是B的父类,B是C的父类 可以认为A是C的父类

Object

  • Object: 是所有的类的父类
  • HashCode:返回int,当前对象的内存地址计算出来的整数
  • Equals(Object obj):返回boolean 比较当前对象和另一个对象是否相等 默认比较hashCode是否相等
  • ToString:返回 String 将当前对象转换为字符串格式返回,默认的结果是 类型名全称@hashCode的16进制格式

重写

重写(override)子类可以重写实现父类的公共方法

多态

  • 多态:将子类对象看作父类类型,一个子类对象可以赋值给父类类型的变量
    在使用一个变量时,只需要关系其声明类型,不需要关心真实类型
    例如:
    A是B的父类
    代码:
A a = new B();

a的声明类型 A
a的实际类型 B

  • 当调用一个对象的方法的时,运行的是真实类型的方法

转型

  • 向上转型原则 子类对象赋值给父类类型
    里氏替换原则:向上自动转型

  • 向下转型,父类对象赋值给子类对象,必须强制转换

instanceof

instanceof关键字 用于语法判断
语法:

对象 instanceof 类型

读作 是不是 类型 返回值boolean

抽象

Abstract关键字

  • 用于修饰类,表示该类是抽象类,不允许创建该类的对象
  • 用于修饰方法,表示该方法是抽象方法,
    1. 抽象方法无方法体,子类必须实现抽象方法
    2. 抽象方法必须放置在抽象类中,抽象方法不能是private。
      作用:父类中有一个方法,父类必须要写,但是不知道如何实现,子类必须重写该方法

Final关键字

  • 用于修饰变量或者属性时,表示常量,不可以更改
  • 用于修饰方法时,表示该方法不能被重写
  • 用于修饰类时,表示该类不能被继承

接口

接口:是对行为的抽象
抽象类:对类型的抽象

定义语法:

代码:

访问修饰符 interface 接口名{
任意多个抽象方法
}
  • 一个类可以实现任意多个接口,实现一个接口就必须实现接口中的所有方法
  • 接口在使用上,可以当作父类,仍然满足多态原则
  • 接口是不能创建对象的

静态

static关键字:

Static:静态的,可以用于修饰属性或者方法(类成员),其修饰的成员成为静态成员,不用该关键字修饰的成员,成为实例成员。

访问

静态成员的访问:类名.成员名
实例成员的访问:对象.成员名

场景

使用静态成员的场景:
* 某些属性希望被所有对象共享,该属性应被设置为静态
* 某个类没有属性全是方法,并且无继承关系,建议将方法设置为静态

属性初始化的顺序:

  • 第一次使用该类型时,初始化其所有的静态属性
  • 创建对象,运行构造函数之前,初始化其实例属性
  • 创建一个对象时完整的执行顺序
    初始化静态属性(一次)->执行静态初始化块(一次)->执行实例初始化块->构造函数

调用

在一个类中,若调用自身的静态成员,可以省略类名
直接调用自身成员时,
1.静态方法中不能使用实例成员
2.实例方法中可以使用静态成员

初始化块

静态初始化块

代码:

static{

}
实例初始化块

代码:

{

}

堆(heap)和栈(stack)

栈(stack)

Stack:一块内存,大小固定,用于存放变量和参数的数据,存取速度快
* 释放
当一个变量作用域结束后,立即释放其栈上面的空间

堆(heap)

Heap:一块内存,理论上空间无限,用于存放对象数据,存取速度慢
* 回收
无法通过栈中的地址找到的堆中的对象为垃圾对象,一定时间后,会被垃圾回收器(GC)回收

内部类

概念

在一个类里面再编写一个类

种类

  • 静态内部类
  • 成员内部类
  • 局部内部类
  • 匿名内部类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值