【java面向对象编程】第七弹----Object类、类变量与类方法

 笔上得来终觉浅,绝知此事要躬行

🔥 个人主页:星云爱编程

🔥 所属专栏:javase

🌷追光的人,终会万丈光芒  

 🎉欢迎大家点赞👍评论📝收藏⭐文章

  

目录

一、Object类

1.1equals方法

1.1.1==号

1.1.2equals方法

1.1.3如何重写equals方法?

 1.2hashCode方法

1.2.1基本介绍

 1.2.2hashCode小结

1.3toString方法

1.3.1基本介绍

1.3.2重写toString

1.4finalize方法

二、类变量(静态变量)

2.1类变量引入

2.2基本介绍

2.3内存图

2.4基本语法

2.5注意事项及使用细节

三、类方法(静态方法)

3.1基本介绍

3.2使用场景

3.3注意事项和使用细节

结语


一、Object类

1.1equals方法

1.1.1==号

==是一个比较运算符:

        ①即可以判断基本类型,又可以判断引用类型

        ②如果判断基本类型,判断的是值是否相等

        ③如果判断引用类型,判断的是地址是否相同,即判定是不是同一个对象

1.1.2equals方法

        ①equals是Object类中的方法,只能判断引用类型;

        ②默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相同。

1.1.3如何重写equals方法?

应用实例: 判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都一样,则返回true,反之false。

方法:

(1)判断两个Person对象的内容是否相等

(2)如果两个Person对象的各个属性值都一样,则返回true,反之false

class Person{private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if(obj==this){//判断是不是同一个对象return true;}if(!(obj instanceof Person)){//判断是不是同类return false;}return ((Person) obj).age == age && ((Person) obj).name.equals(name);//判断各属性}
}

 1.2hashCode方法

1.2.1基本介绍

使用例子:

public class Test7 {public static void main(String[] args) {AA aa=new AA();AA aa2=new AA();AA aa3=aa;System.out.println("aa.hashCode()="+aa.hashCode());System.out.println("aa2.hashCode()="+aa2.hashCode());System.out.println("aa3.hashCode()="+aa3.hashCode());}
}
class AA{}

 1.2.2hashCode小结

①提高具有哈希结构的容器效率

②两个引用,如果指向的是同一个对象,则哈希值相同。

③两个引用,如果指向的不是同一个对象,则哈希值不同。

④哈希值主要根据地址号来的,不能完全将哈希值等价于地址

1.3toString方法

1.3.1基本介绍

默认返回:全类名+@+哈希值的十六进制表示 。

子类往往重写toString方法,用于返回对象的属性信息。

1.3.2重写toString

(1)重写toString方法,打印对象或拼接对象时,都会自动调用该对象的toString形式。

例如:

public class Test6 {public static void main(String[] args) {Person person = new Person("李白",19);System.out.println(person);System.out.println(person.toString());}
}class Person{private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

(2)当直接输出一个对象时,toString 方法会被默认的调用。如上方代码中System.out.println(person); 就会默认调用 person.toString(),所以我们运行后看到两句结果输出是一样的。

1.4finalize方法

(1)当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作

(2)什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来 销毁该对象,在销毁该对象前,会先调用finalize方法。

(3)垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收机制。

二、类变量(静态变量)

2.1类变量引入

问题:有一群小羊在河边喝水,不断有新的小羊加入或退出,请问如何知道现在共有多少羊在喝水?编写程序解决。

传统方法:定义个变量count记录小羊个数,加入就coun++,退出就count--。

不过count独立于对象,无法实时记录小羊个数,并且不好访问counr;

这时就引入了类变量/静态变量。

2.2基本介绍

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个对象。

2.3内存图

特点:

(1)static变量是同一个类所有对象共享;

(2)static变量在类加载的时候就生成了

2.4基本语法

如何定义类变量:

①访问修饰符 static 数据类型 变量名;(推荐)

②static 访问修饰符  数据类型 变量名;

 如何访问类变量:

①类名.类变量名(推荐)

②对象名.类变量名

注:静态变量的访问修饰符的访问权限和范围同普通属性;

2.5注意事项及使用细节

(1)什么时候需要使用类变量

当我们需要所有的对象都共享一个变量时,就可以考虑使用类变量。

(2)类变量和普通变量有什么区别?

类变量是该类中所有对象的共享的,普通变量是每个对象独享的。

(3)加上static修饰就成为类变量,否则为普通变量/普通属性。

(4)类变量可以通过 类名.类变量名 或者 对象名.类变量名来访问,但java设计者推荐我们使用  类名.类变量名访问

5)实例变量/普通变量/普通属性不能通过 类名.类变量名方式访问。

(6)类变量在类加载时就创建了,也就是说,即使你没有创建对象,只要类加载了,就能访问类变量。

(7)类变量的生命周期是随类的加载开始,随着类的消亡而销毁。

三、类方法(静态方法)

3.1基本介绍

类方法也叫静态方法

语法:

(1)定义:

①访问修饰符 static 数据返回类型 方法名(){}(推荐)

②static 访问修饰符 数据返回类型 方法名(){}

(2)调用:

①类名.类方法名(推荐)

②对象名.类方法名

3.2使用场景

当方法中不涉及任何与对象相关的成员时,则可将方法设计成静态方法,提高开发效率。

3.3注意事项和使用细节

(1)类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区;

注:①类方法中无this的参数;

       ②普通方法中隐含着this的参数。

(2)类方法可以通过类名调用,也可以通过对象名调用。

(3)普通方法和对象有关,需要通过对象名调用。

(4)类方法中不允许使用和对象有关的关键字,比如this和super;普通方法中可以使用。

(5)类方法(静态方法)中,只能访问静态变量或静态方法。

(6)普通成员方法,即可访问普通变量/方法,又可以访问静态变量/方法。

  小结:①静态方法只能访问静态的成员;

             ②非静态方法可以访问静态成员和非静态成员。

结语

感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!

路漫漫其修远兮,吾将上下而求索。

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

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

相关文章

GO--堆(have TODO)

堆 堆(Heap)是一种特殊的数据结构。它是一棵完全二叉树(完全二叉树是指除了最后一层外,每一层上的节点数都是满的,并且最后一层的节点都集中在左边),结放在数组(切片)中…

java开发入门学习五-流程控制

流程控制语句 if, if...else, if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式,使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…

豆包MarsCode测评:编程效率再提升

豆包MarsCode测评:编程效率再提升 本文正在参与豆包MarsCode AI 编程体验家活动 随着人工智能技术的发展,编程的方式也在悄然发生变化。最近,豆包推出的 AI 编程工具 MarsCode 在开发者社区引发了不小的关注。这是一款支持多种主流编程语言…

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用(muxers)和解复用(demuxers)容器格式FLVScript Tag Data结构(脚本类型、帧类型)Audio Tag Data结构(音频Tag)V…

Unity开发哪里下载安卓Android-NDK-r21d,外加Android Studio打包实验

NDK下载方法(是r21d,不是r21e, 不是abc, 是d版本呢) google的东西,居然是完全开源的 真的不是很多公司能做到,和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多,最好不要合资,风险更大 Andr…

leetcode-128.最长连续序列-day14

为什么我感觉上述代码时间复杂度接近O(2n), 虽然有while循环,但是前面有个if判断,能进入while循环的也不多,while循环就相当于两个for循环,但不是嵌套类型的: 变量作用域问题:

人工智能入门是先看西瓜书还是先看花书?

在人工智能入门时,关于先看《机器学习》(西瓜书)还是先看《深度学习》(花书)的问题,实际上取决于个人的学习目标和背景。 《机器学习》(西瓜书)由周志华教授撰写,是一本…

B 站数据库负责人赵月顺:助力海内外业务增长,百套 TiDB 的选型与运维实战

导读 B 站对 TiDB 的应用已相当广泛,被应用在了 包括视频观看、一键三连、发送弹幕、撰写评论、阅读漫画以及视频后端的存储等场景, 目前拥有近 100 套集群。 本文由 B 站数据库负责人赵月顺撰写, 详细介绍了 B 站面临业务增长选择 TiDB 的…

二九(vue2-05)、父子通信v-model、sync、ref、¥nextTick、自定义指令、具名插槽、作用域插槽、综合案例 - 商品列表

1. 进阶语法 1.1 v-model 简化代码 App.vue <template><!-- 11-src-下拉封装 --><div class"app"><!-- <BaseSelect :cityId"selectId" changeId"handleChangeId"></BaseSelect> --><!-- v-model 简化…

flask-admin+Flask-WTF 实现实现增删改查

背景&#xff1a; flask-adminflask-wtf在网上可以搜索到很多资料&#xff0c;但有价值的很少&#xff0c;或许是太简单&#xff0c;或者是很少人这么用&#xff0c;或者。。。&#xff0c;本文将作者近礼拜摸索到的一点经验分享出来&#xff0c;给自己做个记录。 材料&#…

Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务间的通讯-消息队列【入门四】

继续上一篇任务创建 【Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务间的通讯-信号量【入门三】-CSDN博客】 今天要实现消息队列进行任务的通讯 一、从上一篇信号量通讯demo拷贝一份重命名&#xff0c;还是之前的两个任务&#xff0c;重命名了。 xTaskCreatePinned…

workman服务端开发模式-应用开发-后端api推送修改二

需要修改两个地方&#xff0c;第一个是总控制里面的续token延时&#xff0c;第二个是操作日志记录 一、总控续token延时方法 在根目录下app文件夹下controller文件夹下Base.php中修改isLoginAuth方法&#xff0c;具体代码如下&#xff1a; <?php /*** 总控制* User: 龙哥…

ReactPress 1.6.0:重塑博客体验,引领内容创新

ReactPress 是一个基于Next.js的博客&CMS系统&#xff0c; Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 体验地址&#xff1a;http://blog.gaoredu.com/ 今天&#xff0c;我们自豪地宣布ReactPress 1.6.0版本的正式发布&#xff0c;…

重拾设计模式--外观模式

文章目录 外观模式&#xff08;Facade Pattern&#xff09;概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式&#xff08;Facade Pattern&#xff09;概述 定义 外观模式是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供了一个统一…

接口测试Day03-postman断言关联

postman常用断言 注意&#xff1a;不需要手敲&#xff0c;点击自动生成 断言响应状态码 Status code&#xff1a;Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …

提升专业素养的实用指南

在当今竞争激烈的职场&#xff0c;仅仅拥有专业技能已经不足以立于不败之地。持续提升自身专业素养&#xff0c;才是保持竞争力、实现职业目标的关键。那么&#xff0c;如何才能有效地提升专业素养&#xff0c;在职业道路上走得更稳、更远呢&#xff1f;以下是一些实用性建议&a…

网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

tryhackme-Pre Security-Windows Fundamentals 3(Windows基础知识3)

任务1&#xff1a;Introduction&#xff08;介绍&#xff09; 我们将继续探索 Windows 操作系统。 总结前两个房间&#xff1a; 在 Windows Fundamentals 1 中&#xff0c;我们介绍了桌面、文件系统、用户帐户控制、控制面板、设置和任务管理器。在 Windows Fundamentals 2 中…

pdf转换文本:基于python的tesseract

电脑系统&#xff1a;win10专业版 不能访问需要魔法上网 安装tesseract 在GitHub上下载:tesseract下载地址 找到自己电脑版本下载 双击安装&#xff0c;一路next&#xff0c;除了这一步 第三个加号点开&#xff0c;把带Chinese的都勾选 安装完成后配置环境&#xff0c;Win …

国产云厂商数据库产品--思维导图

为了对比国产云厂商数据库产品&#xff0c;我查阅了各云厂商的官方介绍&#xff0c;墨天轮等平台的部分数据和文章&#xff0c;整理出了简易的思维导图。 会去整理&#xff0c;也是因为有点懵&#xff0c;比如说阿里的PolarDB数据库&#xff0c;看起来就是一个数据库&#xff…