一:面向过程和面向对象的区别
面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体的步骤/过程,注重的是过程中的具体的行为,以函数为最小单位,考虑怎么做。
面向对象:注重找“参与者”,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
二:类和对象的关系
1.万事万物皆对象
2.对象:具体的事物,具体的实体,具体的实例,模板下具体的产品
类:对对象向上抽取出像的部分,公共的部分,形成类,类是抽象的,是一个模板
3.一般在写代码的时候先写类,然后在根据类创建对应的对象。
三:面向对象三个阶段
1.面向对象分析OOA
2.面向对象设计OOD
3.面向对象编程OOP
步骤:
- 确定类名叫什么
- 确定类里有多少个属性,每个属性叫什么名字(只定义,程序中涉及的属性)
- 确定类里有多少个方法,每个方法叫什么名字;方法体(只定义,程序中涉及的方法)
- 通过类创建对象,通过对象 调用方法。完成任务/功能。
四:局部变量和成员变量(全局变量)的区别
区别1:代码中位置不同
成员变量:类中方法外定义的变量
局部变量:方法中定义的变量 代码块中定义的变量
区别2:代码的作用范围
成员变量:当前类的很多方法
局部变量:当前一个方法(当前代码块)
区别3:是否有默认值
成员变量:有
局部变量:没有
区别4:是否要初始化
成员变量:不需要,不建议初始化,后续使用的时候再赋值即可
局部变量:一定需要,不然直接使用的时候报错
区别5:内存中位置不同
成员变量:堆内存
局部变量:栈内存
区别6:作用时间不同
成员变量:当前对象从创建到销毁
局部变量:当前方法从开始执行到执行完毕
五:构造器
//创建一个Person类的具体的对象/实例/实体:
创建对象的过程:
1.第一次遇到Person的时候,进行类的加载(只加载一次)
2.创建对象,为这个对象在堆中开辟空间
3.为对象进行属性的初始化动作: new关键字实际上是在调用一个方法,这个方法叫构造方法(构造器)调用构造器的时候,如果你的类中没有写构造器,那么系统会默认给你分配一个构造器,只是我们看不到罢了。
4. 可以自己显式 的将构造器编写出来:
构造器的格式:
[修饰符] 构造器的名字(){
}
构造器和方法的区别:
(1).没有方法的返回值类型
(2).方法体内部不能有return语句
(3).构造器的名字很特殊,必须跟类名一样
5.构造器的作用:不是为了创建对象,因为在调用构造器之前,这个对象就已经创建好了,并且属性有默认的初始化的值。
6. 调用构造器的目的是给属性进行赋值操作的。
注意:我们一般不会在空构造器中进行初始化操作,因为那样的话每个对象的属性就一样了。 实际上,我们只要保证空构造器的存在就可以了,里面的东西不用写。 7.构造器重载: (1).一般保证空构造器的存在,空构造器中一般不会进行属性的赋值操作 (2).一般我们会重载构造器,在重载的构造器中进行属性赋值操作 (3).在重载构造器以后,假如空构造器忘写了,系统也不会给你分配默认的空构造器了,那么你要调用的话就会出错了. (4). 当形参名字和属性名字重名的时候,会出现就近原则:在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象
六:相关例子
【1】班级和学员信息(两个类依赖)
要求:
- 请使用面向对象的思想,描述 班级和学员信息
- 分析班级和学员的属性和方法,设计班级类和学员类
- 在学员类中通过属性描述所在班级
- 通过带参构造函数实现属性赋值
- 编写测试方法实现信息输出
参考分析思路:
班级类:
属性:班级编号,班级名称
方法:介绍班级信息的方法。通过输入参数描述班级口号,介绍信息中包括编号、名称
学员类:
属性:学号,姓名,性别,年龄,所在班级
方法:学习的方法,描述学习状态。描述内容包括姓名、学号、年龄、所在班级信息
【2】论坛用户
要求:
- 请使用面向对象的思想,设计注 册用户信息
- 分析用户的属性和方法,设计用户类
- 设计带参构造函数实现属性赋值
- 编写测试方法实现信息输出
参考分析思路:
用户类:
属性: 用户昵称,密码,性别,年龄,注册时间,等级
方法:个人信息展示