Java基础—Day08
目标:
1. 面向对象
2. 对象 vs 类
3. 如何去设计一个类
4. 类图
5. 构造方法[构造器] + this
1.面向对象概述
1.1 vs 面向过程
面向过程:你找对象为例,你每一步都亲历亲为,动作的一个执行者。
面向对象:找一个合适的人帮你干活。 红娘 ,动作的指挥着。
面向 对象 的核心:就是找合适的人,帮你干活【调用方法】
1.2 OOP/OOA
OOP:Oriented Object Programming,面向对象编程
OOA:Oriented Object Arti....,面向对象分析/设计
2.对象概念
世界由什么组成的?原子、万物、人、动物.......
我们在认识世界的过程中,无形以分类去划分。
2.1 对象的概念
万物皆对象
对象[物]:客观存在的实体/事务,比如kb13的张三,即张三就是一个对象。
类:是一个抽象的概念,将其当做一个模版。
2.2 找身边的对象
比如教室的投影仪
2.3 程序中怎么玩
在java中,类是代码的组织单元【即我们的代码需要在类体中编写】,我们的对象需要通过类创建 出来。
找对象的特征:(静态特征+动态特征)
静态特征【属性】:身高、身材、性别、年龄........
男:属性的值
动态特征【方法】:一般是动宾结构,吃喝拉撒睡,学习
在分析对象的特征的时候,要根据场景去分析出他的属性和方法,无法且没有必要穷举出所有的属 性和方法。
三步走:
需求:编写一个学生类,学号、名字、分数,打印学生信息
2.3.1 编写一个类
共性:属性和方法,将属性和方法写在一个文件中,这个文件是通过类组织
思考:Java源码本身提供了很多类,为什么还要自定义的。它不知道你具体类的属性和方法是啥, 也无法穷举世界万物。所以,它提供了一个种自定义类的方式
2.3.2 创建对象
2.3.3 使用对象
3.构造方法
若自定义了有参构造,那么你要给加上无参构造 ----》 当成一个好习惯
3.1 作用
1. 创建对象: new 构造方法(有就传)
2. 为属性赋初始值
3.2 特点
1. 方法名称跟类名一致
2. 我们没有定义这样的一个特殊方法,但是可以调用,说明JDK默认给我们提供了一个无参构造
3. 一旦我们显示定义有参构造,则默认的无参构造将失效。
4. 往往我们就需要使用无参构造,此时你应该自定义一个无参构造
5. 构造方法也有重载
6. 没有返回值,连void也不能有
4.this关键字
代表:代表的就是当前对象,就你造的哪个对象,代表的就是谁;只能用在你设计的那个类中
用法: 1. this.成员变量 :可以解决在构造方法中,跟形参重名的问题;在方法中调用的时候,可以增加可 读性
2. this.当前类的方法名 :此处 this 可以省,增加可读性
3. this(构造方法的参数) :可以在构造方法中调用其他的构造方法,必须放在构造方法的第一行
在一个构造方法中调用其他构造方法的目的:可以节省很多代码
5.类图
5.1 简介
可以画类图的工具【设计工具】:
1. processon :https://www.processon.com/
2. draw.io :https://app.diagrams.net/
3. startuml :https://staruml.io/ 可以直接生成java代码
4. powerDesigner :是一款强大的设计工具,可以画很多图
5.2 对象在内存中的结构图
作为扩展了解,便于你去理解一些东西
6.成员变量vs局部变量
1. 位置不同
①成员变量:在类中
②局部变量:在方法中,形参,代码块
2. 初始值不同
①成员变量:有初始值,比如引用类型null,基本类型比如int 0
②局部变量:必须初始化,才能使用【必须显示赋值,才能使用】
3. 作用范围不同
①成员变量:整个类中
②局部变量:它所在的{}范围
4. 在内存中的区域不同 栈 vs 队列:
栈:先进后出
队列:先进先出 FIFO ---》First in First out
①成员变量:在堆内存中
②局部变量:在栈中
5. 生命周期不同
①成员变量:随着对象的存在而存在,对象被标记为垃圾对象,需要一个过程,同时回收也需要一 个过程
②局部变量:在栈中,用完之后就出栈
7.对象数组
数组中存放的是对象
明确:
1. 数组如何定义?数据类型[] 数组名称
2. 对象的数据类型是啥? 它的所属类,即该对象是通过哪个类【模版】造出来的。String name; Stu stu
3. 是否可以通过数组的方式操作对象?比如,获取到该班级所有学生的名字 需求:使用对象数组存放一批学生信息(姓名、学号、分数),若学生的分数低于60分,给他加2分辛 苦分。