面向对象(上)学习笔记一
一、学习面向对象内容的三条主线
- Java类及类的成员:属性、方法、构造器;代码块、内部类
- 面向对象的三大特征:封装性、继承性、多态性、(抽象性)
- 其他关键字:this、super、static、final、abstract、interface、package、import
二、何为“面向对象”的编程思想
- 顿悟 or 渐悟
三、面向过程(pop)与面向对象(oop)
面向对象的面向过程的含义
- 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
把冰箱门打开
抬起大象,塞进冰箱
把冰箱门关闭
- 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 ``` 人{
打开(冰箱){
冰箱.开开();
}
抬起(大象){
大象.进入(冰箱);
}
关闭(冰箱){
冰箱.闭合();
}
}
冰箱{ 开开(){} 闭合(){} }
大象{ 进入(冰箱){ } } ```
面向对象的三大特征
- 封装
- 继承
- 多态
四、面向对象的两个要素
类:对一类事物的描述,是抽象的概念
对象:实际存在的个体,是实际存在的概念
面向对象程序设计的重点就是类的设计
设计类就是设计类的成员
类的成员
- 属性:对应类中的成员变量
- 行为:对应类中的成员方法
类和对象的使用
- 创建类,设计类的成员
- 创建类的对象
- 通过“对象.属性”或“对象.方法”调用对象的结构
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static)。意味着:如果我们修改了一个对象的属性a,则不影响另外一个对象属性a的值。
对象的内存解析
虚拟机栈:即为平时提到的站结构。我们将局部变量存储到栈结构中
堆:我们将new出来的结构(比如数组、对象)加载在堆空间中。补充对象的属性(非static的)加载在堆空间中。
方法区:类的加载信息、常量池、静态域
编译完源程序以后,生成一个或多个字节码文件。我们使用JVM中的类加载器和解释器对生成的字节码文件进行解释运算。意味着需要将字节码文件对应的类加载到内存中,涉及到内存解析。类中属性的使用
属性(成员变量)vs 局部变量
- 相同点:1、定义变量的格式都是:数据类型 变量名 = 变量值;2、先声明,后使用。3、变量都有其对应的作用域。
- 不同点:1、在类中声明的位置不同,属性:直接定义在类的一对{}内。局部变量:声明在方法中、方法形参、代码块内、构造器形参、构造器内部的变量。2、关于权限修饰符的不同。属性:可以在声明属性时,指明其权限,使用权限修饰符。常用的权限修饰符:private、public、缺省、protected。局部变量:是不可以使用权限修饰符的。3、默认初始化值的情况。属性:类的属性,根据其类型都有默认初始化值。整型(btye、short、int、long):0;浮点型(float、double):0.0;字符型(char):0或’\u0000’;布尔型(boolean):false;引用数据类型(类、数组、接口):null。局部变量:没有初始化默认值,意味着我们在调用局部变量之前,一定要显示的赋值,特别地,形参在调用的时候,我们赋值即可。4、在内存中加载的位置,属性:加载到堆空间中(非static的属性),局部变量:加载到栈空间中。
类中方法的使用
- 方法:描述类应该具有的功能
- 方法的声明:权限修饰符 返回值类型 方法名(形参列表){ 方法体 },注意:static、final、abstract来修饰的方法,后面再讲。
说明:
- 权限修饰符:Java规定的4中修饰符:private、public、缺省、protected—-封装性再细讲。
返回值类型:有返回值 vs 没有返回值
- 如果方法有返回值、则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量。
- 如果方法没有返回值,则方法声明时,使用void来表示,通常,没有返回值的方法中就不需要使用return,但是,如果使用的话,只能“return;”表示结束此方法。
- 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”。
形参列表:方法可以声明0个、1个、或多个形参
- 格式:数据类型1 形参1,数据类型2 形参2,……
- 方法体
return关键字的使用
- 使用范围:使用在方法体中
- 作用:1、结束方法。2、针对于有返回值类型的方法,使用“return 数据”返回所要的数据。
- 注意点:return关键字后面不可以声明执行语句。
- 方法的使用中,可以调用当前类的属性或方法,特殊的:方法A中调用方法A称为递归。
- 方法中不可以定义方法。