day11_oop_面向对象基础

零、今日内容

一、作业
二、面向对象

一、作业

题目26

设计方法,在一个数组中,返回所有的 指定数据的下标
例如, 这个数组[1,2,8,4,5,7,8,7,8,9],找到其中元素8的下标[2,6,8]
    public static void main(String[] args) {
        int[] arr = {1,2,8,4,5,7,8,7,8,9};
        int[] indexArr = findAllIndexByElement(arr,7);
        System.out.println(Arrays.toString(indexArr) );
    }

    // 设计方法,在一个数组中,返回所有的 指定数据的下标
    // 例如, 这个数组[1,2,8,4,5,7,8,7,8,9],找到其中元素8的下标[2,6,8]
    public static int[] findAllIndexByElement(int[] arr,int e) {
        // 创建一个数组存储下标,暂时创建最大长度数组
        int[] tempArr = new int[arr.length];
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if(e  == arr[i]){
                tempArr[index] = i;
                index++;
            }
        }

        // 再创建一个找到下标个数大小的数组
        int[] indexArr = new int[index];
        System.arraycopy(tempArr,0,indexArr,0,index);
        return indexArr;
    }

二、面向对象【全是重点】

2.1 面向对象介绍

java编程核心就是面向对象开发(oop)

在此之前

  • c 面向过程编程
  • c++ 半面向过程半面向对象
  • java 是面向对象编程

面向过程: 做一件事情,中间所有过程都需要考虑和实现

面向对象: 做一件事情,调用对象来完成

经典话术: 把大象装进冰箱


盖房子:

面向对象开发三大特点

  • 封装
  • 继承
  • 多态

  • 抽象
  • 接口

2.2 面向对象开发的前提

    • 解释: 类就是具有相同属性和行为的一系列对象的集合
    • 简单说,类就是一个模板,是一个统称
    • 举例: 人类
      • 手机类
  • 行为
    • 解释: 即完成一些功能的动作行为
    • 简单说,就是java中的方法
    • 举例: 人类行为: 吃饭,睡觉,工作
      • 手机类行为: 打电话,发短信,玩游戏,拍照
  • 属性
    • 解释: 属性即描述这一类的特征
    • 简单说,就是java中变量
    • 举例: 人类属性: 身高,体重,性别,肤色,人种
      • 手机类属性: 品牌,价格,颜色
  • 对象
    • 解释: 对象就是类的具体体现
    • 举例: 人类的对象: 邱哥
      • 手机类的对象: 就是一会儿吃饭付钱的手机(雅川青,华为,打电话,发短信)

类,属性,行为,对象 什么关系?

  • 类包含属性和行为 (人类有身高体重年龄属性,吃饭的行为)
  • 类创建对象,或者说对象由类产生 (通过new 类创建出对象)
  • 对象也有属性和行为,而且属性还有具体值,行为还能具体体现 (张三这个人的对象,具体身高180cm,体重50kg,年龄18岁属性值,还能具体表现出吃饭的行为)

2.3 定义类

面向对象编码在于使用对象,对象由类创建出来,类中有属性和方法

面向对象开发步骤

  • 先定义类
  • 在类中定义属性和方法
  • 最后再由类创建出对象
  • 使用对象

练习: 定义手机类 (属性: 颜色,价格,品牌, 行为: 打电话,打游戏)

/**
 * public 修饰符,单词是公开的
 * class  类标识符,标志这是一个类
 * Phone  随意定义的类名,见名知意即可
 * {}     类体,在其中定义属性和方法
 */
public class Phone {

    /**
     * 属性,其实就是变量
     * [修饰符] 数据类型 属性名;
     * 前面的修饰符可写可不写,写的话可以写public等其他三个
     */
    public String color; // 颜色
    double price;// 价格
    String brand;// 品牌

    /**
     * 方法,与之前学习的方法基本一致
     * 只有一处不一样,就是不需要定义static!
     */
    public void call(int num){
        System.out.println("给"+num+"打电话" );
    }

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

练习: 学生类(属性: 姓名,学号,专业;行为: 学习,吃饭)

public class Student {
    String name;// 姓名
    String stuNo; // 学号
    String subject; // 科目
    double score; // 分数

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

2.4 创建对象

创建对象的语法:

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

例如:
Scanner scanner = new Scanner();
int[] arr = new int[3];

练习: 创建出手机类对象

public class Demo1_oop {

    public static void main(String[] args) {
        // 数据类型 变量名 = 值;
        //   类名   对象名 = new 类名();
        // Scanner s  = new Scanner();
        // 创建手机类对象
        Phone phone = new Phone();
        /**
         * Phone 是自己定义的类名
         * phone 对象名,即变量名,随便定义
         * = 赋值
         * new 新建对象,固定格式
         * Phone(), 是类名(),固定格式
         */
        // 创建一个学生类的对象
        Student s1 = new Student();

        // 创建汽车类对象
        Car car = new Car();
    }

}

2.5 使用对象

使用对象,对象中有什么可以使用?

  • 属性
    • 使用属性语法: 对象名.属性;
    • 给属性赋值: 对象名.属性 = 值;
    • 取出属性值: 数据类型 变量 = 对象名.属性;
  • 方法
    • 使用方法语法: 对象名.方法();
public class Demo2_oop {
    public static void main(String[] args) {
        // 创建对象
        Phone p = new Phone( );

        // ----- 使用对象 -----
        /**
         * ----- 使用属性  -----
         * 属性取值
         *   数据类型 变量 = 对象名.属性;
         *   (创建对象后,属性都是默认值)
         * 属性赋值
         *   对象名.属性 = 值;
         */
        // 属性取值
        double price = p.price;// 取出对象p的price属性值
        System.out.println(price);// 0.0

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

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

        //属性赋值
        p.brand = "HUAWEI";
        p.color = "雅川青";
        p.price = 6999.0;

        // 再取属性值查看
        System.out.println(p.brand );
        System.out.println(p.color );
        System.out.println(p.price );

        /**
         * ----- 使用方法  -----
         * 对象名.方法名();
         * 1) 如果方法有参数,就必须传入实参
         * 2) 如果方法有返回值,建议接收
         */
        // 方法有参数要传实参
        p.call(185909090);
        // 方法有返回值要接收返回值
        String result = p.playGame();
        System.out.println("游戏结果: " + result );

        //------- 回想之前学过的 ------------
        // 创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        // 使用scanner对象调用方法,返回结果
        int n = scanner.nextInt();
    }
}

练习: 创建学生对象,给学生属性赋值(姓名老六,学号666,科目java,分数99,调用方法让其执行)

package com.qf.oop;

/**
 * @desc 练习
 *创建学生对象,给学生属性赋值(姓名老六,学号666,科目java,分数99,调用方法让其执行)
 */
public class Demo3_oop {

    public static void main(String[] args) {

        // 创建学生对象
        Student s = new Student();

        // 属性赋值(对象.属性= 值)
        s.name = "老刘";
        s.stuNo = "6666";
        s.subject = "PUBG";
        s.score = 10.0;

        // 属性取值 (对象.属性)
        System.out.println(s.name );
        System.out.println(s.stuNo );
        System.out.println(s.subject );
        System.out.println(s.score );

        // 调用方法(对象.方法())
        s.study();
        s.eat();
    }
}

练习: 创建汽车对象,给汽车属性赋值(品牌BYD,价格30w,调用方法让其执行)

public class Demo4_oop {

    public static void main(String[] args) {
        Car car = new Car();

        car.price = 300000;
        car.brand = "BYD";

        System.out.println(car.price );
        System.out.println(car.brand );

        car.didi();
        car.run();
    }
}

2.6 创建对象的内存

java的数据类型

  • 基本类型
  • 引用类型: 数组,类,接口
    /**
     * 1 编写java代码
     * 2 idea自动编译成class文件
     * 3 运行程序,Demo5.class字节码文件就会加载到内存
     * 4 main执行,进栈
     * 5 main方法内需要使用Phone类,此时会加载Phone.class文件
     * 6 声明Phone变量,创建Phone对象
     *   6.1 会在堆中开辟空间,分配地址,对象属性初始化
     *   6.2 地址值赋值了对象名(变量),也就是引用
     */
    public static void main(String[] args) {
        Phone p = new Phone();
        System.out.println(p );// 135fbaa4是地址值

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


        p.color = "红色";
        System.out.println(p.color );// 红色
        p.call(119);
    }

创建对象内存图1

2.7 一个类创建多个对象

需求: 创建多个手机对象,每个对象属性赋不同的值

 * @desc 一个类创建多个对象
 */
public class Demo6 {
    public static void main(String[] args) {
        // 创建第1个对象
        Phone p1 = new Phone();
        System.out.println(p1 );
        p1.color = "红色";
        p1.price = 2000;


        //创建第2个对象
        // 只要有new,就会开辟空间,分配地址,属性初始化
        Phone p2 = new Phone();
        System.out.println(p2.color );// null
        System.out.println(p2.price );// 0.0

    }
}

创建对象内存图2

结论:

  1. 一个类可以创建多个对象的
  2. 每个对象都会有属于自己的属性和方法,每个对象间属性和方法互不影响

2.8 多个引用指向同一个对象

 * @desc 多个引用指向同一个对象
 */
public class Demo7 {

    public static void main(String[] args) {
        Phone p1 = new Phone();
        p1.color = "红色";
        p1.price = 3000;

        Phone p2 = p1;// 引用传递
        // p1和p2两个引用指向内存的同一个对象

        System.out.println(p2.price );// 3000
        System.out.println(p2.color );// 红色

        p2.color = "白色";
        p2.price = 4000;

        System.out.println(p1.color );// 白色
        System.out.println(p1.price );// 4000
    }

}

创建对象内存图3

应用场景就是,方法的参数列表是类名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值