day11_面向对象

news2024/12/23 7:46:24

今日内容

零、 复习昨日
一、一日一题(数组,OOP)
二、面向对象练习(方法参数返回值)
三、局部变量&成员变量
四、this关键字
五、构造方法
六、重载
七、封装

小破站同步上课视频:
https://space.bilibili.com/402601570/channel/collectiondetail?sid=1091094

零、 复习昨日

见晨考

一、一日一题

2 写一个方法 用于合并两个int类型的数组 合并法则如下(合并去重排序)
{1,2,5,8,9}{1,3,0}---->{0,1,2,3,5,8,9}

package com.qf.homework;

import java.util.Arrays;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class Homework {
    public static void main(String[] args) {
        int[] arr1 = {1,2,5,8,9};
        int[] arr2 = {1,3,0,8};
        plus(arr1,arr2);
    }

    //    {1,2,5,8,9}{1,3,0}---->{0,1,2,3,5,8,9}
    // 先合并再排序后去重
    public static void plus(int[] arr1,int[] arr2) {

        // 合并
        int[] arr3 = new int[arr1.length + arr2.length];

        System.arraycopy(arr1,0,arr3,0,arr1.length);
        System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);
        System.out.println(Arrays.toString(arr3) );
        // 去重
        // 创建新数组,存放不重复的元素
        int[] arr4 = new int[arr3.length];

        Arrays.sort(arr3);
        arr4[0] = arr3[0];

        int index = 1;
        // 取原数组元素
        for (int i = 1; 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++;
            }
        }
        int[] arr5 = new int[index];
        System.arraycopy(arr4,0,arr5,0,index);
        System.out.println(Arrays.toString(arr5));
    }
}

3 面向对象

PDF5T10 根据要求创建类和对象

public class Worker {

    String name; // 姓名
    int age;//年龄
    double salary;// 薪水


    public void work(){
        System.out.println("工人工作" );
    }


    public void work(int hour) {
        System.out.println("工人工作时长:"+hour );
    }

}
// 同一个java文件中只能有一个公共的类
// 且公共的类的名字要和外面文件名一样
class TestWorker{

    public static void main(String[] args) {
        Worker worker = new Worker( );

        worker.age = 19;
        worker.name = "zzz";

        worker.work();
        worker.work( 10 );
    }

}

T11

public class Address {

    String address;
    String zipCode;


}

T12

package com.qf.homework;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc  引用类型: 数组,类,接口
 */
public class Worker {

    String name; // 姓名
    int age;//年龄
    double salary;// 薪水
    // 地址类属性
    Address addr;
  //数据类型 变量名;

    public void work(){
        System.out.println("工人工作" );
    }


    public void work(int hour) {
        System.out.println("工人工作时长:"+hour );
    }
}
// 同一个java文件中只能有一个公共的类
// 且公共的类的名字要和外面文件名一样
class TestWorker{

    public static void main(String[] args) {
        Worker worker = new Worker( );

        worker.age = 25;
        worker.name = "zhangsan";
        worker.salary = 2500;

        // Address addr = new Address();
        // worker.addr = addr;
        worker.addr = new Address();
        worker.addr.address = "郑州"; // 注意空指针异常问题
        worker.addr.zipCode = "4000";

        System.out.println(worker.age );
        System.out.println(worker.salary );
        System.out.println(worker.name );
        System.out.println(worker.addr.address );
        System.out.println(worker.addr.zipCode );
    }
}

二、面向对象练习

练习方法参数,返回值的使用

public class Phone {

    String brand;
    double price;

    public boolean call(String num) {
        System.out.println(brand + "打电话" + num);
        System.out.println("这个手机价格:" + price);
        return true;
    }

}
class TestPhone {

    public static void main(String[] args) {

        Phone phone = new Phone( );
        phone.brand = "MI";
        phone.price = 1888.0;

        boolean isok = phone.call("120");
        System.out.println("打电话是否成功? " + isok );
    }

}

三、局部变量&成员变量

局部变量成员变量
位置
作用域
初始值
内存位置
生命周期
public class Phone {

    /**
     * 成员属性就是成员变量
     * 1 类中方法外
     * 2 类中所有方法都可以使用
     * 3 成员变量会随着创建对象时被赋默认值(即可以不用主动考虑初始值的事)
     * 4 成员变量在内存的堆中
     * 5 在对象创建时出现并初始化,失去引用后,会把垃圾回收机制处理(GC)
     */
    String brand;
    double price;

    /**
     * 局部变量
     * 1 方法参数列表内和方法体内
     * 2 只能在方法内部使用
     * 3 局部变量使用前必须主动赋值
     * 4 局部变量是在栈的栈帧中
     * 5 随着方法进栈而出现,方法执行完出栈而消失
     */
    public boolean call(String num) {
        int a = 1;
        System.out.println(a );
        System.out.println(brand + "打电话" + num);
        System.out.println("这个手机价格:" + price);
        return true;
    }
}

image-20230213112752975

四、this关键字

this就是代表当前对象
当前对象是指,谁调用这个方法,this就代表调用这个方法的对象

因为this代表的是对象,所以它就可以调用对象的属性和方法
this.属性;
this.方法();

package com.qf.oop;

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

    String brand;
    double price;

    public void run() {
        int a = 1;
        String brand = "五菱";
        System.out.println("this:"+this );// 输出的是car的地址,代表car对象
        /**
         * 当成员变量和局部变量重名时
         * 使用时,默认使用方法自己的局部变量(就近原则)
         * 如果必须使用成员变量,就使用this来调用
         * 因为this代表对象,所以可以调用对象属性
         */
        System.out.println(this.brand + "车跑动,跑了"+a+"公里" );
        
        // this调用方法
        this.didi();
    }

    public void didi() {
        System.out.println("车鸣笛" );
    }

}
class TestCar {
    public static void main(String[] args) {

        Car car = new Car( );
        System.out.println("car:" + car );
        car.brand = "BYD";
        car.price = 150000;

        car.run();
    }
}

image-20230213145731689

使用this的场景总结:
当成员变量和局部变量重名时,用this.属性来代表成员变量.

this是什么what,能干什么how,什么时候用when?

五、构造方法

构造方法又叫构造器(constructor),是用来创建对象的.
类名 对象名 = new 类名(); 其实这个语法应该这么叫
类名 对象名 = new 构造方法();

特点

  1. 每个类都默认有一个隐藏的无参构造
  2. 没有返回值,也不能写void
  3. 方法名必须是类名
  4. 只能通过new来调用

特殊的,类中没有一个显式构造方法,那么就会默认提供一个隐式无参构造
一旦显式写出任何一个构造方法,隐式的不再提供.

image-20230213151921578

具体作用(构造方法一旦执行)

  1. 在堆中开启空间,分配地址值
  2. 属性和方法被初始化
  3. 对象创建成功,将地址值赋值给变量(对象名)

image-20230213152957390

有参构造

在创建对象时,调用有参构造方法,方法内部有对属性赋值的过程.所以有参构造创建出的对象的属性是指定值.

public class Student {
    String name;
    int age;

    /**
     * 显示的写出无参构造
     * 构造方法语法特点
     * 1. 没有返回值,也不能写void
     * 2. 方法名必须是类名
     */
    public Student(){
        System.out.println("无参构造" );
    }

    /**
     * 有参构造
     */
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public void coding(){
        System.out.println("敲代码" );
    }
}
class TestStudent{
    public static void main(String[] args) {
        // ???? 能不能创建出的对象,内部的属性直接有值
        // 能!!! 有参构造
        Student s2 = new Student("奥利安娜", 20);

        System.out.println(s2.age );
        System.out.println(s2.name);
    }
}

image-20230213160845240

总结有参构造和无参构造区别

  1. 相同点: 都能创建出对象
  2. 不同点: 无参构造创建出的对象属性值都是默认值;; 有参构造创建出的对象属性值是指定值

即两者都是创建对象,只是不同的效果.看情况选择使用

六、重载

重载overload: 指方法的重载

  1. 方法是在同一个类中
  2. 方法名相同,参数列表不同
  3. 参数列表不同: 个数,类型,顺序不同

好处:

方便调用,根据传入的参数的个数,顺序,类型决定执行哪个方法.不用去特别的设计不同的方法名

public class TestOverload {

    public static void main(String[] args) {

        // println其实就是一系列重载的方法
        // 就是方便使用
        System.out.println( );
        System.out.println(1);
        System.out.println(1.1);
        System.out.println("zzz");
        System.out.println(new Student());
        System.out.println('a');

        m1("");

    }


    public static void m1() {
        System.out.println("m1()" );
    }

    public static void m1(int a) {
        System.out.println("m1(int a)" );
    }

    public static void m1(String a) {
        System.out.println("m1(String a)" );
    }

    public static void m1(String a,int b) {
        System.out.println("m1(String ,int b)" );
    }

    public static void m1(int b,String a) {
        System.out.println("m1(int b,String a)" );
    }
}

Dog类,两个属性,有参无参构造,创建对象

七、类的封装

类的封装: 将代码封装在一个类中,隐藏一些代码实现的逻辑,对外提供一个公共的访问方式.


类的封装实现步骤:

  1. 属性私有
  2. 提供对应的set,get方法

setter getter方法,很固定

  1. 一定是set+属性首字母大写 setXxx getXxx
  2. set方法有参数无返回值
  3. get方法无参数有返回值
public class People {

    // 私有化,这个属性就只能在当前类中使用
    private int age;
    private String name;

    // 提供set方法供赋值
    public void setAge(int age) {
        if (age <= 120 && age >= 0) {
            this.age = age;
        }else{
            System.out.println("年龄有误" );
        }
    }

    // 提供get方法供取值
    public int getAge() {
       return age;
    }


    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }



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

}


class TestPeople{

    public static void main(String[] args) {
        People people = new People( );
        // people.name = "ikun";
        // people.age = -22;

        people.setAge(22);
        int age = people.getAge( );
        System.out.println(age);

        people.setName("kunkun");
        String name = people.getName( );
        System.out.println(name );
    }
}

练习: 封装上题Dog类

八、总结

局部变量成员变量: 能分清,初始值不同
this:代表当前对象,场景用来区分成员变量和局部变量
构造方法: 用来创建对象,有参和无参构造的区别
重载: 是代码的一种设计方式,可以让方法调用更方便
类的封装:先属性私有后提供一对儿setget方法

九、作业

重复2遍代码
作业.txt
pdf5中的每个题(特别10,11,12)

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

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

相关文章

Spring MVC

一、Spring MVC介绍 a. Spring MVC是一个Web框架 b. Spring MVC是基于Servlet API构成的 MVC 是 Model View Controller 的缩写。 MVC 是⼀种思想&#xff0c;⽽ Spring MVC 是对 MVC 思想的具体实现。 学习Spring MVC目标&#xff1a; a.连接功能&#xff1a;将用户&#xff…

JSON学习笔记

♥课程链接&#xff1a;【狂神说Java】一小时掌握JSON_哔哩哔哩_bilibili配套的当然还要学习ajax不管是前端后端&#xff0c;感觉这部分内容是必须的&#xff0c;不然真的做项目的时候云里雾里。总体json的内容不多&#xff0c;具体就&#xff1a;1. 列表、对象等语法格式2. js…

C++复习笔记9

STL中的list的部分实现&#xff0c;包括了迭代器的整体实现思想和空间配置器的部分功能。 main.cpp //STL中的list是一个双向循环链表 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include"mymemory.h" using namespace std;class String { public:…

Python 数据可视化的 3 大步骤,你知道吗?

Python实现可视化的三个步骤&#xff1a; 确定问题&#xff0c;选择图形转换数据&#xff0c;应用函数参数设置&#xff0c;一目了然 1、首先&#xff0c;要知道我们用哪些库来画图? matplotlib Python中最基本的作图库就是matplotlib&#xff0c;是一个最基础的Python可视…

上海亚商投顾:沪指震荡上行 大消费板块全线走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪三大指数今日震荡反弹&#xff0c;沪指全天低开高走&#xff0c;深成指、创业板指均涨超1%。工程机械板块集体大涨&a…

nodejs学习笔记1.2

1、made \\ 中括号代表可选参数 、、、、 使用path模块处理路径拼接问题 、、、、 将/进行转义/ 、、、、 http模块 web服务器 、、、 创建最基本的web服务器 我表示醉了&#xff0c;之前都没有学到&#xff0c;难怪我学得糊里糊涂 req客户端 res…

00---C++入门

1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进…

简单易用的以太网IO控制卡:C#读写测试

今天&#xff0c;正运动小助手给大家分享一下运动控制卡之ECIO系列IO卡的用法&#xff0c;C#语言进行ECI IO卡的开发以及测试多个IO读写的交互速度。 一、ECI0032/ECI0064 IO卡的硬件介绍 1.功能介绍 ECI0032/ECI0064等ECI0系列运动控制卡支持以太网、RS232通讯接口和电脑相…

A-Ops性能火焰图——适用于云原生的全栈持续性能监测工具

对于开发及运维人员来讲&#xff0c;火焰图是一个经典的定位性能问题的方法。利用火焰图可以可视化系统资源(cpu占用、内存占用、调度、IO等)的占用情况&#xff0c;从而帮助技术人员快速定位资源异常使用的代码级根因&#xff0c;或者观察潜在性能劣化趋势&#xff0c;进而优化…

2023最新简历模板免费下载

下面分享5个简历模板网站&#xff0c;免费下载&#xff0c;建议收藏&#xff01; 2023用最漂亮的简历模板&#xff0c;让面试官眼前一亮。 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 菜鸟图库除了有超多设计类素材之外&#xff0c;还有很多办公类素材&#…

Multimap运用

Multimap概念:Multimap的特点其实就是可以包含有几个重复key的value值&#xff0c;你可以put进多个不同的value&#xff0c;但是key相同&#xff0c;但是又不是让后面的覆盖前面的内容.业务场景:当你需要构造像Map<K,List<V>> 或者Map(K,Set<V>)这样比较复杂…

MongoDB--》基本常用命令使用

目录 数据库操作命令 选择和创建数据库 数据库的删除 集合操作命令 集合的显示创建 集合的隐式创建 集合的删除 文档基本的CRUD&#xff08;增删改查&#xff09; 文档的插入 文档的基本查询 文档的更新 删除文档 数据库操作命令 数据库常用的操作命令如下&#x…

docker基础和使用(一)

Docker 入门篇 文章目录Docker 入门篇一、docker简介1.1、docker说明&#xff1a;1.2、docker镜像说明&#xff1a;1.2.1、UnionFS&#xff08;联合文件系统&#xff09;1.2.2、docker镜像分成的好处1.2.3、docker平台架构图二、docker的常用命令1.1、手册查询1.2、docker启停和…

知识图谱业务落地技术推荐之图数据库汇总

0.图数据库排名 链接:https://db-engines.com/en/ranking/graph+dbms 0.1简要分析(各种图数据库属性) Neo4j(主流) 历史悠久且

备考蓝桥杯【快速排序和归并排序】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

【王道数据结构】第八章 | 排序

目录 8.1. 排序的基本概念 8.2. 插入排序 8.2.1. 直接插入排序 8.2.2. 折半插入排序 8.2.3. 希尔排序 8.3. 交换排序 8.3.1. 冒泡排序 8.3.2. 快速排序 8.4. 选择排序 8.4.1. 简单选择排序 8.4.2. 堆排序 8.5. 归并排序和基数排序 8.5.2. 基数排序 8.1. 排序的基本概念 排…

3-track网络预测蛋白质结构和相互作用

目录引言网络架构发展直接生成蛋白-蛋白复合物DeepMind在最近的CASP14上展示了非常准确的预测。作者探索了融合相关思想的网络架构&#xff0c;并通过对一维序列级、二维距离图级&#xff08;distance map&#xff09;和三维坐标级&#xff08;coordinate&#xff09;的信息依次…

机械设备管理软件如何选择?机械设备管理软件哪家好?

随着信息化技术的进步与智能制造的发展趋势&#xff0c;很多机械设备制造企业也在一直探寻适合自己的数字化管理转型之路&#xff0c;而企业上ERP管理软件又是实现数字化管理的前提&#xff0c;机械设备管理软件对于企业来说就是关键一环。机械设备管理软件如何选择&#xff1f…

IPV4地址的原理和配置

第三章&#xff1a;IP地址的配置 IPv4&#xff08;Internet Protocol Version 4&#xff09;协议族是TCP/IP协议族中最为核心的协议族。它工作在TCP/IP协议栈的网络层&#xff0c;该层与OSI参考模型的网络层相对应。网络层提供了无连接数据传输服务&#xff0c;即网络在发送分…

【GD32F427开发板试用】7. 移植LVGL到GD32F427V

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…