day11_oop_面向对象基础

news2024/11/28 20:43:28

零、今日内容

一、作业
二、面向对象

一、作业

题目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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算安全的新挑战:零信任架构的应用

文章目录 云计算的安全挑战什么是零信任架构&#xff1f;零信任架构的应用1. 多因素身份验证&#xff08;MFA&#xff09;2. 访问控制和策略3. 安全信息和事件管理&#xff08;SIEM&#xff09;4. 安全的应用程序开发 零信任架构的未来 &#x1f389;欢迎来到云计算技术应用专栏…

vue-3

一、文章内容概括 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 二、Vue生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09…

二叉搜索树的初步认识

二叉搜索树与常见的查找算法有什么区别&#xff1f; 首先&#xff0c;如果有同学不知道有哪些查找算法可以查看&#xff1a;常见查找算法_加瓦不加班的博客-CSDN博客 如果还有一些不了解的&#xff0c;请查看加瓦不加班_数据结构,链表,递归-CSDN博客 接下来&#xff0c;我们来…

玄子Share- IDEA 2023 SpringBoot 热部署

玄子Share- IDEA 2023 SpringBoot 热部署 修改 IDEA 部署设置 IDEA 勾选如下选项 新建 SpringBoot 项目 项目构建慢的将 Spring Initializr 服务器 URL 改为阿里云&#xff1a;https://start.aliyun.com/ 在这里直接勾选Spring Boot Devtools插件即可 测试 切出 IDEA 项目文…

「专题速递」AR协作、智能NPC、数字人的应用与未来

元宇宙是一个融合了虚拟现实、增强现实、人工智能和云计算等技术的综合概念。它旨在创造一个高度沉浸式的虚拟环境&#xff0c;允许用户在其中交互、创造和共享内容。在元宇宙中&#xff0c;人们可以建立虚拟身份、参与虚拟社交&#xff0c;并享受无限的虚拟体验。 作为互联网大…

2023年H1汽车社媒营销趋势报告

2023上半年车市“内卷”&#xff0c;汽车营销玩法越来越多样&#xff0c;品牌的矩阵式营销也成为头部车企重点营销战略。 据乘联会预测&#xff0c;2023下半年车市将受到二季度价格战的透支&#xff0c;需要一定修复期。在整体形势较不利的情况下&#xff0c;车企如何破局实现销…

通过IP地址如何计算相关地址

以IP地址为1921681005 子网掩码是2552552550为例。算出网络地址、广播地址、地址范围、主机数。 分步骤计算 1&#xff09; 将IP地址和子网掩码换算为二进制&#xff0c;子网掩码连续全1的是网络地址&#xff0c;后面的是主机地址。 虚线前为网络地址&#xff0c;虚线后为主机…

基于Java的个性化旅游攻略系统设计与实现(源码+lw+ppt+部署文档+视频讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

yolov7的bug,无法指定显卡(程序默认0号卡)

**问题&#xff1a;**命令行参数指定的是4号卡&#xff0c;但实际却总是在0号卡建立进程 真抽象啊&#xff0c;这一步&#xff0c;模型被送到0号卡&#xff0c;但实际上&#xff0c;送到了4号卡&#xff08;进程是在4号卡上建立的&#xff09; 解决办法&#xff1a; 在train.py…

【LeetCode热题100】--230.二叉搜索树中第K小的元素

230.二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 二叉搜索树的中序遍历是有序的&#xff0c;所有先得到其有序序列&#xff0c;然后在取…

端口没有占用,Springboot却提示端口占用了

1.问题描述 *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 19004 was already in use.Action:Identify and stop the process thats listening on port 19004 or configure this applica…

【设计模式】使用原型模式完成业务中“各种O”的转换

文章目录 1.原型模式概述2.浅拷贝与深拷贝2.1.浅拷贝的实现方式2.2.深拷贝的实现方式 3.结语 1.原型模式概述 原型模式是一种非常简单易懂的模型&#xff0c;在书上的定义是这样的&#xff1a; Specify the kinds of objects to create using a prototypical instance,and cre…

RobotFramework 自动化测试实战基础篇

RobotFramework 简介和特点 RobotFramework 不是一个测试工具&#xff0c;准确来说&#xff0c;它是一个自动化测试框架&#xff0c;或者说它是一个自动化测试平台。他拥有的特性如下&#xff1a; 支持关键字驱动、数据驱动和行为驱动测试执行报告和日志是HTML格式&#xff0…

并发编程基础知识

一、线程的基础概念 一、基础概念 1.1 进程与线程A 什么是进程&#xff1f; 进程是指运行中的程序。 比如我们使用钉钉&#xff0c;浏览器&#xff0c;需要启动这个程序&#xff0c;操作系统会给这个程序分配一定的资源&#xff08;占用内存资源&#xff09;。 什么线程&a…

android 修改输出apk的包名

一&#xff0c;打包方式使用IDE菜单选项 二、在app级别的build.gradle下配置&#xff1a; static def releaseTime() {return new Date().format("yyyyMMdd.kkmm", TimeZone.getTimeZone("GMT8")) }android.applicationVariants.all { variant ->print…

滚珠螺母的生产流程

滚珠螺母是机械领域中重要的零部件之一&#xff0c;它的生产过程涉及多个环节和步骤。以下是一个概括性的滚珠螺母生产流程&#xff1a; 1、原料采购&#xff1a;首先需要采购适合制造滚珠螺母的原材料&#xff0c;如钢棒、钢板等。 2、钢材切割&#xff1a;将采购的钢棒、钢板…

BLIP2模型加载在不同设备上

背景 现在大语言模型越来越大&#xff0c;占用的内存越来越多&#xff0c;这导致内存较小的设备无法体验大模型的效果。transformer提供了将一个大模型分别加载在gpu和cpu上的方法。 加载方法 以多模态模型BLIP2为例&#xff0c;将其语言模型放在gpu上&#xff0c;其余部分放…

1.10.C++项目:仿muduo库实现并发服务器之Acceptor模块的设计

一、Acceptor模块&#xff1a;这是一个对于通信连接进行整体管理的一个模块&#xff0c;对一个连接的操作都是通过这个模块来进行&#xff01; 二、提供的功能 Acceptor模块是对Socket模块&#xff0c;Channel模块的⼀个整体封装&#xff0c;实现了对⼀个监听套接字的整体的管…

中国人民大学与加拿大女王大学金融硕士-----成功便是站起来比倒下多一次

人生说短也短&#xff0c;说长也长。在有限的时间内&#xff0c;让我们按下“加速键”&#xff0c;收获生活或工作中的各种美好。人生的每一次加速&#xff0c;都距未来更近一步。身处金融领域的你&#xff0c;有想到比别人更快一步的拿到学位吗&#xff1f;中国人民大学与加拿…

yolov5加关键点回归

文章目录 一、数据1&#xff09;数据准备2&#xff09;标注文件说明 二、基于yolov5-face 修改自己的yolov5加关键点回归1、dataloader,py2、augmentations.py3、loss.py4、yolo.py 一、数据 1&#xff09;数据准备 1、手动创建文件夹: yolov5-face-master/data/widerface/tr…