类与对象
面向对象的基本特征
- 封装–指将数据及对数据的操作方法包装起来或隐藏起来的方法
- 继承–本质是对某一批类的抽象(继承的另外一个好处是代码重用)
- 多态–多态直到系统运行时才根据实际情况决定实现何种操作
对象
程序中的对象来源于生活,现实生活中的某个实体经过抽象、建模后就变成程序中的一个对象,即用特定符号描述的对象
对象都有自己的特性,我们叫属性(静态特征)和方法(动态的特征)
如:学生,属性由学号、姓名,性别等,方法有学习、选课等
类
程序设计中,把一组相似对象的共同特征抽象出来并存储在一起,形成了类
总结
- 对象:具体的事物,我们称为object,或者是instance(实例)
- 类:是对对象的抽象,我们称为class
- 对象和类的关系:特殊到一般,具体到抽象
- 类可以看成一类对象的模板,对象可以看成该类的一个具体实例
- 类是用来描述同一类型对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性
- 对象是Java程序的核心,在Java程序中“万事万物皆可对象”
类的定义
类是Java的基本构成要素,是对象的模板,Java程序中所有的对象都是类创建的
一个Java类主要包含两部分:类的声明和类的主体
类的声明
格式:[修饰符] class <类名> [extends 父类名] [ implements 接口列表] { }
类的主体
主要是两部分组成:成员变量的定义和成员方法的定义
类的成员方法定义
Java中类的行为由类的成员方法来实现
类的成员方法由方法声明和方法体两部分组成
格式:[ 修饰符] <方法返回的类型> <方法名>([ 方法列表 ]){ 方法体 }
对象的创建
类是创建对象的一个模板
类名 对象名 = null ; //声明对象
对象名 = new 类名(); //实例化对象
也可将两个步骤合成为一行:
类名 对象名 = new 类名();
构造方法
构造器是用于构造该类的实例(对象),Java通过new关键字来调用构造器,从而返回该类的实例
构造方法是一种特殊的方法
格式: [修饰符] 类名 (形参列表){ …}
要点:
- 构造器方法名必须和类名一致
- 通过new关键字调用
- 不能再构造器中调用return
- 如果没有定义构造器,系统会自动定义一个无参的构造函数
构造方法的重载(overload)
方法的重载是指一个类中可以定义有相同的名字,但是参数不同的多个方法,调用时,会根据不同的参数列表选择对应的方法
- 方法调用时,匹配离最近的类型
- 参数列表不同的含义是:类型,个数,顺序不同
- 只有返回值不同,不构成方法的重载
- 只有形参的名称不同,不构成方法的重载
static
- 如果将static放在一个成员变量声明前,该变量就成为静态变量,也称类的成员变量
- 如果将static放在一个成员方法定义前,该方法就成员静态方法,也称类的成员方法
可以使用 类名.类属性 或者 类名.方法名 直接调用静态变量或静态方法
注意
- 静态变量是属于类所有,静态变量直接通过类名引用
- 非静态变量称为实例变量,只有生成实例化对象之后才存在
- this不能用于static方法
封装
四种不同权限之间的异同点
同一类 | 同一包 | 不同包的子类 | 不同包的非子类 | |
---|---|---|---|---|
private(私有的) | √ | |||
default(默认) | √ | √ | ||
protected(受保护) | √ | √ | √ | |
public(公共) | √ | √ | √ | √ |
垃圾回收机制
Java提供了一个名为finalize()的方法,用于在对象被垃圾回收机制销毁之前执行一些资源回收工作,
finalize()没有任何参数 和返回值,每一个类有且只有一个finalize()方法
程序员可以调用System.gc(),“建议垃圾回收系统回收资源”,但是垃圾回收系统什么时候被执行以及是否执行了,都是程序员不能控制的
注意
- 对象的空间分配:使用new关键字创建对象
- 对象空间的释放:将对象赋值为null即可, 垃圾回收器将负责回收所有“不可达”对象的内存空间