Java day04——数组排序、面向对象、方法重载、构造方法、JVM内存空间变化

数组排序

选择排序

每一轮找最大值放后面
选择: arr: 8 , 2 , 3 , 7 , 1
第一轮:
默认index=0
1: 如果 arr[1] > arr[index], index就替换掉, index=0
2: 如果 arr[2] > arr[index], index就替换掉, index=0
3: 如果 arr[3] > arr[index], index就替换掉, index=0
4: 如果 arr[4] > arr[index], index就替换掉, index=0
交换 index位置 和 当前最后一个位置 length-1
1 , 2 , 3 , 7 , 8
i:0
j:1~5
第二轮:
1: arr[0] 比较 arr[1], 记录index=0
2: 如果 arr[2] > arr[index], index就替换掉, index=2
3: 如果 arr[3] > arr[index], index就替换掉, index=3
交换 index位置 和 当前最后一个位置 length-1-1
1 , 2 , 3 , 7 , 8
i:1
j:1~4
第三轮:
1: arr[0] 比较 arr[1], 记录index=0
2: 如果 arr[2] > arr[index], index就替换掉, index=2
交换 index位置 和 当前最后一个位置 length-1-2
1 , 2 , 3 , 7 , 8
i:2
j:1~3
第四轮:
1: arr[0] 比较 arr[1], 记录index=0
交换 index位置 和 当前最后一个位置 length-1-3
1 , 2 , 3 , 7 , 8
i:3
j:2
i: i=0; i < length-1;i++
j: j=1; j < length-i;j++

   public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int index = 0; // 记录最大值坐标的
            for (int j = 1; j < arr.length - i; j++) {
                if (arr[j] > arr[index]) {
                    index = j;
                }
            }
            // 交换index和length-1-i位置的值
            int temp = arr[index];
            arr[index] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }
    }

冒泡排序

比较相邻元素,小的放前面,大的放后面
冒泡排序分析: arr: 8 , 2 , 3 , 7 , 1: length=5
第一轮: i=0
2, 8, 3, 7, 1 j=0 arr[j] > arr[j+1]->交换
2, 3, 8, 7, 1 j=1
2, 3, 7, 8, 1 j=2
2, 3, 7, 1, 8 j=3
第二轮: i=1
2, 3, 7, 1, 8 j=0
2, 3, 7, 1, 8 j=1
2, 3, 1, 7, 8 j=2
第三轮: i=2
2, 3, 1, 7, 8 j=0
2, 1, 3, 7, 8 j=1
第四轮: i=3
1, 2, 3, 7, 8 j=0
i: i=0; i < length-1;i++
j: j=0; j < length-1-i;j++

public static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

插入排序

将数组分成两部分, 一部分是已经排好的, 另一部分挨个访问, 插入到前一部分合适的地方

面向对象

定义

面向对象: OOP Object Oriented Programming
一切皆对象, Java操作的基本单位就是对象
类/类型: 所有同种对象共同的特征和行为, 抽象出来成为类
对象: 符合类的实例化个体

命名规则

方法名: 首字母小写、第二个单词开始首字母大写 - 驼峰命名法。长度不限, 但是一定要可读性好
类名: 驼峰命名法, 首字母大写
System Scanner Math Arrays

对象的使用

  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)

构造方法/构造器

  • 目的: 为了给成员变量初始化
  • 特点: 方法名要和类名一致,并且没有返回值类型
  • 构造方法可以重载
  • 当类中没有定义构造方法时, 编译器会默认添加无参构造方法
		class Foo {
        String name;
        Foo(String name) {
            this.name = name
        }
    }

.this

  • 表示当前对象 - 这个对象
  • 哪个对象调用方法, 就表示哪个对象
  • this可以调用自己的成员变量, 当成员变量和临时变量重名时, this不能省
  • this也可以调用自己的成员方法, this可以省略
  • this也可以调用自己的构造方法, this(参数), this不能省
  • 只能放在构造方法的第一行
public class Student {
    // 成员变量 -> 可以不用初始化, 默认初始值
    // 默认初始值: 基本数据类型:0  引用类型:null
    String name;
    int age;
    // 类中的成员变量是Car类型, Car也是一个类
    Car car;

    // 构造方法/构造器
    Student() { // 无参构造器
//        this("无名", 100, null);
    }
    Student(String name, int age, Car car) { // 有参构造器
//        this();
        // 成员变量和临时变量同名, 使用时, 就近原则
        // 这时, 想要用成员变量, 需要借助this
        this.name = name;
        this.age = age;
        this.car = car;
//        this.study("java");
    }

Student[] arr5 = new Student[3];
arr5[0] = new Student("小明", 21, null);

引用类型的数组

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

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

JVM内存空间变化

方法区: 类加载后的信息
栈: 临时变量\局部变量
堆: 引用的数据

方法栈消失

方法返回之后,方法栈就会消失
在这里插入图片描述

数组间的赋值

数组是引用类型
在这里插入图片描述

类加载到方法区

在这里插入图片描述

引用类型数组对象

引用类型的成员变量在堆中单独开辟一块空间
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值