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 类名();

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

image-20230407162512381

使用对象

  • 对象名.属性

image-20230407162951719

使用方法

  • 对象.方法();

image-20230407163232091

3.4 类和对象的关系

对象是由类创建出的.

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

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

image-20230407164435436

    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也可以看到属性被修改

image-20230407165213690

四、总结

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

附录

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis数据备份与恢复

Redis数据备份与恢复 文章目录Redis数据备份与恢复1. Redis备份的方式2. RDB持久化2.1 什么是RDB&#xff1f;2.2 Fork操作2.3 save VS bgsave2.4 关于RDB备份的一些配置项2.5 RDB的备份与恢复2.6 RDB的自动触发2.7 RDB的优势与劣势3. AOF持久化3.1 什么是AOF&#xff1f;3.2 A…

ASP一个简单的网上教务系统模型的设计与实现

对于一个学校来说&#xff0c;大量教师信息&#xff0c;学生信息管理&#xff0c;学生成绩管理&#xff0c;基本数据的维护都难于通过传统的方法进行管理&#xff1a;这就迫切需要利用计算机技术来帮助学校管理者处理这些日常管理。本系统正是为了简化教学任务的管理&#xff0…

Python爬虫之多线程加快爬取速度

之前我们学习了动态翻页我们实现了网页的动态的分页&#xff0c;此时我们可以爬取所有的公开信息了&#xff0c;经过几十个小时的不懈努力&#xff0c;一共获取了 16万 条数据&#xff0c;但是软件的效率实在是有点低了&#xff0c;看了下获取 10 万条数据的时间超过了 56 个小…

Vue——组件基础

目录 定义一个组件​ 使用组件​ 传递 props​ 监听事件​ 通过插槽来分配内容​ 动态组件​ DOM 模板解析注意事项​ 大小写区分​ 闭合标签​ 元素位置限制​ 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应…

如何用 YonBuilder 构建线索管理应用

加速企业数智营销&#xff1a;如何用 YonBuilder 构建线索管理应用 如何用 YonBuilder 低代码开发线索管理应用&#xff1f; 线索管理是指通过各种渠道收集、筛选、打分、分配、跟进和培育潜在客户的信息&#xff0c;以便将其转化为成交客户的过程。 通过数智化手段实现良好…

00后整顿职场,我直呼太卷了....

内卷的来源 内卷最早的“出处”是几张名校学霸的图片。 大学生们刷爆朋友圈的几张“内卷”图片是这样的&#xff1a;有的人骑在自行车上看书&#xff0c;有的人宿舍床上铺满了一摞摞的书&#xff0c;有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。…

C++学习从基础到高阶(基于黑马程序员教程)

视频链接&#xff1a;黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难&#xff08;52个小时&#xff09; C语言中文网&#xff1a;http://c.biancheng.net/cplus/ Visual Studio 2022 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/ Visu…

JavaWeb - Web网站的组成,工作流程以及开发模式

一. Web Web&#xff1a;全球广域网&#xff0c;也称玩万维网(www Wrold Wide Web)&#xff0c;就是能够通过浏览器访问的网站学习Web开发&#xff0c;其实就是要使用Java这门语言来开发这样的Web网站&#xff0c;这也是现在Java语言最主流的企业级应用方式。使用Java语言开发…

PERSIANN 降雨数据使用教程

一、前言PERSIANN&#xff0c;“使用人工神经网络从遥感信息中估算降水”&#xff0c;是一种基于卫星的降水检索算法&#xff0c;可提供近乎实时的降雨信息。该算法使用来自全球地球同步卫星的红外 (IR) 卫星数据作为降水信息的主要来源。 红外图像的降水基于云顶温度和降水率之…

一位腾讯在职7年测试工程师的心声...

作为一个在腾讯工作7年的测试工程师&#xff0c;今天就来聊聊腾讯工作压力到底从何而来。 压力的开始&#xff1a;时间回到7年前&#xff0c;我人生中的第一份实习工作&#xff0c;是在腾讯公司做一个自动化测试工程师。当时的我可谓意气风发&#xff0c;想要大干一场&#xf…

工厂模式白话 - 3种都有哦

前言 工厂模式&#xff08;Factory Pattern&#xff09;里所谓的“工厂”和现实生活中的工厂一样 主要作用都是生产产品 像食品厂、服装厂、汽车厂生产吃的、穿的、开的 设计模式里的工厂则是生产对象 划分 工厂模式可分为简单工厂、工厂方法、抽象工厂3种 有啥不同呢&a…

PyTorch笔记

Tensor torch中的Tensor是一种数据结构&#xff0c;使用上与Python的list、numpy的array、ndarray等数据结构类似&#xff0c;可以当成一个多维数组来用。 数学上对张量有特定定义&#xff0c;但通常理解为多维数组即可。 生成Tensor&#xff1a;torch包中提供了直接生成Tens…

【微信小程序】初识微信小程序组件

作者简介&#xff1a;一名C站萌新&#xff0c;前来进行小程序的前进之路博主主页&#xff1a;大熊李子&#x1f43b; 一、组件的创建与引用 1.1 创建组件 在项目的根目录中&#xff0c;鼠标右键&#xff0c;创建 components -> test 文件夹在新建的 components -> test…

十分钟验证一个轻量化车联网解决方案

智能网联汽车在车联网的应用上&#xff0c;通常是以智能传感器、物联网、GIS技术为基础&#xff0c;结合大数据、人工智能技术&#xff0c;通过OT&#xff08;Operation tecnology&#xff09;和IT&#xff08;information tecnology&#xff09;融合的方式&#xff0c;实现智能…

2.3 连续性随机变量

思维导图&#xff1a; 学习目标&#xff1a; 我会按照以下步骤学习连续型随机变量&#xff1a; 复习概率论的基础知识&#xff0c;包括概率、期望、方差等概念和公式&#xff0c;以及离散型随机变量的概率分布函数和概率质量函数的概念和性质。 学习连续型随机变量的概念和性…

学生信息管理系统(student information manage system, SIMS)

一、前言 本项目为学生信息管理系统&#xff0c;使用C语言编写。 ★★★项目详见本人gitee仓库&#xff0c;地址 https://gitee.com/omnipotent-brother/student-information-manage-system.git ★★★ 二、项目介绍 开发环境&#xff1a; 基于windows 11系统下的Visual Studio…

YC-A11(原创)基于springboot,vue网上商城

绪论 课题的开发背景 随着计算机和网络的快速发展&#xff0c;并且越来越普及&#xff0c;互联网日益成为人们收集信息常用渠道&#xff0c;电子商务开始流行&#xff0c;一种全新的理念不断形成并且快速发展&#xff0c;像国内电商巨头淘宝、京东、苏宁易购、唯品会等电商平台…

【JavaScript】2.JavaScript函数

JavaScript 函数 1. 函数的概念 函数&#xff1a;就是封装了一段可被重复调用执行的代码块 通过此代码块可以实现大量代码的重复使用 2. 函数的使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta na…

前馈PID控制(热交换器/反应釜温度控制)

如何利用PID进行温度控制请参看下面博客文章: 博途PID 1200/1500PLC PID_Compact比例作用权重b微分作用权重c解读(PI-D控制器 I-PD控制器)_RXXW_Dor的博客-CSDN博客很多人会问PLC自带的PID指令和我们自己设计的PID有什么区别,这个问题要看你和什么PID控制器作对比,PID负反…

NDK RTMP直播客户端二

在之前完成的实战项目【FFmpeg音视频播放器】属于拉流范畴&#xff0c;接下来将完成推流工作&#xff0c;通过RTMP实现推流&#xff0c;即直播客户端。简单的说&#xff0c;就是将手机采集的音频数据和视频数据&#xff0c;推到服务器端。 接下来的RTMP直播客户端系列&#xff…