Java第四课(数组排序和面向对象)

本文回顾了Java第三课的数组基础知识,包括初始化、内存结构和方法等。接着介绍了Java第四课的重点——数组排序,讲解了冒泡排序、选择排序和插入排序的原理和过程。最后,引入了面向对象的概念,解释了类与对象的关系,以及对象的使用步骤,如构造方法、成员变量和方法重载等。
摘要由CSDN通过智能技术生成

Java 第三课回顾

数组
3种初始化方式
长度length, 长度不可变
引用类型 -> 堆
访问, index: 0~length-1
内存图: 非常重要
方法
修饰词 返回值类型 名字(参数列表) {方法体}
方法签名: 方法名+参数列表
返回值: return
调用: 执行方法体
JVM
方法区: 类加载后的信息
栈: 临时变量\局部变量
堆: 引用的数据

方法参数
基本数据类型, 就是传递的是值
引用类型, 传递的是引用-地址

Java第四课

数组排序

1.冒泡排序

1.1 原理
• 比较相邻的元素,将小的放到前面。
冒泡排序举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
ary={8,2,3,7,1}
ary={2,8,3,7,1}
ary={2,3,8,7,1}
ary={2,3,7,8,1}
ary={2,3,7,1|8}
ary={2,3,7,1|8}
ary={2,3,7,1|8}
ary={2,3,1|7,8}
ary={2,3,1|7,8}
ary={2,1|3,7,8}
ary={1,2,3,7,8}

1.2 过程分析

• i 代表次数
• j 代表比较位置
在这里插入图片描述
备注:
• i 的取值范围是: i = 0 ~ <ary.length-1
• j 的取值范围是: j = 0 ~ <ary.length - i -1

1.3 参考代码
在这里插入图片描述
2.选择排序

2.1 选择排序原理

• 将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素
• 循环第 1 条规则,找出最小元素,放于第 1 个位置
• 经过 n-1 轮比较完成排序
简单而言,每轮都找到最小的放到前面。举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
数组: ary={8 , 2 , 3 , 7 , 1}
第 1 轮: ary={1 | 8 , 3 , 7 , 2}
第 2 轮: ary={1 , 2 | 8 , 7 , 3}
第 3 轮: ary={1 , 2 , 3 | 8 , 7}
第 4 轮: ary={1 , 2 , 3 , 7 | 8}
第 5 轮: ary={1 , 2 , 3 , 7 | 8}

2.2 过程分析

• i 代表第一个数据的位置
• j 代表后部每一个数据的位置
在这里插入图片描述
备注:
• i 的范围是: 0 ~ <ary.length - 1
• j 的范围是: i+1 ~ <ary.length

2.3 参考代码
在这里插入图片描述
3.插入排序

3.1 插入排序原理

• 将数组分为两部分, 将后部分的第一个逐一与前部分每一个元素比较,在合理位置插入
• 插入排序算法效率要高于选择排序和冒泡排序
插入排序举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
第 1 步,假设第一个元素是已排序的 {8|2,3,7,1}
第 2 步,用 2 和"|“之前的所有元素比较,并插入 {8|2,3,7,1}
取出 2(temp=2)
temp 和 8 比,比 8 小,将 2 的位置赋值为大数(ary[1]=8) {8|8,3,7,1}
因为已到边界,直接赋值(ary[0]=2) {2,8|3,7,1}
2 和 8 排序完成
第 3 步,用 3 和”|“之前的所有元素比较,并插入 {2,8|3,7,1}
取出 3(temp=3)
temp 和 8 比,比 8 小,3 的位置赋值给大数(ary[2]=8) {2,8|8,7,1}
temp 和 2 比,比 2 大,插入 2 后面 (ary[1]=3) {2,3,8|7,1}
3、2、8 排序完成
第 4 步,用 7 和”|“之前的所以元素比较,并插入 {2,3,8|7,1}
取出 7(temp=7)
temp 和 8 比,比 8 小,7 的位置赋值给大数(ary[3]=8) {2,3,8|8,1}
temp 和 3 比,比 3 大,插入 3 后面(ary[2]=7) {2,3,7,8|1}
7、2、3、8 排序完成
第 5 步,用 1 和”|"之前的所以元素比较,幵插入 {2,3,7,8|1}
取出 1(temp=1)
temp 和 8 比,比 8 小,1 的位置赋值给大数 8 {2,3,7,8|8}
temp 和 7 比,比 7 小,8 的位置赋值给大数 7 {2,3,7,7|8}
temp 和 3 比,比 3 小,7 的位置赋值给大数 3 {2,3,3,7|8}
temp 和 2 比,比 2 小,3 的位置赋值给大数 2 {2,2,3,7|8}
到边界,赋值(ary[0]=1) {1,2,3,7,8|}
1、2、3、7、8 排序完成

3.2 过程分析

• temp 代表取出待插入的元素
• i 代表后组待插入元素的位置
• j 代表前组每个元素的位置
在这里插入图片描述
备注:
• i 的取值范围是: i=1 ~ <ary.length i++
• j 的取值范围是: j= i-1 ~ >=0, j-- j–

3.3 参考代码
在这里插入图片描述
经典写法
在这里插入图片描述

面向对象:OOP ( Object Oriented Programming)

一切皆对象, Java操作的基本单位就是对象
类/类型: 所有同种对象共同的特征和行为, 抽象出来成为类
对象: 符合类的实例化个体
例子 :
学生特征: - 属性/成员变量
姓名 性别 年龄 课程方向 学号…
学生行为: - 成员方法
吃饭 学习 说话 睡觉
以上抽象出一个概念: 类 - 学生, 实体类
对象: 符合类的特征的独立个体
类和对象的关系: 先定义/声明 类, 然后再创建对象

class: 类 ,类型 和int功能一样

使用对象的步骤:

1.必须先有类
class Student {
    成员变量 name age
    成员方法
}
2.才能创建对象 - main - 方法 - 存在于类中
    Student s = new Student();
3.有了对象, 对象包含了成员变量(name和age)和成员方法
    使用, 用 . 来调用的

局部变量和成员变量的区别

1.声明位置
    局部变量: 方法中
    成员变量: 类中
2.初始化
    局部变量: 使用前必须初始化
    成员变量: 可以初始化, 如果没有初始化, 会有默认初始值
3.个数
    局部变量: 声明个数
    成员变量: 由对象决定, 有几个对象就有几个成员变量
4.内存中的位置
    第一次使用类[创建类的对象]之前, 会先将类进行加载
    局部变量: 方法栈中, 方法结束, 局部变量消失
    成员变量: 跟对象一起, 在堆中

在这里插入图片描述

方法重载

方法名一样, 参数列表不一样的几个方法
跟返回值类型无关
举例: println print
参数列表不一样的情况: 个数不同\类型不同\顺序不同
    (int a)
    (double d)
    (int a, int b)
    (int b, int a) ×
    (int a, float b)
    (float b, int a)

构造方法/构造器

目的: 为了给成员变量初始化
特点: 方法名要和类名一致
没有返回值类型
构造方法可以重载
当类中没有定义构造方法时, 编译器会默认添加无参构造方法

this
表示当前对象 - 这个对象
哪个对象调用方法, 就表示哪个对象
this可以调用自己的成员变量, 当成员变量和临时变量重名时, this不能省
this也可以调用自己的成员方法, this可以省略
this也可以调用自己的构造方法, this(参数), this不能省
只能放在构造方法的第一行

NullPointerException: 空指针异常
产生原因: 调用了null空值得 成员变量 或者 方法

引用类型的数组

使用步骤:
 1.给数组初始化
    Student[] ss = new Student[5]; // 默认值都是null
 2.给数组元素初始化
    ss[0] = new Student();
    ss[1] = new Student();
    ...

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值