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

news2024/12/23 12:28:53

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

🔥 个人主页:星云爱编程

🔥 所属专栏: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;
    }

    @Override
    public 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;
    }

    @Override
    public 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.coloradmin.cn/o/2264224.html

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

相关文章

【常微分方程讲义1.1】方程的种类发展与完备

方程在数学历史中不断发展,逐步趋于完备。从最初的简单代数方程到包含函数、算子甚至泛函的更复杂方程,数学家通过不断的扩展和深化,逐渐建立起更为丰富和多元的方程类型体系。方程的种类之所以不断演变,部分是因为解决实际问题的…

《庐山派从入门到...》板载按键启动!

《庐山派从入门到...》板载按键启动! 《庐山派从入门到...》板载按键启动! 视频内容大致如下 我们之前了解了GPIO的输出模式使用方法,并且成功点灯,很明显本篇要来分享的自然是GPIO的输入模式 正好回顾一下之前学的python基础包…

Android笔试面试题AI答之Android基础(3)

文章目录 1.谈一谈 Android 的安全机制一、系统架构层面的安全设计二、核心安全机制三、其他安全机制与措施 2.Android 的四大组件是哪四大?3.Android 的四大组件都需要在清单文件中注册吗?4.介绍几个常用的Linux命令一、文件和目录管理二、用户和权限管…

黑马商城项目—服务调用

使用起因 之前我们完成了拆分购物车模块,但当我们进行测试查询时: 我们注意到,其中与商品有关的几个字段中:最新状态和库存为默认值,最新价格为空!这就是因为我们注释掉了查询购物车时,查询商品信息的相关代码。 那么,我们该如何…

RK356x bsp 5 - 海华AW-CM358SM Wi-Fi/Bt模组调试记录

文章目录 1、环境介绍2、目标3、海华AW-CM358SM3.1、基本信息3.2、支持SDIO3.03.3、电气特性 4、适配流程步骤5、让SDIO控制器工作,且可以扫到WIFI卡5.1、dts配置5.2、验证 6、Wi-Fi 适配6.1、dts配置6.2、驱动移植6.2.1、kernel menuconfig6.2.2、传统驱动移植6.2.…

VBA编程:自定义函数 - 字符串转Hex数据

目录 一、自定义函数二、语法将字符串转换为hex数据MID函数:返回一个字符串中指定位置和长度的子串LEN函数:返回一个字符串的长度(字符数)Asc函数三、定义变量和数据类型变量声明的基本语法常见的数据类型四、For循环基本语法五、&运算符一、自定义函数 定义:用户定义…

工业大数据分析算法实战-day12

文章目录 day12时序分解STL(季节性趋势分解法)奇异谱分析(SSA)经验模态分解(EMD) 时序分割ChangpointTreeSplitAutoplait有价值的辅助 时序再表征 day12 今天是第12天,昨天主要是针对信号处理算…

基于Python Scrapy的豆瓣Top250电影爬虫程序

Scrapy安装 Python实现一个简单的爬虫程序(爬取图片)_python简单扒图脚本-CSDN博客 创建爬虫项目 创建爬虫项目: scrapy startproject test_spider 创建爬虫程序文件: >cd test_spider\test_spider\spiders >scrapy g…

【Linux系统编程】:信号(2)——信号的产生

1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号,比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍,本文介绍下面三种. 2. 调用函数产生信号 2.1 k…

腾讯云智能结构化OCR:以多模态大模型技术为核心,推动跨行业高效精准的文档处理与数据提取新时代

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制

一、背景 在之前的博客里,我们讲到了tracepoint(内核tracepoint的注册回调及添加的方法_tracepoint 自定义回调-CSDN博客)和kprobe(获取任意一个进程的共享内存的fd对应的资源,增加引用,实现数据的接管——…

Burp与其他安全工具联动及代理设置教程

Burp Suite 是一款功能强大的 Web 安全测试工具,其流量拦截和调试功能可以与其他安全工具(如 Xray、Yakit、Goby 等)实现联动,从而提升渗透测试的效率。本文将详细讲解 Burp 与其他工具联动的原理以及代理设置的操作方法&#xff…

Git配置公钥步骤

GIt公钥的配置去除了git push输入账号密码的过程,简化了push流程。 1.生成SSH公钥和私钥 ssh-keygen -t rsa -b 4096 -C “your_emailexample.com” 遇到的所有选项都按回车按默认处理。获得的公钥私钥路径如下: 公钥路径 : ~/.ssh/id_rsa.pub 私钥路径…

【蓝桥杯选拔赛真题96】Scratch风车旋转 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch风车旋转 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 scratc…

未来 AI 在企业应用中的重心

1. LLM 中精度、参数、数据、性能、以及成本之间的权衡是什么? 在大型语言模型(LLM, Large Language Models)中,精度、参数数量、训练数据量、性能和成本之间的权衡是一个复杂且多维度的问题。以下是这些因素之间关系的简要分析&…

Docker 安装 禅道-21.2版本-外部数据库模式

Docker 安装系列 1、拉取最新版本(zentao 21.2) [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…

排序算法 (插入,选择,冒泡,希尔,快速,归并,堆排序)

排序:经常在算法题中作为一个前置操作,为了之后的贪心or else做个铺垫,虽然我们经常都只是调用个sort,但是了解一些排序算法可以扩充下知识库 排序的分类: 从存储设备角度: ✓ 内排序:在排序过程中所有数据元素都在内存中; ✓ 外排序&a…

web复习(五)

一、补零 二、打印出五行五列的星星 三、用户输入行数和列数并打印相应行数和列数的⭐ 四、打印倒三角星星(第一行一个,第二行两个...,以此类推) 五、用户输入秒数,可以自动转换为时分秒 六、随机点名

法规标准-C-NCAP评测标准解析(2024版)

文章目录 什么是C-NCAP?C-NCAP 评测标准C-NCAP评测维度三大维度的评测场景及对应分数评星标准 自动驾驶相关评测场景评测方法及评测标准AEB VRU——评测内容(测什么?)AEB VRU——评测方法(怎么测?)车辆直行与前方纵向行走的行人测试场景&…

XRP价格跌破2.20美元 1.94美元是否下一波牛市的关键支撑?

原文转自:XRP价格跌破2.20美元 1.94美元是否下一波牛市的关键支撑? - 币热网 - 区块链数字货币新闻消息资讯 XRP价格经历剧烈波动后强势反弹,$1.94或成新牛市关键支撑 在过去24小时内,XRP价格经历了一场过山车式的剧烈波动。价…