上周我们已经学完了面向过程的编程,一些数据类型,数组,运算符和表达式及流程控制的方法,那我们这周就来开启新篇章吧!
面向对象程序设计核心就是类和对象了,类是某一类事物的描述,比较抽象,而对象是具体的,是通过类来创建的
类
类是由数据成员与函数成员封装而成的,其中数据成员是表示类的属性,函数成员表示类的行为
其一般结构为
[类修饰符] class 类名称
{
[修饰符] 数据类型 成员变量名称;
...
[修饰符] 返回值的数据类型 方法名(参数1, 参数2, ......)
{
语句序列;
return [表达式];
}
...
}
其中类修饰符的含义如下表所示
修饰符 | 含义 |
---|---|
public | 将一个类声明为公共类,可以被任何对象访问 |
abstract | 将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,不能创建该类的实例 |
final | 将一个类声明为最终类即非继承类,表示不能被其它类所继承 |
缺省 | 缺省修饰符时,则表示只有在相同包中的对象才能使用这样的类 |
一个类可以有多个修饰符,且无先后顺序之分,但abstract和final对立,不能同时应用在一个类的定义里
成员变量
描述该类的内部信息
格式如下
[修饰符] 变量类型 变量名 [ =初值];
其成员变量的修饰符的含义
修饰符 | 含义 |
---|---|
public | 公共访问控制符,指定该变量是公共的,可以被任何对象的函数访问 |
private | 私有访问控制符,指定该变量只允许自己类的方法访问,其他类中的方法均不能访问此变量 |
protected | 保护访问控制符,指定该变量只可以被它自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量 |
缺省 | 缺省访问控制符时,则表示在同一包中的其他类可以访问此成员变量,而其他包中的类不可以访问此成员变量 |
final | 最终修饰符,指定此变量的值不能被修改 |
static | 静态修饰符,指定该变量被所有对象共享,即所有的实例都可以使用该变量 |
transient | 过度修饰符,指定该变量是一个系统保留,暂无特别作用的临时性变量 |
volatile | 易失修饰符,指定该变量可以同时被几个线程控制和修改 |
注意
在定义类的成员变量时,可以同时赋初值,表明成员变量的初始状态,但对成员变量的操作只能放在方法中
成员方法
用来定义对类的成员变量进行操作的,是实现内部功能的机制,同时也是类与外界进行交互的重要窗口
格式如下
[修饰符] 返回值的数据类型 方法名(参数1, 参数2, ......)
{
语句序列;
return [表达式];
}
其中修饰符为可选项,参数传递若没有则括号内不写,而若函数没有返回值,其数据类型为void,且return语句省略
成员函数修饰符的含义
修饰符 | 含义 |
---|---|
public | 公共访问控制符,指定该函数是公共的,可以被任何对象的函数访问 |
private | 私有访问控制符,指定该方法只允许自己类的方法访问,其他类中的方法均不能访问此方法 |
protected | 保护访问控制符,指定该方法只可以被它自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此方法 |
缺省 | 缺省访问控制符时,则表示在同一包中的其他类可以访问此成员方法,而其他包中的类不可以访问此成员方法 |
final | 最终修饰符,指定此变量的值不能被重载 |
static | 静态修饰符,指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现 |
abstract | 抽象修饰符,指定该方法只声明方法头,而没有方法体,抽象方法须在子类中被实现 |
synchronized | 同步修饰符,在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防其它线程访问,运行结束后解锁 |
native | 本地修饰符,指定此方法的方法体是用其他语言在程序外部编写的 |
注意
类中定义的变量为成员变量
方法中定义的变量为局部变量
其区别
成员变量 | 局部变量 | |
---|---|---|
语法形式 | 属于类,可以被public private static等修饰符修饰 | 不能被访问控制符及static修饰 |
内存中的存储方式 | 对象的一部分,而对象存在堆内存中 | 存在与栈内存中 |
内存中的生存时间 | 对象的一部分,随对象创建而存在 | 随方法的调用而产生,方法调用结束则自动消失 |
初值 | 若没有赋初值,则自动以类型的默认值赋值 | 不能自动赋值,必须显式的赋值后才能被使用 |
对象
一个对象的生命周期为
创建 --> 使用 --> 销毁
创建对象
- 声明指向“由类所创建的对象”的变量
- 利用new运算符创建新的对象,并指派给前面所创建的变量
比如已经创建了一个类Student,要创建对象stu
Student stu;
stu = new Student();
或
Student stu = new Student();
对象的使用
创建对象之后,对对象的成员进行访问
其格式为
对象名.对象成员
或对成员方法进行引用
对象名.成员方法()
成员变量的一些初始值
成员变量类型 | 初始值 | 成员变量类型 | 初始值 |
---|---|---|---|
byte | 0 | double | 0.0D |
short | 0 | char | ‘\u0000’(表示为空) |
int | 0 | boolean | false |
long | 0L | 所有引用类型 | null |
float | 0.0F |
在类定义内调用方法
在类的定义内调用本类的其他成员,可在该成员前加上this,则this代表调用该成员的对象
e.g.
double volume()
{
return this.area() * this.height;
}
参数传递
以变量为参数调用方法
参数实质就是方法的自变量,所以参数要放在方法的括号内来进行传递,括号内的参数可以是数值型,字符串型,甚至是对象
以数组为参数或返回值的方法调用
情形一:指明传入的参数是一个数组即可
e.g.
public void least(int[] array)
{
...
}
情形二:而如果一个方法没有返回值,则用void修饰,而返回一个一维整型数组,则加上int[],返回二维数组,则加上int[][];
e.g.
int[][] transpose(int[][] array)
{
...
return array;
}
transpose用来接收而为整型数组,返回类型也是二维整型数组