day08内存 + 面向对象

内存

  • 数组 //静态初始化:创建+ 赋值

    int[] a= {1,2,3,4,5,6,7,8};

    System.out.println(a[0]);

  • 动态初始化; 包含默认初始化

​ int [] b = new int [10];

​ b[0] = 10;

​ b[1] = 10;

​ System.out.println(b[0]);

​ System.out.println(b[1]);

​ System.out.println(b[2]);


数组四个特点

  • 长度确定
  • 元素相同类型 ,不允许出现混合类型
  • 数组的元素可以是任何类型,包括基本类型和引用类型
  • 数组本身就是对象,JAVA中对象是在堆中, 数组对象本身是在堆中的

数组边界 ;小结

  • 数组是相同数据类型(数组类型可以为任意类型)的有序集合
  • 数组也是对象。数组元素相当于对象的成员变量
  • 数组长度确定不可变 如果越界,则报错:ArraylndexOutofBounds

冒泡排序

import java.util.Arrays;

public class Array {

    public static void main(String[] args) {
        int[] a = {1, 2, 3, 55, 66, 52, 6, 7};
        int[] sort = sort(a);
        System.out.println(Arrays.toString(sort));
    }


    public static int[] sort(int[] array) {

//        临时变量

        int temp =0;

//        外层循环,判断我们这个要走多少次;
        for (int i = 0; i < array.length - 1; i++) {

            boolean flag=false;  //通过flag标识位减少没有意义的比较

//            内层循环,比价判断两个数,如果第一个数,比第二个数大 则交换位置
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j + 1] > array[j]) {

                    temp = array[j];

                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = true;
                }

				
            }
			if (flag == false) {
                    break;
        }

        return array;

    }
}


稀疏数组 (数据结构)

  • 介绍 : 当一个数组中大部分元素为0 ,或同一值得数组时,可以使用稀疏数组来保存

  • 处理方式 1.记录一共几行几列,多少个不同值

    ​ 2.把具有不同值的元素和行列记录在一个小规模的数组中,从而缩小程序的规模


面向对象 (oop)

  • 以类的方式组织代码,以对象的组织(封装)数据

  • 三大特性 1.封装

    ​ 2.继承

    ​ 3.多态

回顾方法及加深

  • 方法的定义

  • 修饰符

  • 返回类型

​ public(修饰符) static void(返回值类型,void 为空,注意) main(方法名)(String[] args) {

​ return ; 返回值

  • break : 跳出switch 结束循环 和return (整个方法结束,不能在输出)
  • 方法名 ; 驼峰原则 + 见名知意
  • 参数列表 (参数类型) (参数名) ...
  • 异常抛出 报错:ArraylndexOutofBounds(Array 数组抛出异常) / IOException
  • 方法调用

    • 静态方法

​ // static

  • 非静态方法

  • 形参和实参

    public class Demo01 {
    
        public static void main(String[] args) {
            int a = 1;
            System.out.println(a);   //1
    
            Demo01.change(a);
    
            System.out.println(a);//1
        }
        //返回值为空
        private static void change(int a) {
            a = 10;//随便赋一个  最后输出还是上面的
    
        }
    
    
    }
    
    
  • 值传递和引用传递 注意 java都是值传递

  • this关键字


类与对象的创建

Application  主程序 Main
    
public class Application {
    public static void main(String[] args) {


//        类;抽象的,实例化
//        类实例化后返回一个自己的对象!
//        student 对象就是一个Student类的具体实例

        Student xm = new Student();
        Student xh = new Student();

        xm.name="小明";
        xm.age=3;

        System.out.println(xm.name);
        System.out.println(xm.age);

        xh.name="小红";
        xh.age=3;

        System.out.println(xh.name);
        System.out.println(xh.age);




    }
}




public class Student {

//    学生类

         //属性; 字段
    String name;  //null
    int age;      //0



         // 方法

    public void study( ) {
        System.out.println(this.name+"在学习");
    }
}


构造器

  • 1.和类名相同
  • 2.没有返回值

作用

  • 1.new 本质在调用构造方法
    1. 初始化对象的值

注意点:

    1. 定义有参构造之后 ,如果想使用无参构造, 显示的定义一个无参的构造 // Alt + Insert (快捷组合键)

this. = (后面传进来的值)


创建内存分析


简单小结类与对象

  1. 类与对象

    类是一个模板: 抽象,对象是一个具体的实例

  2. 方法

​ 定义、调用

  1. 对应的引用

​ 引用类型 : 基本类型 (8)

​ 对象是通过引用来操作的 : 栈 --- > 堆

  1. 属性: 字段Field/ 成员变量

​ 默认初始化:

​ 数字: 0 0.0

​ char : u0000

​ boolean : false

​ 引用 : null

​ // 修饰符 属性类型 属性名 = 属性值

  1. 对象的创建和使用

    • 必须使用new 关键字创建对象 ,

      构造器 Person kuang = new person();

    • 对象的属性 kuang.name

    • 对象的方法 kuang.sleep()

  2. ​ 静态的属性 属性

    ​ 动态的方法 方法()

​ ~ 封装、 继承 、 多态 ~


1封装 (属性私有, get/set)重点*** // 高内聚、低耦合

封装主要对属性 (属性私有)

//名字 ; 学号 ; 性别

//private (属性私有 ,方法可以不动)

private String name;

private int id;

private char sex;

意义

  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统可维护增加了
//get 获取这个数据
public String  getName(){
    return  this.name;
}

//set   给这个数据设置值
pulic void  setName(String name){
    
    this.name  =  name;
    
pulic void  setAge(String age){
    if (age>120|| age<0){//不合法
        this.age  =3;
    }else{
        this.age age     // 封装的好处。 区别方法的合理性
    }    
    
		}
  
    //alt  +insert     快捷设置get 和set
}

//alt +insert 快捷设置get 和set


2继承 extends

注意点;

  • java 中只有单继承 ,没有多继承 // Ctrl+ H 快捷键

  • obiect 类

  • super.print() //父类的调用 调用父类的必须在子类的第一行、有时没写但是存在 ,隐藏的代码 super();

    this.print() //子类的调用 。 super和this 不能同时调用构造方法

    注意点 * 只要写了无参构造 ,第一时间+加写 无参构造

    代表对象不同:

    ​ this : 本身调用者这个对象

    ​ super: 代表父类对象

    前提

    ​ this() : 没有继承也能用

    ​ super(): 只能在继承条件才可以用

    构造方法

    ​ this (): 本类的构造

    ​ super(): 父类的构造


3重写

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符 :范围可以扩大但不能缩小 public=>>Protected=>>private
  4. 抛出的异常: 范围 可以缩小 (解决问题只能越来越小) ClassNotFoundException=====>> Exception(大)

重写 ===== 子类的方法和父类必要一致; 方法体不同

为什么需要重写

  1. 父类的功能,子类不一定需要   或者不同

ALT + Insert ; =====>> override

注意事项:

  1. 多态是方法的多态 ,属性没有多态

  2. 父类和子类 ,有联系 (有关系的类)

  3. 存在条件 : 继承关系 ,方法需要重写,父类引用指向子类对象

    3.1 static 方法,属于类,他不属于实例

    3.2 final 常量;

    3.3 private 方法;


instanceof (类型转换) 引用类型 System.out.println(x instanceof y);


static 静态

posted @ 2022-08-30 20:57  小土豆888888  阅读(38)  评论(0)    收藏  举报