零基础Java第十期:类和对象(一)

目录

一、拜访对象村

1.1. 什么是面向对象 

1.2. 面向对象与面向过程 

 二、类定义和使用

2.1. 类的定义格式 

2.2. 类的定义练习

三、类的实例化

3.1. 什么是实例化 

3.2. 类和对象的说明

 四、this引用

4.1. 什么是this引用 

4.2. this引用的特性 


一、拜访对象村

       在之前的代码中,我们都是main()方法中执行,但这都是面向过程的。从这一起开始,博主将待大家离开过程化的编程世界,建立起自己的对象。注意:一旦进入对象村,你就再也不想回头。

1.1. 什么是面向对象 

       在对象村里面,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。 

1.2. 面向对象与面向过程 

我们拿洗衣服来举例,洗衣粉、洗衣机、人就是对象;过程如下:

 二、类定义和使用

        类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。到底类和对象有什么不同呢?其实,类不是对象,却是用来创建它们的模型。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量。我们可以使用狗类创建出年龄、性别、姓名。

2.1. 类的定义格式 

 语法规则:类名一般采用大驼峰,字段或成员属性定义在方法外部、类的内部。成员方法和成员变量可以细分为两种,静态与非静态的。public可有可无。

public class 类名{字段/成员属性;成员方法;

我们拿洗衣机举例,

public class WashMachine{public String brand;   // 品牌public String type;    // 型号public double weight;  // 重量public double length;  // 长public double width;  // 宽public double height;  // 高public String color;   // 颜色

2.2. 类的定义练习

(1)定义一个购物车类 

public class ShoppingCart {public String cartContents;//定义购物车内容public void addToCart(){System.out.println(cartContents+"把购买的物品添加进购物车");}
}

 (2)定义一个按钮类

public class Button {public String label;//定义标签public String color;//定义颜色public void SetColor(){System.out.println("The button is" + color);}public void setLabel(){System.out.println("The button is"+label);}
}

三、类的实例化

3.1. 什么是实例化 

       定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自 带的内置类型,而类是用户自定义了一个新的类型,比如上述的:ShoppingCart类和Button类。用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。下面我们来进行一个电影类的实例化:

public class Movie {String title;//定义标题String genre;//定义题材int rating;//定义评级public void playIt(){System.out.println(title+""+genre+""+rating);}
}
public class MovieTestDrive {public static void main(String[] args) {Movie one =new Movie();one.title="Gone with the Stock";one.genre="Tragic";one.rating=-2;one.playIt();Movie two =new Movie();two.title ="Lost in Cubicle Space";two.genre ="Comedy";two.rating =5;two.playIt();}
}

 

那么类的实例化在栈和堆上是如何开辟内存空间的:

       one先在栈上开辟一块内存空间,栈上的地址指向堆里面,此时我们创立的属性title、genre、rating、就会在堆上进行赋值。

        对于类的成员变量来说,每一个成员变量都有一个默认值,引用类型为null,基本类型为对应的默认类型。 

3.2. 类和对象的说明

       到底类和对象两者之间有什么不同呢?首先,类不是对象,是用来创建它们的模型。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量 。

       对象可以执行的动作叫方法。在设计类时,我也会同时设计出操作对象数据的方法。举例来说,闹钟对象会有个变量来保存时间,且会有GetTime和SetTIme来保存该时间。

public class Alarm {public int AlarmTime;//定义时间public String AlarmMode;public void GetTime(){System.out.println("get the time");}public void SetTime(){System.out.println(" set the time");}
}

 四、this引用

4.1. 什么是this引用 

先看一个日期类的例子: 

public class Date {public int year;public int month;public int day;public void SetDate(int y,int m,int d){year=y;month=m;day=d;}public void PrintDate(){System.out.println(year+"年"+month+"月"+day+"日");}public static void main(String[] args) {Date date = new Date();date.SetDate(2005,3,13);date.PrintDate();System.out.println("=========");Date date1 =new Date();date1.SetDate(2024,10,25);date1.PrintDate();}
}

 

此时博主要给出两个问题去思考一下:

1、每个方法只有一个,那么该方法怎么知道给哪个成员变量赋值?

2、当修改SetDate之后,赋值失败

       我们先看第二个问题,当我们修改了之后,就会出了两个形参,相当于形参自己给自己赋值。可我们有时候无法避免命名相同,此时就可以通过this来解决。

public void SetDate(int year,int month,int day){year=year;month=month;day=day;
}
public void SetDate(int year,int month,int day){this.year=year;this.month=month;this.day=day;
}

       那么第一个问题呢?this表示当前对象的引用,在方法的内部还存在着一个隐藏的this,编译器自动接收,谁调用SetDate谁就会把引用传给this,它携带的信息就会包含我要修改的成员变量。

4.2. this引用的特性 

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型 

2. this只能在"成员方法"中使用

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python代码绘制好看的统计图

代码功能 上述代码使用 matplotlib 和 seaborn 生成四种不同的统计图,具体如下: 玫瑰图:在极坐标上绘制柱状图,展示不同角度的数值分布。雷达图:绘制多维数据的雷达图,用于对比不同维度的数值。热力图&am…

<项目代码>YOLOv8煤矿输送带异物识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

java项目之基于web的智慧社区设计与实现(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于web的智慧社区设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于web的智…

【优先算法】双指针 --(结合例题讲解解题思路)(C++)

今日鸡汤: “无人负我青云志,我自踏雪至山巅。” -徐霞客《青云志》 释义:没有人能够帮助我实现我的理想,即使面对再大的困难,我也要踏着积雪,一步步,到达山巅。 目录 1.快乐数 2.盛最多的…

【Unity 安装教程】

Unity 中国官网地址链接 Unity - 实时内容开发平台 | 3D、2D、VR & AR可视化https://unity.cn/首先我们想要安装Unity之前,需要安装Unity Hub: Unity Hub 是 Unity Technologies 开发的一个集成软件,它为使用 Unity 引擎的开发者提供了一…

大一物联网要不要转专业,转不了该怎么办?

有幸在2014年,踩中了物联网的风口,坏消息,牛马的我,一口汤都没喝上。 依稀记得,当时市场部老大,带我去上海参加电子展会,印象最深的,一些物联网云平台,靠着一份精美PPT&a…

从汇编角度看C/C++函数指针与函数的调用差异

函数指针本质上是一个指针变量,只不过这个变量保存的地址是一个函数的地址,那么直接调用函数和通过函数指针调用有没有区别呢?答案是有的,下面的代码是一个直接调用函数和通过指针调用函数的例子,使用gdb反汇编main函数…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析: 这道题提到了对于“区间”进行操作,而差分数列就是对于区间进行操作的好方法。 观察差分数列: 给定数列:1 3 5 2 7 1 差分数列:1 2 2 -3 5 6 题目要求把原数组全部…

【2024|滑坡数据集论文解读1】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集

【2024|滑坡数据集论文解读1】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集 【2024|滑坡数据集论文解读1】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集 文章目录 【2024|滑坡数据集论文解读1】CAS滑坡数据集:用…

【TFR-Net】基于transformer的鲁棒多模态情感分析特征重构网络

代码地址:TFR-Net/models at main thuiar/TFR-Net GitHub abstract: 提高对数据缺失的鲁棒性已经成为多模态情感分析(MSA)的核心挑战之一,MSA旨在从语言、视觉和声学信号中判断说话者的情感。在目前的研究中&#…

HBuilder X 中Vue.js基础使用->计算属性的应用(三)

一、通过简单的计算属性&#xff1a;对两数进行加法&#xff0c;减法&#xff0c;乘法&#xff0c;除法运算 <template><div><h1>computed 计算属性</h1><el-input type"text" v-model"numOne" /> <el-input type"t…

D49【python 接口自动化学习】- python基础之类

day49 类的常见错误 学习日期&#xff1a;20241026 学习目标&#xff1a;类 -- 63 避坑指南&#xff1a;类的常见错误 学习笔记&#xff1a; 语法错误 设计错误 总结 self 是刚开始学习面向对象编程时&#xff0c;最容易忽略的语法编写多个类时&#xff0c;解决依赖关系是…

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25 声明:本文图片来源于网络 A模拟信号特点: 电压或者电流 缓慢上升 随着时间连续缓慢上升或下降 D数字信号特点:电压或者电流 保持一段时间的高/低电平 状态 / 突变 (高电压瞬间低电压) 数字电路中 通常将0-1v电压称…

Segugio:一款针对恶意软件的进程执行跟踪与安全分析工具

关于Segugio Segugio是一款功能强大的恶意软件安全分析工具&#xff0c;该工具允许我们轻松分析恶意软件执行的关键步骤&#xff0c;并对其进行跟踪分析和安全审计。 Segugio允许执行和跟踪恶意软件感染过程中的关键步骤&#xff0c;其中包括从点击第一阶段到提取恶意软件的最…

STM32Lx GXHT3x SHT3x iic 驱动开发应用详解

简介 项目开发过程中&#xff0c;采用STM32L151 为主控芯片进行设计&#xff0c;并外接GXHT3x进行温湿度数据采集。这里MCU采用片上IIC与GXHT3x进行数据交互&#xff0c;本文详细记录了开发过程&#xff0c;为今后的项目提供参考&#xff0c;加速项目开发进度。 硬件设计 相…

【WebGis开发 - Cesium】三维可视化项目教程---图层管理拓展图层顺序调整功能

目录 引言一、为什么要开发图层顺序调整功能二、开发思路整理1. 拖拽库方案选择2. cesium图层api查询 三、代码编写1. 编写拖拽组件代码2. 修改原有图层管理代码2.1 图层加载移除的调整2.2 图层顺序与拖拽列表的矛盾 3. 编写图层移动代码 四、总结 引言 本教程主要是围绕Cesium…

Linux-Centos操作系统备份及还原(整机镜像制作与还原)--再生龙

适用场景 Linux系统设备需要备份整机数据&#xff0c;或者需要还原到多台设备上。适用再生龙工具进行整机备用和还原。 镜像制作 下载再生龙镜像&#xff1a;clonezilla-live-2.6.4-10-amd64.iso&#xff0c;制作启动盘-设置U盘启动 启动后界面如下选择第四项other modes of…

使用Python来下一场深夜雪

效果图&#xff1a;&#xff08;真实情况是动态的&#xff09; 完整代码&#xff1a; import turtle import random# 初始化画布 turtle.bgcolor("#001f3f") # 偏深蓝色的背景 turtle.title("下雪的画面") turtle.speed(0) turtle.hideturtle() turtle.t…

steam新品节!GameViewr远程随时随地手机平板玩主机游戏教程

Steam平台在10月14日迎来了新品节&#xff0c;你可以尝试即将推出的游戏的免费试用版&#xff0c;将他们加入愿望单&#xff0c;像是《迷失之径》《贪婪大地》《疯狂手机大亨》等等。不知道大家是否已经选择好自己心怡的游戏呢&#xff1f;要是你想随时随地体验steam新品节的游…

WebStorm EsLint报红色波浪线

如图左侧。 这个错误是由于 ESLint 和 Prettier 的配置不一致导致的。它建议你移除多余的空格。以下是一些解决方法&#xff1a; 安装 Prettier 插件&#xff1a; 确保你在 WebStorm 中安装了 Prettier 插件&#xff0c;并确保它配置正确。 调整 ESLint 配置&#xff1a; 检查…