day10_oop

今日内容

零、 复习昨日
一、面向对象的概念
二、面向对象编程
三、内存图

零、 复习昨日

晨考复习…

一、作业

package com.qf.homework;

import java.util.Arrays;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 * ----------------
 * 引用数据类型的默认初始值null
 */
public class Homework2 {

    public static void main(String[] args) {
        // {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0}
        int[] arr1 = {1,2,5,2,8,9};
        int[] arr2= {1,3,1,3,6,7};

        //int[] arr3 = arrayConcat(arr1, arr2);
        set(arr1,arr2);


    }

    // {1,2,5,8,9}{1,3,0}---->{0,1,2,3,5,8,9}
    public static void set(int[] arr1,int[] arr2) {
        int[] arr3 = arrayConcat(arr1, arr2);
        Arrays.sort(arr3);
        System.out.println(Arrays.toString(arr3) );
        // [0, 1, 1, 2, 2, 5, 6, 7, 8, 9]
        // [0, 1, 2, 5, 6, 7, 8, 9]
        /**
         * 去重的整体思路
         * 1 新建一个与原数组一样长度的数组,用来存储去重后的数组
         *   为什么一样长?
         * 2 从原数组取值向新数组放,但是如果新数组中有该元素,则不放
         *   需要记录存入多少个元素
         * 3 需要再创建一个数组,数组长度是上一步记录的元素个数
         *   然后从去重数组中拷贝元素到最后的这个数组
         */
        // [0, 1, 1, 2, 2, 5, 6, 7, 8, 9]
        // arr4用来存储去重后的数组
        int[] arr4 = new int[arr3.length];
        int index = 0;
        // 取原数组中每一个
        for (int i = 0; i < arr3.length; i++) {
            boolean flag = false;
            // 取去重后的数组的每一个
            for (int j = 0; j < arr4.length; j++) {
                if (arr3[i] == arr4[j]) {
                    flag = true;
                }
            }
            if (!flag) {
                arr4[index] = arr3[i];
                index++;
            }
        }
        System.out.println(Arrays.toString(arr4) );
        // 创建一个数组,存储去重后,长度合适的数组
        int[] arr5 = new int[index];
        System.arraycopy(arr4,0,arr5,0,index);
        System.out.println(Arrays.toString(arr5) );

    }



    // 数组合并
    // {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0}
    public static int[] arrayConcat(int[] arr1,int[] arr2) {
        // 新创建一个数组
        int[] arr3 = new int[arr1.length + arr2.length];
        //System.out.println("复制前"+Arrays.toString(arr3) );
        // 方案1
        // // 数组拷贝
        // System.arraycopy(arr1,0,arr3,0,arr1.length);
        // System.out.println("复制第1个"+Arrays.toString(arr3) );
        //
        // System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);
        // System.out.println("复制第2个"+Arrays.toString(arr3) );

        // 方案2
        // for (int i = 0; i < arr1.length; i++) {
        //     arr3[i] = arr1[i];
        // }
        // System.out.println("复制第1个"+Arrays.toString(arr3) );
        //
        // for (int i = 0; i < arr2.length; i++) {
        //     arr3[arr1.length + i] = arr2[i];
        // }
        // System.out.println("复制第2个"+Arrays.toString(arr3) );

        // 方案3
        for (int i = 0; i < arr3.length; i++) {
            if (i < arr1.length){
                arr3[i] = arr1[i];
            } else {
                arr3[i] = arr2[i-arr1.length];
            }
        }
        //System.out.println("复制第2个"+Arrays.toString(arr3) );
        return arr3;
    }
}

二、面向对象的概念

2.1 面向对象介绍

C语言 面向过程编程

C++ 半面向过程半面向对象

Java 面向对象编程

面向过程?

把大象装进冰箱,吃烩面

  • 面向过程编程,事情每一步骤都要考虑到

举例: 盖房子

面向对象?

  • 面向对象编程,只关注事情中的对象,事情由对象去做
  • 面向对象编程是在面向过程编程的基础上进行的

举例: 盖别墅:

2.2 面向对象编程的特点

面向对象编程(oop - Object-oriented programming),有三大特点

  • 封装
  • 继承
  • 多态

什么是对象?

对象就是一个实实在在的东西.比如说: 正在使用的电脑,手里的拿的手机,正在讲课老师

对象包含什么?

  • 属性, 即特征,描述性的东西,一般名词
    • 颜色,价格,款型
  • 行为,即动作,对象能做的事情,一般动词
    • 电脑能打字,能运行
    • 手机能打电话,发短信,玩游戏

对象从哪来的? --> 类

对象是从"模型"中来的,模型即Java中的类.

类是什么?

种类,人以类聚,一类人,…

类: 具体相同的特性和能力对象的集合,相当于是一个模板

总结:

  • 类是一个模板,类中定义了属性和方法
  • 由类创建出对象
  • 对象就是类的具体体现,属性会有具体值,方法能执行

类是模板,类创建出对象

类中有属性有方法, 对象也有属性和方法且会具体体现

三、面向对象编程开发

面向对象编程,主要就是对类 属性 方法和对象的设计和使用

3.1 编写类

以 手机类为例

package com.qf.oop;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc 类中有属性方法
 * 这些属性和方法也称为成员属性(成员变量)和成员方法
 */
public class Phone {

    /**
     * 属性即变量
     * 属性定义: [访问修饰符] 数据类型 变量名;
     * 访问修饰符可写可不写
     */
     String color; // 颜色
     double price; // 价钱
     String type;  // 型号
     String brand; // 品牌

    /**
     * 行为,即方法
     * 访问修饰符 返回值类型 方法名([参数]){
     *     // return 值;
     * }
     */
    // 打电话,参数是手机号
    public void call(String num) {
        System.out.println("给"+num+"打电话" );
    }

    // 玩游戏
    public void playGame() {
        System.out.println("玩游戏" );
    }
}

汽车类

package com.qf.oop;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc 汽车类
 */
public class Car {

    // 成员属性
    double price;
    String color;
    String type;

    // 成员方法
    public void run(){
        System.out.println("开动" );
    }
    public void takePeople()  {
        System.out.println("带人" );
    }
    public void didi() {
        System.out.println("didi~~" );
    }
}

学生类

package com.qf.oop;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class Student {

    String name;
    int age;
    char sex;
    String stuNum;

    public void study(){
        System.out.println("学习" );
    }
    public void eat() {
        System.out.println("吃饭" );
    }
}

3.2 创建&使用对象

对象是由类创建出来的.

语法: 类名 对象名 = new 类名();

        // 创建对象
        // 数据类型 变量  = 值;
        // int[]   数组名 = new int[3];
        //   类名 对象名 = new 类名();
        Phone p1 = new Phone();

创建完对象,使用对象

  • 调用属性
    • 对象名.属性
  • 调用方法
    • 对象名.方法名();

        /**
         * 使用对象,无非就是使用对象内部的属性和方法
         * -------------------------------------
         * 属性就是变量,使用属性就是变量的取值赋值
         *--------------------------------------
         *  取出属性值:
         *      数据类型 变量名 = 对象名.属性名;
         *  属性赋值:
         *      对象名.属性名 = 值;
         */
        // 属性取值
        double price = p1.price;
        System.out.println(price );// 0.0

        String brand = p1.brand;
        System.out.println(brand );// null

        String color = p1.color;
        System.out.println(color );// null

        String type = p1.type;
        System.out.println(type ); // null


        // 属性赋值
        p1.brand = "HUAWEI";
        p1.type = "META50";
        p1.color = "曜石黑";
        p1.price = 3980.0;

        // 再次取值
        System.out.println(p1.brand);
        System.out.println(p1.type);
        System.out.println(p1.color);
        System.out.println(p1.price);
        /**
         * 对象使用另外一个操作,就是使用对象的方法
         * 使用方法就是调用方法让其执行
         *  语法:
         *      [数据类型 变量名 = ]对象名.方法名([实参]);
         */
        p1.call("110");
        p1.playGame();

3.3 对象内存图

new 类名();

  • 这是在堆内存开辟空间创建对象
  • 对象分配地址值
  • 对象内部属性和方法进行初始化
    • 属性初始化赋值,按照数据类型默认值赋值
  • 创建对象完毕,将地址值赋值给对象名

day10_oop_第1张图片

使用对象

  • 对象名.属性

day10_oop_第2张图片

使用方法

  • 对象.方法();

day10_oop_第3张图片

3.4 类和对象的关系

对象是由类创建出的.

类是模板,通过模板做出无数个对象…

对象和对象之间是独立的,每个对象都会拥有属于自己的属性和方法

day10_oop_第4张图片

    public static void main(String[] args) {
        /**
         * 类是模板,可以创建出多个对象
         *
         */
        Phone p1 = new Phone( );
        System.out.println(p1 );
        p1.brand = "HUAWEI";
        p1.type = "P30";
        p1.color = "翡翠绿";
        p1.price = 2980.0;
        System.out.println(p1.brand);
        System.out.println(p1.type);
        System.out.println(p1.color);
        System.out.println(p1.price);


        Phone p2 = new Phone( );
        System.out.println(p2 );
        System.out.println(p2.brand);
        System.out.println(p2.type);
        System.out.println(p2.color);
        System.out.println(p2.price);
    }

多个引用指向同一个对象

        Phone p2 = new Phone( ); // p2指向对象

        Phone p3 = p2; // 将p2赋值给p3,其实是将地址值赋值p3
                      // p2和p3是同一个地址,指向的是内存的同一个对象
        p3.price = 3980.0; // p3将对象属性修改
        System.out.println(p3.price );
        System.out.println(p2.price );// p2也可以看到属性被修改

day10_oop_第5张图片

四、总结

今天只是面向对象入门,主要在于理解类 属性 方法 对象
类是模板,由类创建出对象
类有两个成员: 成员属性和成员变量
类可以创建出多个对象,每个对象都有属于自己的属性和方法
----------
今天要掌握:
1 根据需求创建类
2 通过类创建对象
3 理解内存关系

附录

concat 合并,拼接
null 空
remove 移除
set 设置,数学/计算机 都要set来代表集合,且其中数据不重复
object 对象
call 打电话,调用
play  玩
game  游戏
brand 品牌
test 测试
text 文本

你可能感兴趣的:(#,Java2307,java,算法,数据结构)