【JavaSE】类和对象详解(上)

欢迎关注个人主页:逸狼

创造不易,可以点点赞吗~

如有错误,欢迎指出~

目录

类和对象

类的组成

对类的理解

成员变量的访问和类方法的调用

this

抛出一个问题

this的作用

初始化成员变量

未初始化的成员变量

代码举例

就地初始化

构造方法初始化成员变量

认识构造方法

注意

快速生成构造方法

快速生成构造方法步骤图解

通过this简化构造方法

代码执行步骤图解

执行结果



类和对象

在Java中,一切皆是对象,类(类型)是描述一个对象的(在C语言中是结构体),对象是一个真正的实体。

目的是:面向对象编程(重点在对象)

类的组成

class为定义类的关键字,ClassName为类的名字(用大驼峰形式),{}中为类的主体。

// 创建类
class ClassName{  field;       // 字段(属性) 或者 成员变量method;      // 行为 或者 成员方法
}

注意:

  • 一般一个文件当中只定义一个类
  • main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  • public修饰的类必须要和文件名相同
  • 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

例如定义一个类

class Student{//成员变量public String name;public String sex;public int age;//方法public void doClass(){System.out.println("学java!");}
}

对类的理解

通过new关键字可以实例化多个对象,在 堆 上产生对象

  • 类只是一个模型一样的东西,用来对一个实体进行描述
  • 类是一种自定义的类型,可以用来定义变量.
  • 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东 西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

成员变量的访问和类方法的调用

  • 利用.访问对象中的成员变量和调用类方法
  • 可以new多个实例化对象

如下创建一个洗衣机类,并访问成员变量和调用相关方法

class WashMachine{public String brand;public String color;public double weight;public void washClothes(){System.out.println("洗衣服!");}public void dryClothes(){System.out.println("脱水!");}
}public class j3_30 {public static void main(String[] args) {WashMachine washMachine1=new WashMachine();//new一个实例化对象washMachine1washMachine1.brand="海尔";//利用.访问对象中的成员变量washMachine1.dryClothes();//利用.调用类方法System.out.println(washMachine1.brand);System.out.println("_________");WashMachine washMachine2=new WashMachine();//可以new多个实例化对象washMachine2.brand="美的";System.out.println(washMachine2.brand);washMachine2.dryClothes();}

结果

this

抛出一个问题

如下代码运行结果都是0,这是为什么呢?

public class Date {//这些变量属于对象public int year;public int month;public int day;//设置日期public void setDate(int year,int month,int day){year=year;//局部变量优先使用month=month;//在括号里面自己调用自己,修改的是局部变量,出了括号后,又变为了0day=day;}//打印日期public void printDate(){System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");}public static void main(String[] args) {Date date=new Date();//new一个对象datedate.setDate(2024,3,31);date.printDate();System.out.println("**********");Date date2=new Date();//new一个对象datedate2.setDate(2024,3,30);date2.printDate();}
}

这里我们就要考虑变量在内存的存储了~

我们可以看到开头我们定义了3个变量(year,month,day),这里的3个变量是属于成员变量,存储在上; 上面代码设置日期的方法里的 定义了3个变量(year,month,day),是局部变量(形参),存储在方法栈上;出现上面的这种情况是因为:对象和局部变量同名时,优先使用局部。

上面局部变量的自我修改(自己修改自己),出了作用域后就又变为了0。

那应该怎样解决该问题呢?我们可以使用this解决

this的作用

我们可以在设置日期的方法里的局部变量前面加上this,用于表示当前对象的引用

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

成功打印结果

this使用注意

  1. 在代码里面我们要习惯使用this,当出现可加可不加时,都加上
  2. this的类型:对应被调用的对象引用类型
  3. this只能在 成员方法中使用,只能引用当前对象

初始化成员变量

未初始化的成员变量

对于一个类的成员变量,在没有初始化前,每个成员变量都有一个默认值(引用类型是null,其余基本变量是对应的0值,boolean类型是false)

代码举例

就地初始化

在声明成员变量时,就直接给出了初始值。

public int year=2000;
public int month=1;
public int day=1;

构造方法初始化成员变量

认识构造方法

首先它是一个方法(返回值,方法名,参数列表{}),但又有区别,只有 方法名、参数列表{}、没有返回值 且 方法名和类名相同

 例如

public Date(int year, int month, int day){this.year = year;this.month = month;this.day = day;System.out.println("学Java!");}

注意

  • 当我们没有写任何构造方法时,会默认存在一个(无参数的)
  • 只要存在任何一个构造方法,编译器就不会再提供了
  • 构造方法可以重载(参数不一样)

快速生成构造方法

通过编译器快速产生多个不同的构造方法,构成方法的重载

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

快速生成构造方法步骤图解

通过this简化构造方法

    public Date(){this(2024,3,31);//必须放在第一行System.out.println("22222222");}public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("11111111");}

代码执行步骤图解

执行结果

注意:this的调用不能形成环

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

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

相关文章

深入理解数据结构(3):栈和队列详解

文章主题:顺序表和链表详解🌱所属专栏:深入理解数据结构📘作者简介:更新有关深入理解数据结构知识的博主一枚,记录分享自己对数据结构的深入解读。😄个人主页:[₽]的个人主页&#x…

【研发日记】Matlab/Simulink开箱报告(十一)——Requirements Toolbox

目录 前言 Requirements Toolbox 编写需求 需求联接设计 需求跟踪开发进度 追溯性矩阵 分析和应用 总结 前言 见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》 见《开箱报告&#x…

25Ramdisk 启动模式简介

Ramdisk 启动模式简介 ramdisk是一种虚拟磁盘技术,我们的PE系统几乎都是使用ramdisk方式从计算机启动的.那么,ramdisk有哪些特点呢? Ramdisk 将内存虚拟为一个磁盘 Ramdisk技术会将你的一部分内存虚拟成一块磁盘分区.使用U盘启动pe系统时,打开pe系统里的文件资源管理器,你会看…

实验三智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 请编写下方商品列表页面&#xff0c;展示商品名称和价格&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; Index.WXML <view class"shop" wx:for"{{10}}"> <vie…

vue3全局控制Element plus所有组件的文字大小

项目框架vue-右上角有控制全文的文字大小 实现&#xff1a; 只能控制element组件的文字及输入框等大小变化&#xff0c;如果是自行添加div,text, span之类的控制不了。 配置流程 APP.vue 使用element的provide&#xff0c;包含app <el-config-provider :locale"loca…

JavaSE:继承和多态(下篇)

目录 一、前言 二、多态 &#xff08;一&#xff09;多态的概念 &#xff08;二&#xff09;多态实现条件 &#xff08;三&#xff09;多态的优缺点 三、重写 &#xff08;一&#xff09;重写的概念 &#xff08;二&#xff09;重写的规则 &#xff08;三&#xff09;重…

2024年京东云主机租用价格_京东云服务器优惠价格表

2024年京东云服务器优惠价格表&#xff0c;轻量云主机优惠价格5.8元1个月、轻量云主机2C2G3M价格50元一年、196元三年&#xff0c;2C4G5M轻量云主机165元一年&#xff0c;4核8G5M云主机880元一年&#xff0c;游戏联机服务器4C16G配置26元1个月、4C32G价格65元1个月、8核32G费用…

Sentinel入门流控编码方式

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流…

安科瑞路灯安全用电云平台解决方案【电不起火、电不伤人】

背景介绍 近年来 &#xff0c;随着城市规模的不断扩大 &#xff0c;路灯事业蓬勃发展。但有的地方因为观念、技术、管理等方面不完善 &#xff0c;由此引发了一系列安全问题。路灯点多面广 &#xff0c;一旦漏电就极容易造成严重的人身安全事故。不仅给受害者家庭带来痛苦 &am…

【Docker笔记02】【常用软件安装】

一、前言 本系列是根据 B 站 尚硅谷 Docker 视频 学习记录笔记。因为没有视频课件&#xff0c;部分内容摘自 https://www.yuque.com/tmfl/cloud/dketq0。 本系列仅为自身学习笔记记录使用&#xff0c;记录存在偏差&#xff0c;推荐阅读原视频内容或本文参考笔记。 本文主要介…

输出1到10的阶乘--C语言

#include<stdio.h> int fac(int n){if(n<1){return 1;}elsereturn fac(n-1)*n; } int main(){int i, result;for(i1;i<10;i){resultfac(i);printf("%d!%d\n",i,result);}} 输出结果&#xff1a;

2024 MCM数学建模美赛2024年A题复盘,思路与经验分享:资源可用性与性别比例 | 性别比例变化是否对生态系统中的其他生物如寄生虫提供优势(五)

审题 第四问让我们探究性别比例变化是否对生态系统中的其他生物如寄生虫提供优势。这里我们可以把问题简化一下&#xff0c;只探究性别比例会不会对寄生虫提供优势。因为考虑太多生物&#xff0c;会使模型更复杂&#xff0c;我这个水平处理不了这么复杂的问题&#xff0c;是我…

保研线性代数机器学习基础复习1

1.什么是代数&#xff08;algebra&#xff09;? 为了形式化一个概念&#xff0c;构建出有关这个概念的符号以及操作符号的公式。 2.什么是线性代数&#xff08;linear algebra&#xff09;&#xff1f; 一项关于向量以及操作向量的公式的研究。 3.举一些向量的例子&#x…

瑞吉外卖实战学习--8、人员禁用和启用

前言 1、通过前端页面查看接口 会发现请求方式是put 请求接口是employee 2、检查页面传值 根据浏览器的请求可以看到传值为id和status 2、写put请求&#xff0c;添加修改时间和修改人的id然后传回给后台 /*** 启用和禁用员工账号* param request* param employee* return…

基于Java实现宠物领养救助交流平台设计和实现

基于Java实现宠物领养救助交流平台设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

二维码门楼牌管理应用平台:创新管理与服务的全新方式

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、切换功能在城市管理中的应用四、二维码门楼牌管理应用平台的未来展望 前言 在数字化时代的浪潮中&#xff0c;二维码技术以其便捷、高效的特点&#xff0c;正逐渐渗透到我们生…

SpringBoot集成WebSocket实现简单的多人聊天室

上代码—gitee下载地址&#xff1a; https://gitee.com/bestwater/Spring-websocket.git下载代码&#xff0c;连上数据库执行SQL&#xff0c;就可以运行&#xff0c;最终效果

金融汽车科技LLM

汇丰银行 众安保险 1. AIGC重塑保险价值链 小额高频 2.构建智能应用的技术方案演进 增加微服务 长记忆&#xff1a;向量库短记忆&#xff1a;对话历史&#xff0c;思考路径&#xff0c;执行历史 中台架构设计 蔚来汽车在大模型的应用实践 公司介绍 应用架构 应用实践 4.大…

基于单片机的自动浇灌系统的设计

本文设计了一款由单片机控制的自动浇灌系统。本设计的硬件电路采用AT89C51单片机作为主控芯片,采用YL-69土壤湿度传感器检测植物的湿度。通过单片机将采集湿度值与设定值分析处理后,控制报警电路和水泵浇灌电路的开启,从而实现植物的自动浇灌。 1 设计目的 随着生活水平的…

Python API(happybase)操作Hbase案例

一、Windows下安装Python库&#xff1a;happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase&#xff0c;需要开启HBase的Thrift服务。所以&#xff0c;在Linux服务器上&#xff0c;执行如…