JavaSE学习day7_01 面向对象

news2024/11/18 22:50:11

1. 类和对象

1.1 类和对象的理解

客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。即各个对象的总称,比如学生是一个类,但是学生有很多个,每一个称之为对象。

    • 类的理解

      • 类是对现实生活中一类具有共同属性和行为的事物的抽象

      • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合

      • 简单理解:类就是对现实事物的一种描述,可以理解为一种设计图

    • 类的组成

      • 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)

      • 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)

  • 类和对象的关系

    • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象

    • 对象:是能够看得到摸的着的真实存在的实体

    • 简单理解:类是对事物的一种描述,对象则为具体存在的事物

面向对象的学习重点:学习获取已有对象并使用和学习如何自己设计对象并使用

1.2 类的定义

类的组成是由属性和行为两部分组成

  • 属性:在类中通过成员变量来体现(类中方法外的变量)

  • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可,后面学习会讲为什么要去掉static关键字,这里先跟着做就行)

类的定义步骤:

①定义类

②编写类的成员变量

③编写类的成员方法

public class 类名 {
    // 成员变量
    变量1的数据类型 变量1;
    变量2的数据类型 变量2;
    …
    // 成员方法
    方法1;
    方法2;    
}

示例代码:

/*
    手机类:
        类名:
        手机(Phone)
​
        成员变量:
        品牌(brand)
        价格(price)
​
        成员方法:
        打电话(call)
        发短信(sendMessage)
 */
public class Phone {
    //成员变量
    String brand;
    int price;
​
    //成员方法
    public void call() {
        System.out.println("打电话");
    }
​
    public void sendMessage() {
        System.out.println("发短信");
    }
}
​

补充:

 这里有必要记一下这两种类,后面会经常用到。在这里强调一下,我所说扩展内容和补充内容都是重点,不能跳过学习。

类的注意事项:

1.3 对象的使用

  • 创建对象的格式:我想这个大家已经不陌生了。

    • 类名 对象名 = new 类名();

  • 调用成员的格式:

    • 对象名.成员变量

    • 对象名.成员方法();

  • 示例代码

/*
    创建对象
        格式:类名 对象名 = new 类名();
        范例:Phone p = new Phone();
​
    使用对象
        1:使用成员变量
            格式:对象名.变量名
            范例:p.brand
        2:使用成员方法
            格式:对象名.方法名()
            范例:p.call()
 */
public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone();
​
        //使用成员变量
        System.out.println(p.brand);
        System.out.println(p.price);
​
        p.brand = "小米";
        p.price = 2999;
​
        System.out.println(p.brand);
        System.out.println(p.price);
​
        //使用成员方法
        p.call();
        p.sendMessage();
    }
}

1.4 学生对象-练习

  • 需求:首先定义一个学生类,然后定义一个学生测试类,在学生测试类中通过对象完成成员变量和成员方法的使用

  • 分析:

    • 成员变量:姓名,年龄…

    • 成员方法:学习,做作业…

  • 示例代码:

public class Student
{
    //成员变量
    String name;
    int age;
​
    //成员方法
    public void study() {
        System.out.println("好好学习,天天向上");
    }
​
    public void doHomework() {
        System.out.println("键盘敲烂,月薪过万");
    }
}
/*
    学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
​
        //使用对象
        System.out.println(s.name + "," + s.age);
​
        s.name = "林青霞";
        s.age = 30;
​
        System.out.println(s.name + "," + s.age);
​
        s.study();
        s.doHomework();
    }
}

扩展一下引用数据类型:

 尤其要注意那个类,它是引用数据类型,待会儿还会再说到。

定义类的注意事项:

2. 对象内存图

2.1 单个对象内存图

回顾一下内存分配:

 作为一个热爱编程或者想做一个资深的程序员,基本功一定得扎实。对java内存分配要熟悉。

  • 再看:

  •  这个仅限了解,但是要知道这个知识点。

  • 成员变量使用过程

  •  这张图告诉我们,new关键字申请的空间都是在堆里面申请的。有地址的。而对象名就是一个存放地址的变量,所谓的引用就是通过这个地址去找其他的成员变量。因此类是一种引用数据类型。

  • 成员方法调用过程

  •  我们需要知道的是在堆里面,除了成员变量以外,还有成员方法的地址也是在堆中,注意是成员方法的地址

引用数据类型的变量,其实是一个存放地址的变量,如果用System.outprintln()打印这个变量的话,会得到一个地址值,可能不是很好理解,大家可以类比String这个类对比学习就知道了。

如下:

大家看到这个可能有点晕,但是我说没什么问题,这不就是一个地址吗?怎么会是地址呢?在前面我们就知道在java语言中地址的构成形式是:数据类型+@+8位的16进制数字。后面俩没啥问题,主要是前面那一串是什么?是数据类型吗?答案是,当然是,我们之前说了,除了基本数据类型(四类八种,忘记的复习一下)以外的都是引用数据类型,那当然就是数据类型了。因此类也是一种数据类型,是一种引用数据类型

2.2 多个对象内存图

  • 成员变量使用过程

  •  看懂即可。对象名可以理解为C语言中所说的指针

  • 成员方法调用过程

  • 总结:

    多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

2.3 多个对象指向相同内存图

  • 总结

    当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的

    只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

3. 成员变量和局部变量

3.1 成员变量和局部变量的区别

  • 类中位置不同:成员变量(在类中但在方法外)局部变量(方法内部或方法声明上)

  • 内存中位置不同:成员变量(堆内存)局部变量(栈内存)

  • 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)

  • 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用

  •  本节内容知识点有些抽象,可以多看几遍,甚至查看相关书籍。

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

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

相关文章

Apifox-接口调用、自动化测试工具

Apifox简介 Apifox 的定位是Postman Swagger Mock JMeter,具有API文档管理、API调试、API Mock、API 自动化测试等功能。可以通过一种工具解决之前使用多种工具的数据同步问题。高效、及时、准确! 安装 Apifox的安装非常方便,直接下载安…

ASEMI中低压MOS管ASE60N10参数,ASE60N10规格

编辑-Z ASEMI中低压MOS管ASE60N10参数: 型号:ASE60N10 漏极-源极电压(VDS):100V 栅源电压(VGS):20V 漏极电流(ID):60A 功耗(PD&…

从矩阵中提取对角线元素;将一维数组转换为对角线矩阵:np.diag()函数

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】从矩阵中提取对角线元素将一维数组转换为对角线矩阵np.diag()函数选择题下列说法错误的是?import numpy as npmyarray1 np.array([1,2,3])print("【显示】myarray1")print(myarray1…

Django框架之模型shell工具和查看MySQL数据库日志

shell工具和查看MySQL数据库日志 1 shell工具 Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句。 通过如下命令进入shell python manage.py …

菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode

我平时用不到 python ,更没用过 jupyter ,因此我的 python知识仅限于知道有 python 这么个编程语言,会写个 print("Hello World!!!") 而已,完全没听过 jupyter ,因为某些原因今天需要安装下 jupyter 看看&am…

记进组后第五次组会汇报

2023年2月14日 日记一、小组组会二、实验室组会1、汇报内容(1)参考文献(2)CQF机制a.研究现状b.相关思考(3)研究计划2、汇报反馈一、小组组会 上午十点整,小组组会开始,有两个同学我…

DAS, NAS, SAN谁才是你的偏爱

大家好,我是技福的小咖老师。 随着主机、磁盘、网络等技术的发展,数据存储的方式和架构,也在一直不停的改变,今天就来给大家介绍一下目前主流的存储架构。 存储的分类 根据服务器类型分为: ● 封闭系统的存储&#…

QGIS中进行批量坡度计算

QGIS中进行批量坡度计算1. 坡度计算中的Z因子(垂直单位与水平单位的比值)2. 坡度计算步骤1. 坡度计算中的Z因子(垂直单位与水平单位的比值) z 因子是一个转换因子,当输入表面的垂直坐标(或高程&#xff09…

对撞双指针(一) 盛水最多的容器

描述 给定一个数组height,长度为n,每个数代表坐标轴中的一个点的高度,height[i]是在第i点的高度,请问,从中选2个高度与x轴组成的容器最多能容纳多少水 1.你不能倾斜容器 2.当n小于2时,视为不能形成容器&…

Spring Security 源码解读:OAuth2 Authorization Server

样例代码请参考:spring-security-oauth2.0-server-sample Spring Authorization Server刚发展不久,还没有springboot版本,而Resource Server有,但是两个底层很多不兼容,会重复引入不同版本的jar包。 另外&#xff0c…

Redis之哨兵模式

什么是哨兵模式? Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是Redis高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务。 某个master服务宕机后,会把这个master下…

安卓小游戏:俄罗斯方块

安卓小游戏:俄罗斯方块 前言 最近用安卓自定义view写了下飞机大战、贪吃蛇、小板弹球三个游戏,还是比较简单的,这几天又把俄罗斯方块还原了一下,写了一天,又摸鱼调试了两天,逻辑不是很难,但是…

机械革命z2黑苹果改造计划第三番-macOS键盘快捷键Win键盘适配

macOS键盘快捷键&Win键盘适配 键盘区别 首先下图是苹果妙控键盘无指纹版,官网售价699,穷学生的我是真的买不起 然后下图是我正在使用的机械键盘ikbc w200 87键版本 可以看出两者在键位排列上的区别主要在于 win/command 键,在macOS中大…

12 个华丽的 UI 组件,为您提供设计灵感✨

现代 Web 开发已转向基于组件的架构,从而实现更快的开发、更多的控制和更低的维护成本。在本文中,我精心挑选了一些我最喜欢的 UI 组件作为您的设计灵感。我尝试在我们的开发工作流程中包含不同类型的一些最常用的组件,包括卡片、文本、按钮、…

本人使用的idea插件

文章目录🚏 本人使用的idea插件🚬 pojo to Json🚬 GsonFormatPlus🚬 EasyYapi🚬 Chinese (Simplified) Language Pack / 中文语言包🚬 MyBatis Log Free🚬 MyBatisPlusX🚬 Statistic…

软件测试如何获得高薪?

软件测试如何获得高薪? 目录:导读 测试基础理论/测试设计能力 业务知识 行业技术知识 数据库 掌握编程语言 搞定自动化测试 质量流程管理 下面谈谈不同level的测试工程师应具备的基本能力 第一个:我们称之为测试员/测试工程师 第二…

Linux C/C++ 调试的那些“歪门邪道”

无数次被问道:你在终端下怎么调试更高效?或者怎么在 Vim 里调试?好吧,今天统一回答下,我从来不在 vim 里调试,因为它还不成熟。那除了命令行 GDB 裸奔以外,终端下还有没有更高效的方法&#xff…

【正点原子FPGA连载】第十二章PS端RTC中断实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十二章PS端RTC…

免费链接投票作品投票通道线上投票活动制作网络投票制作

“文明健康、绿色环保”网络评选投票_免费链接投票_作品投票通道_扫码投票怎样进行现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给…

node.js+vue大学生校园论坛系统vscode mysql

技术难点 (1)没有待测试程序文本、控制流程图及有关要求、规范等文件。 (2)测试用例及测试例程的分析、理解和设计。 (3)没有开发组织的配合,没有软件测试团队之间的讨论。 (4&#…