重学Java 10 面向对象

正是风雨欲来的时候,火却越烧越旺了     

                                          ——24.1.20

重点

1.为何使用面向对象思想编程

2.如何使用面向对象思想编程

3.何时使用面向对象思想编程

4.利用代码去描述世间万物的分类

5.在一个类中访问另外一个类中的成员 -> new对象

6.成员变量和局部变量的区别

一、面向对象的介绍

1.面向过程:自己的事情自己干,代表语言:C语言

                eg、洗衣服:每一步都自己干 -> 找个盆,加水,放洗衣粉,找搓衣板,开始洗衣

2.面向对象:自己的事情别人帮忙去做,代表语言:Java语言

                eg、洗衣服:自己的事情别人干 -> 全自动洗衣机

3.使用面向对象思想编程:方便快捷

                很多功能都已经实现好了,只需要将其拿来使用即可,简化了我们自己的编写过程,减少了代码量

4.什么时候使用面向对象思想编程:

                调用别人的功能时

                在一个类中想使用别的类中的思想时,就使用面向对象思想编程

                至于使用的代码功能细节,我们不关心,我们只需要知道如何使用即可

5.如何使用面向对象思想编程:

        ①new,new. -> 点代表的是调用

        ②特殊:如果调用的成员带static关键字,我们直接使用类名点即可

二、类和对象

2.1  类(实体类)_class

1.测试类:带main方法的类,主要是运行代码的

2.实体类:是一类事物的抽象表示形式

                 世间万物的分类:比如:犬类、人类、猫类、鼠标类

        组成部分:

                1.属性(成员变量):这一类事物有什么

                        ①定义位置:类中方法外

                        ②作用范围:作用于当前类

                        ③定义格式:数据类型 变量名

                        ④默认值:

                                整数:0        小数:0.0        字符:'\U0000‘        布尔:false        引用:null

                2.行为(成员方法):这一类的事物能干嘛

                        只需要将方法中所学的static干掉,其他的都一样

只需要将某个分类的属性和行为描述出来,就可以描述这个类

案例

人类

public class Demo65Object02Person {
    //属性 -> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}

动物类

public class Demo66Object03Animal {
    String kind;//品种
    String color;//颜色

    public void eat(){
        System.out.println("动物要吃东西");
    }

    public void sleep(){
        System.out.println("动物要睡觉");
    }

小明类

public class Demo67Object04Phone {
    //属性
    String brand;
    String color;
    int price;

    //行为
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给小明发短信";
    }

2.2 对象

1.概述:一类事物的具体体现

2.使用:

        ①导包

                如果两个类在同一个包下,想要使用对方的成员不需要导包

                如果两个类不在同一个包下,想要使用对方的成员需要导包

                特殊包:java.lang -> 使用lang包下的类,不需要导包 -> String

                注:在学习四种权限修饰符前,尽量让两个类在同一个包下

        ②创建对象:想要使用哪个类中的成员,就new哪个类的对象

                类名 对象名 = new 类名() -> 如:Person person = new Person();

                                                                         Animal animal = new Animal();

        ③调用成员(成员变量、成员方法) -> 想要使用哪个类中的成员,便用哪个类的对象去点哪个成员

                对象名.成员变量名 = 值

                对象名.方法名() -> 调用的是无参无返回值的方法

                对象名.方法名(实参)-> 调用的是无参有返回值的方法

                数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值的方法

                数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值的方法

示例

public class Demo65Object02Person {
    //属性 -> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}

public class Demo66Object03Animal {
    String kind;//品种
    String color;//颜色

    public void eat(){
        System.out.println("动物要吃东西");
    }

    public void sleep(){
        System.out.println("动物要睡觉");
    }
}

public class Demo67Object04Phone {
    //属性
    String brand;
    String color;
    int price;

    //行为
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给小明发短信";
    }
}

    public static void main(String[] args) {
        Demo65Object02Person p = new Demo65Object02Person();
        p.age = 21;
        p.name = "小明";
        p.drink();
        p.eat();
        System.out.println(p.age);
        System.out.println(p.name);
        System.out.println("—————————————————————————————————————————————");

        Demo66Object03Animal a = new Demo66Object03Animal();
        a.color = "白色";
        a.kind = "金毛巡回犬";
        a.sleep();
        a.eat();
        System.out.println(a.color);
        System.out.println(a.kind);
        System.out.println("————————————————————————————————————————————");

        Demo67Object04Phone ph = new Demo67Object04Phone();
        ph.brand = "oppo findx3pro";
        ph.color = "white";
        ph.price = 5799;
        ph.message();
        ph.call("张三");
        System.out.println(ph.brand);
        System.out.println(ph.color);
        System.out.println(ph.price);
        ph.call("小明");
        ph.message();
    }

练习

用代码描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能

public class Demo67Object04Phone {
    //属性
    String brand;
    String color;
    int price;

    //行为
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给小明发短信";
    }
}
    

public static void main(String[] args) {
    Demo67Object04Phone phone = new Demo67Object04Phone();//手机类类名
    phone.brand = "OPPO Findx3Pro";
    phone.price = 5599;
    phone.color = "白色";
    System.out.println(phone.brand);
    System.out.println(phone.price);
    System.out.println(phone.color);
    phone.call("小明");
    phone.message();
}

2.3.匿名对象的使用

1.int i = 10;

        ①int:是数据的类型

        ②i:变量名

        ③等号右边的10:真正的数据

2.Person p = new Person()

        ①等号左边的Person:对象的类型,好比是int

        ②p:对象名

        ③等号右边的new Person:真正的数据,是一个Person对象,将这个对象真正创建出来了

1.所谓的匿名对象,其实就是没有等号左边的部分,只有等号右边的部分(对象)

2.使用:

        new 对象().成员

3.注意:

        ①如果只想单纯的调用一个方法,让方法执行,我们可以考虑匿名对象

        ②但是如果涉及到赋值,千万不要使用匿名对象

示例

public class Demo65Object02Person {
    //属性 -> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}


public class Demo70Object07PersonNoName {
    public static void main(String[] args) {
        //原始方式
        Demo65Object02Person p = new Demo65Object02Person();
        p.name = "小明";
        System.out.println(p.name);
        p.eat();

        System.out.println();

        //匿名对象方式
        new Demo65Object02Person().eat();
    }
}

        //匿名对象方式:
        new Demo65Object02Person().eat();
        new Demo65Object02Person().name = "小红";
        System.out.println(new Demo65Object02Person().name);    //null
        //无法输出

涉及到赋值,千万不要使用匿名对象

三、对象的内存解析

1.一个对象的内存图

2.两个对象的内存图

phone1和phone2都是新new出来的对象,所以在堆内存中开辟了两个不同的空间,修改自己空间中的数据不会影响其他空间中的数据

3.两个对象指向同一个空间的内存图

    

phone2是phone1给的,phone1在内存中保存的是地址值,所以此时phone2和phone1的地址值一样,操作同一片空间中的数据,所以修改一个对象的数据会影响另一个对象

四、成员变量和局部变量的区别

1.定义位置不同*

        成员变量:类中方法外

        局部变量:方法之中或者参数位置

2.初始化值不同*

        成员变量:有默认值,不用手动赋值,可以直接使用

        局部变量:没有默认值,必须手动先赋值,才能使用

3.作用范围不同*

        成员变量:作用于整个类

        局部变量:只作用于自己所在的方法,其他方法用不了

4.内存位置不同

        成员变量:在堆中,跟着对象走

        局部变量:在栈中,跟着方法走

5.生命周期不同

        成员变量:随着对象的产生而产生,随着对象的消失而消失

        局部变量:随着方法的调用而产生,随着方法的调用完毕而消失

五、练习

定义一个类MyDate,属性有year、month、day

        在定义一个Citizen(公民类),属性有name(String类型),birthday(MyDate类型),idcard(string类型),为这三个属性赋值,然后将值取出

自定义生日类型

//自定义生日类型
public class Demo71Object08MyDate {
    int year;
    int month;
    int day;
}


自定义公民类 

//自定义公民类
public class Demo72Object09Citizen {
    //姓名
    String name;        //默认值null
    // 生日 Mydate类型
    // Mydate属于自定义类型(引用数据类型)
    // 这种类型要操作之前,必须要赋值
    // 这种自定义对象,需要new对象赋值
    Demo71Object08MyDate birthday;      //默认值null
    //身份证
    String idcard;      //默认值null
}

主函数

    public static void main(String[] args) {
        Demo72Object09Citizen citizen = new Demo72Object09Citizen();
        citizen.name = "张三";
        citizen.idcard = "04214047";
        citizen.birthday = new Demo71Object08MyDate();

        /*Stringbuilder
            citizen.birthday获取的是Mydate对象
            再去点year获取的是Mydate对象中的year
            链式调用
         */
        citizen.birthday.year = 2002;
        citizen.birthday.month = 11;
        citizen.birthday.day = 4;

        System.out.println(citizen.name + "," + citizen.birthday.year + "年"
                 + citizen.birthday.month + "月" + citizen.birthday.day + "日 " + "学号:" + citizen.idcard);
    }

 

运行结果

给自定义的类型(引用数据类型)赋值,需要new对象(String比较特殊,可以直接=赋值)

六、总结

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

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

相关文章

利用HTML+CSS+JS打造炫酷时钟网页的完整指南

引言 在现代Web开发中,制作一个引人注目的时钟网页是一种常见而令人愉悦的体验。本文将介绍如何使用HTML、CSS和JavaScript来创建一个炫酷的时钟网页,通过这个项目,你将学到如何结合这三种前端技术,制作一个动态且美观的时钟效果…

接口测试 02 -- JMeter入门到实战

前言 JM eter毕竟是做压测的工具,自动化这块还是有缺陷。 如果公司做一些简单的接口自动化,可以考虑使用JMeter快速完成,如果想做完善的接口自动化体系,建议还是基于Python来做。 为什么学习接口测试要先从JMeter开始?…

C语言数据结构——顺序表

(图片由AI生成) 0.前言 在程序设计的世界里,数据结构是非常重要的基础概念。本文将专注于C语言中的一种基本数据结构——顺序表。我们将从数据结构的基本概念讲起,逐步深入到顺序表的内部结构、分类,最后通过一个实…

Unity常用的优化技巧集锦

Unity性能优化是面试的时候经常被问道的一些内容,今天给大家分享一些常用的Unity的优化技巧和思路,方便大家遇到问题时候参考与学习。 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游…

电脑pdf如何转换成word格式?用它实现pdf文件一键转换

pdf转word格式可以用于提取和重用pdf文档中的内容,有时候,我们可能需要引用或引用pdf文档中的一些段落、表格或数据,通过将pdf转换为可编辑的Word文档,可以轻松地复制和粘贴所需内容,节省我们的时间,那么如…

【守护工地安全】YOLOv8实现安全帽检测

学习《OpenCV应用开发:入门、进阶与工程化实践》一书 做真正的OpenCV开发者,从入门到入职,一步到位! 数据集 该图像数据集包含8000张图像,两个类别分别是安全帽与人、以其中200多张图像为验证集,其余为训…

谁说知识库都是英文的 今天就来一个中文版的

1.安装 1.1创建目录 mkdir -p /opt/trilium-cn cd /opt/trilium-cn 1.2.编写docker-compose.yml文件 version: 3 services:trilium-cn:image: nriver/trilium-cnrestart: alwaysports:- "10012:8080"volumes:# 把同文件夹下的 trilium-data 目录映射到容器内- /opt…

基于JavaWeb+SSM+Vue基于微信小程序生鲜云订单零售系统的设计和实现

基于JavaWebSSMVue基于微信小程序生鲜云订单零售系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计…

6.4.4释放音频

6.4.4释放音频 许多Flash动画里的音乐或歌曲非常好听,能不能在没有源文件的情况下把里面的声音文件取出来呢?利用Swf2VideoConverter2可以轻松做到这一点。 1.单击“添加”按钮,在弹出的下拉菜单中选择“添加文件”,…

java小项目:简单的收入明细记事本,超级简单(不涉及数据库,通过字符串来记录)

一、效果 二、代码 2.1 Acount类 package com.demo1;public class Acount {public static void main(String[] args) {String details "收支\t账户金额\t收支金额\t说 明\n"; //通过字符串来记录收入明细int balance 10000;boolean loopFlag true;//控制循…

iOS中的视频播放

引言 在数字时代,视频已成为我们日常沟通和娱乐不可或缺的一部分。从简短的社交媒体剪辑到全长电影,我们对流畅、高质量视频播放的需求从未如此强烈。对于开发者来说,为iOS用户提供无瑕疵的视频体验是一项挑战,也是一种艺术。本篇…

数据结构之list类

前言 list是列表类。从list 类开始,我们就要接触独属于 Python 的数据类型了。Python 简单、易用,很大一部分原因就是它对基础数据类型的设计各具特色又相辅相成。 话不多说,让我们开始学习第一个 Python 数据类型一list。 1. list的赋值 输…

手把手教你使用 VS Code 运行和调试 Python 程序

本文以 Ubuntu 系统为例,介绍如何在 VS Code 上配置 Python 的编程环境,并把 Python 程序运行、调试起来。由于 Python 是解释型语言,并且 VS Code 中提供了内置的调试器可用于调试 Python 代码,因此配置和操作流程比调试 C/C 代码…

SpringSecurity+JWT前后端分离架构登录认证

目录 1. 数据库设计 2. 代码设计 登录认证过滤器 认证成功处理器AuthenticationSuccessHandler 认证失败处理器AuthenticationFailureHandler AuthenticationEntryPoint配置 AccessDeniedHandler配置 UserDetailsService配置 Token校验过滤器 登录认证过滤器接口配置…

C++将信息输入到文件内

第一步检查文件是否打开&#xff0c;用到头文件&#xff1a; #include <fstream> #include <sstream> 文件打开的函数为 file.isopen() 信息输入到文件应该为 file << "" << value; 注意是file<< 如图 定义file ofstream f…

计算机组成原理 第一弹

ps&#xff1a;本文章的图片来源都是来自于湖科大教书匠高老师的视频&#xff0c;声明&#xff1a;仅供自己复习&#xff0c;里面加上了自己的理解 这里附上视频链接地址&#xff1a;1-2 计算机的发展_哔哩哔哩_bilibili ​​ 目录 &#x1f680;计算机系统 &#x1f680;计…

UI测试脚本录制器已上线,RunnerGo :UI自动化测试平台

想快速配置可视化UI自动化测试脚本&#xff1f;RunnerGo近期上线脚本录制器&#xff0c;根据你的测试操作直接生成UI自动化测试脚本&#xff0c;下面是使用方法 Step1:下载录制器 点击RunnerGo上方插件按钮下载录制器 Step2:录制器使用 将插件文件拖入浏览器扩展程序 点击打…

Zabbix 系统监控详解

1 介绍 1.1 摘要 本文深入浅出&#xff0c;切近实际运维应用&#xff0c;由 zabbix 3.4 版本入手&#xff0c;学习 zabbix 监控告警实现方式&#xff0c;由 zabbix 5.0 浅出实现快速部署、快速应用。本人从业多年&#xff0c;关注 zabbix 开源社区&#xff0c;以及 zabbix 官…

【计算机网络】3、IPv6、网络三层模型、网络的规划与设计、网络的规划与设计、网络存储技术、网络地址翻译NAT、默认网关、虚拟局域网VLAN、虚拟专用网VPN、URL

文章目录 IPv6IPv6的特点IPv4和IPv6的过渡期间主要采用三种基本技术双协议栈隧道技术翻译技术 网络三层模型核心层汇聚层接入层 网络的规划与设计工作区子系统水平布线子系统管理子系统垂直干线子系统设备间子系统建筑群子系统总结 廉价磁盘网络存储技术直接附加存储(DAS)网络附…

Git学习笔记(第1章):Git概述

目录 1.1 版本控制 1.1.1 何为版本控制 1.1.2 为什么需要版本控制 1.1.3 版本控制工具 1.2 发展历史 1.3 工作机制 1.4 代码托管中心&#xff08;远程库&#xff09; Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。…
最新文章