一、面向对象
1、面向对象概述
(1)面向对象与面向过程的区别
面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲历亲为,详细处理每一个细节。强调步骤。
面向对象:当需要实现一个功能的时候,不管心具体的步骤,而是找一个已经具有该功能的人帮我做事。强调对象。
例子:遍历数组
生活举例:手洗衣服(面向过程) 自动洗衣机(面向对像)
(2)面向对象的三个特征
封装、继承、多态
2、对象和类
(1)类
类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
属性:就是该事物的状态信息
行为:就是该事物能做什么
举例:小猫
属性:名字、体重、年龄、颜色
行为:走、跑、叫、卖萌
(2)对象:是一类事物的具体表现。对象是类的一个实例,必然具备该类事物的属性和行为。
举例:一只小猫
属性:Tom 、5kg、2岁、黄色
行为:喜欢卖萌、喜欢吃小鱼干、喵喵叫
(3)类与对象的关系
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
二、类与对象
1、类的定义
(1)学生举例
(2)注意事项
a、成员变量是直接定义在类当中的,在方法外面
b、成员方法不要写static关键字
c、通常情况下一个类不能直接使用,需要根据类创建一个对象,才能使用
2、对象
(1)对象的使用
01、导包:也就是需要指出需要使用的类,在什么位置
import 包名称、类名称
对于当前类属于同一个包的情况,可以省略导包语句不写
02、创建
格式:
类名称 对象名 = new 类名称()
03、使用,分为两种情况
使用成员变量:对象名.成员变量名
使用成员方法:对象名.成员方法名(参数)
(也就是,想用谁,就用对象名点谁)
注意事项:
如果成员变量没有进行复制,那么将会有一个默认值,规则和数组一样。(字符串为null、数字为0)
练习:手机练习
(2)对象对内存图的使用(黑色的x代表出栈,当main方法结束时出栈,所有占用的内存得到释放。 )
01、一个对象对内存的使用
02、两个对象使用一个方法的内存图
两个对象未产生任何联系
03、两个引用指向同一对象的内存图
加一句Phone two=one(将one的地址发送给two)
(3)对象在方法中的使用
01、使用对象类型作为方法的参数(实际传输的是地址值)
内存使用图
02、使用对象类型作为方法的返回值(实际传输的是地址值)
内存使用图
(4)成员变量和局部变量的区别
01、定义位置不一样
局部变量:在方法的内部
成员变量:在方法的外部写在类中
02、作用范围不一样
局部变量:只有在方法当中可以使用;出了方法就不能再使用
成员变量:整个类都可以使用
03、默认值不一样
局部变量:没有默认值,如果想要使用,必须手动进行赋值
成员变量:如果没有赋值,会有默认值,规则和数组相同
04、内存的位置不一样(了解)
局部变量:栈内存
成员变量:堆内存
05、生命周期不一样(了解)
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
注意事项:1、方法的参数就是局部变量
2、参数在方法的调用中必然会被赋值
3、前三点必须掌握
(5)面向对象的封装性
01、三大特征:封装、继承、多态
02、封装在java当中的体现:
1、方法就是一种封装
2、关键字private也是一种封装
封装就是将一些信息隐藏起来,对于外界并不可见
03、private关键字的作用及使用
1、作用:将需要保护的成员变量进行修饰
注意:一旦使用了private进行修饰,那么本类当中仍然可以随意访问。但是!超出了本类范围之外就不能直接访问。
2、成员变量的设置格式:
public void set成员变量(首字母大写)(数据类型 参数名称){
方法体 ;
}
注意事项:
- 间接访问private设置,就是定义一对Getter/Setter方法
- 必须叫setxxx或者getxx命名规则。
- 对于Getter来说,不能有参数,返回值类型和成员变量对应。
- 对于Setter来说,不能有返回值,返回值类型和成员变量对应。
- 对于基本类型的boolean值,Getter类型应写成isxx形式,而setxxx规则不变。
练习:学生案例
04、this关键字的作用及使用
- 当方法的局部变量和类的成员变量重名的时候,根据就近原则,优先使用局部 变量。如果需要访问本类当中的成员变量,需要使用this关键字。
- 格式:
- this.成员变量名。
- 通过谁调用的方法,谁就是this。
(5)构造方法
定义:构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
格式:
public 类名称(参数类型 参数名称){
方法体:
}
注意事项:
1、构造方法的名称必须和所在的类名称完全一样,就连大小也要一样
2、构造方法不要写返回值类型,连void都不写
3、构造方法不能return一个具体的返回值
4、如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法什么具体的事情都不做。
5、构造方法的调用实际就是new 对象的使用。
6、一旦编写了至少一个构造方法,那麽编译器将不再赠送。
7、构造方法可以进行重载。
8、如果需要改变对象当中的成员变量数据内容,仍需要使用Setter方法。
(6)定义一个标准的类
一个标准的类通常要拥有下面四个组成部分
01、所有的成员变量都需要使用private关键字修饰
02、为每一个成员变量编写一对儿Getter/Setter方法
03、编写 一个无参数的构造方法
04、编写一个全参数的构造方法。
- 可以使用code中的generate选择getter/setter生成
- construct 生成无参数和全参数的构造方法。