day10_oop

news2024/10/5 1:23:19

今日内容

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

零、 复习昨日

晨考复习…

一、作业

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 文本

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

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

相关文章

Nginx 正向代理、方向代理、端口转发

正向代理就是客户端代理&#xff0c;代理客户端&#xff0c;服务端不知道实际发起请求的客户端 正向代理中&#xff0c;proxy和client一般同一个lan或者网络可达&#xff0c;server与client一般不可达&#xff08;缓存场景除外&#xff09; 正向代理类似一个跳板机&#xff0c…

下一个“AI王炸”,别只盯着OpenAI,DeepMind也在憋大招

过去几个月&#xff0c;OpenAI风头无两&#xff0c;各大科技公司争先恐后地跟进大语言模型&#xff08;LLM&#xff09;这一技术路线。 对比之下&#xff0c;OpenAI的老对手DeepMind&#xff0c;显得有些低调和沉默。微软靠OpenAI打了一场胜仗&#xff0c;而谷歌推出的Bard翻了…

【c++初阶】命名空间的定义

命名空间的定义一.缺陷二.namespace和::三.访问namespace四.一些注意1.工程里标准库的展开2.命名域的小技巧一.缺陷 在c语言中&#xff0c;如果我们同时定义一个全局变量和一个局部变量并且使用同一个名称的话&#xff0c;是可以编过的&#xff08;因为全局和局部是属于两个不同…

云原生_kubernetes(k8s)_pod介绍以及配置信息说明

目录 一、Pod介绍 1、Pod结构 2、Pod定义 二、Pod配置 1、基本配置 2、镜像拉取 3、启动命令 4、环境变量 5、端口设置 6、资源配额 一、Pod介绍 1、Pod结构 每个Pod中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类&#xff1a; 用户程序所在的容器&…

网络编程(第二章: TCPUDP基础模型)

TCP/UDP&#xff08;服务器、客户端源码&#xff09; [(12条消息) 网络编程(4.7作业)(TCP/UDP源代码)_m0_37565374的博客-CSDN博客]: 一. 套接字 socket 1.概念 最早的socket和消息队列、共享内存&#xff0c;管道一致只能实现一台主机中的多个进程间通信。后期加入了TCP/I…

云日记个人中心项目思路

验证昵称的唯一性 前台&#xff1a; 昵称文本框的失焦事件 blur 1. 获取昵称文本框的值 2. 判断值是否为空 如果为空&#xff0c;提示用户&#xff0c;禁用按钮&#xff0c;并return 3. 判断昵称是否做了修改…

一文详解:linux部署jenkins,一键构建并部署springboot至第三方服务器

目录 1、下载jenkins 2、 启动jenkins 3、访问jenkins 4、在当前Linux上安装maven 4.1、更新wget命令&#xff0c;支持https请求 4.2、下载maven 4.3、解压安装maven 4.4、配置maven环境变量 4.5、maven配置阿里云镜像 4.6、配置maven依赖下载的位置 5、Linux安装Gi…

Redis的使用【Redis】

一、缓存简介 缓存简介 二、缓存分类 缓存分类 三、常见缓存 常见缓存 四、Redis使用 Redis 有 5 ⼤基础数据类型&#xff1a; String——字符串类型Hash——字典类型List——列表类型Set——集合类型ZSet——有序集合类型 其中最常⽤的是字符串和字典类型。 1.字符…

Vulnhub靶场DC-1练习

目录0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-1.zip 介绍&#xff1a;There are five flags in total, but the ultimate goal is to find and read the flag in root’s home dir…

常见的DNS攻击与防御

DNS查询通常都是基于UDP的&#xff0c;这就导致了在查询过程中验证机制的缺失&#xff0c;黑客很容易利用该漏洞进行分析。DNS服务可能面临如下DNS攻击风险&#xff1a; 黑客伪造客户端源IP地址发送大量的DNS请求报文&#xff0c;造成DNS request flood攻击。黑客伪造成授权服…

Node.js安装与配置步骤

前言一、安装Node.js1.下载2.安装3.添加环境变量二、验证是否安装成功三、修改模块下载位置1.查看npm默认存放位置2.在 nodejs 安装目录下&#xff0c;创建 “node_global” 和 “node_cache” 两个文件夹3.修改默认文件夹4.测试默认位置是否更改成功四、设置淘宝镜像1.将npm默…

ARM Linux 内核启动2 ——C语言阶段

一、内核启动的C语言阶段 1 1、这一块的学习思路 (1) 抓大放小&#xff0c;不深究。 (2) 感兴趣可以就某个话题去网上搜索资料学习。 (3) 重点局部深入分析。 2、具体学习方法 (1) 顺着代码执行路径抓全。这是我们的学习主线。 (2) 对照内核启动的打印信息进行分析。 3、…

Ansible批量部署采集器

千台服务器部署采集器的时候用到了 Ansible&#xff0c;简单记录一下。 安装 Ansible pip install ansible yum install ansible –y在 /etc/ansible/hosts 中添加被管理组 &#xff0c;比如图中[web] 是组的名字。 执行ansible命令测试&#xff0c;通过hosts中定义的web组执…

君子签「数据签」正式上线,推动企业电子合同实现高效安全签署

近年来&#xff0c;从政府机关到企事业单位&#xff0c;数字化转型步伐明显加快。 在数字化的驱动下&#xff0c;在各行业的服务过程中&#xff0c;君子签对产品部署有了更深的沉淀和经验&#xff0c;通过不断打磨、升级产品&#xff0c;「数据签」产品于近日正式上线&#xf…

Word这样用,提高效率不加班

Word这样用&#xff0c;提高效率不加班 今天给大家分享23条Word文档的应用小技巧。对于大家来说&#xff0c;掌握些技巧能够效率百倍&#xff0c;何乐不为&#xff1f; 这些技巧是本人通过整理一直在用并且使用频率较高的&#xff0c;也希望能帮到大家。有兴趣的小伙伴可以自己…

Python | 基于LendingClub数据的分类预测研究Part01——问题重述+特征选择+算法对比

欢迎交流学习~~ 专栏&#xff1a; 机器学习&深度学习 本文利用Python对数据集进行数据分析&#xff0c;并用多种机器学习算法进行分类预测。 具体文章和数据集可以见我所发布的资源&#xff1a;发布的资源 Python | 基于LendingClub数据的分类预测研究Part01——问题重述特…

多路I/O转接 Epoll

基本概述 epoll是Linux下多路复用IO接口select/poll的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率&#xff0c;因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被监听的文件描述符集合…

从输入url到页面展现(二)找服务器其实是在找IP地址

前言 前一节我们讲述了url的规则&#xff0c;url的几种类型&#xff0c;以及访问web服务器的时候&#xff0c;如果用户访问的url如果不包含index.html的话&#xff0c;大概会如何去寻找这个url对应的文件&#xff0c;如果感兴趣的同学可以回头去看上一篇&#xff1a;从输入url…

PyTorch中的可视化工具

目录 一、网络结构的可视化 1.1 通过HiddenLayer可视化网络 1.2 通过PyTorchViz可视化网络 二、训练过程可视化 2.1 通过tensorboardX可视化训练过程 2.2 HiddenLayer可视化训练过程 三、使用Visdom进行可视化 一、网络结构的可视化 我们训练神经网络时&#xff0c;除…

xshell是什么软件

xshell是什么软件? Xshell 是一个强大的远程管理软件&#xff0c;它支持SSH&#xff0c;TELNET 协议。Xshell可以在Windows下访问远端服务器、路由器、网络机顶盒等&#xff0c;类似的常用软件还有putty&#xff0c;以及Windows下的Telnet。 下面简单介绍一下xshell软件。 X…