【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;
    }

    @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)普通成员方法,即可访问普通变量/方法,又可以访问静态变量/方法。

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

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

结语

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zookeeper分布式锁模拟12306买票

未加锁时容易出现重复买票情况 代码 public class Ticket12306 implements Runnable{// 票数private int ticketNums 10;Overridepublic void run() {while (true){if (ticketNums>0){System.out.println(Thread.currentThread() "抢到了第" ticketNums &qu…

iterm2 focus时灰色蒙层出现的解决办法

问题描述: 当前我的iterm2版本是3.5.10,是我最近才更新的,然后就出现以下页面显示问题,如图所示: 我个人对终端、编辑器等使用存在洁癖,尤其是页面显示效果不满意更是不能忍受,之前找了很久没有…

【Qt】输入类控件:QLineEdit、QTextEdit、QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider

目录 QLineEdit 例子: 正则表达式对象、验证器对象 例子: 例子: QTextEdit 例子: QComboBox 例子: QSpinBox 例子: QDateTimeEdit 例子: QDial 例子: QSlider 例子&…

【HarmonyOS应用开发】购物商城的实现【合集】

目录 😋环境配置:华为HarmonyOS开发者 📺演示效果: 📖实验步骤及方法: 1. 在src/main/ets文件中创建components文件夹并在其中创建Home.ets和HomeProduct.ets文件。​编辑 2. 在Home.ets文件中定义 Ho…

智能体实战(需求分析助手)二、需求分析助手第一版实现(支持需求提取、整理、痛点分析、需求分类、优先级分析、需求文档生成等功能)

基于提供的调用 qwen-plus 大模型的实战代码,我将对需求分析助手的第一迭代功能目标进行实现设计。以下是基于该示例代码的第一迭代功能实现细化方案: 功能 1:用户与需求分析助手交互界面(文本交互) 实现步骤&#xf…

Deepin/Linux clash TUN模式不起作用,因网关导致的问题的解决方案。

网关导致的问题的解决方案 查看路由 ip route寻找默认路由 默认路由应当为Mihomo default dev Mihomo scope link 如果不是,则 sudo ip route add default dev Mihomo在clash TUN开关状态发生变化时,Mihomo网卡会消失,所以提示找不到网卡…

malloc 分配大堆块(128KB)的一次探索

前言 一次意外执行了 malloc(0x5000)&#xff0c;结构使用 gdb 调试发现其分配的位置在 TLS 区域&#xff0c;这令我不解&#xff08;&#xff1a;最后去看了下 malloc 源码和 mmap 源码实现&#xff0c;发现似乎可能是 gdb 插件的问题&#xff0c;乐 场景复现 #include <…

大数据机器学习算法和计算机视觉应用07:机器学习

Machine Learning Goal of Machine LearningLinear ClassificationSolutionNumerical output example: linear regressionStochastic Gradient DescentMatrix Acceleration Goal of Machine Learning 机器学习的目标 假设现在有一组数据 x i , y i {x_i,y_i} xi​,yi​&…

【玩转OCR | 腾讯云智能结构化OCR在图像增强与发票识别中的应用实践】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 引言 图像增强API调用实践1. API选择与参数设置2. 在线调试与结果分析3. 响应结果具体实现代码 发票…

android studio更改应用图片,和应用名字。

更改应用图标&#xff0c;和名字 先打开AndroidManifest.xml文件。 更改图片文件名字&#xff08; 右键-->构建-->重命名&#xff08;R&#xff09;&#xff09;

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author&#xff1a;Once Day Date&#xff1a;2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档&#xff1a;GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…

代理模式(JDK,CGLIB动态代理,AOP切面编程)

代理模式是一种结构型设计模式&#xff0c;它通过一个代理对象作为中间层来控制对目标对象的访问&#xff0c;从而增强或扩展目标对象的功能&#xff0c;同时保持客户端对目标对象的使用方式一致。 代理模式在Java中的应用,例如 1.统一异常处理 2.Mybatis使用代理 3.Spring…

猪猪软件库

猪猪软件库&#xff0c;汇聚各类宝藏软件&#xff0c;宛如一座数字百宝箱。这里涵盖了实用工具、趣味游戏、高效办公软件等丰富资源&#xff0c;满足不同用户的多样需求。界面简洁直观&#xff0c;搜索便捷流畅&#xff0c;能让你迅速定位心仪软件。 所有资源都经过严格筛选&a…

端到端自动驾驶大模型:视觉-语言-动作模型 VLA

模型框架定义、模型快速迭代能力是考查智驾团队出活能力的两个核心指标。在展开讨论Vision-Language-Action Models(VLA)之前&#xff0c;咱们先来讨论端到端自动驾驶大模型设计。 目录 1. 端到端自动驾驶大模型设计 1.1 模型输入设计 1.2 模型输出设计 1.3 实现难点分析 …

Swin transformer 论文阅读记录 代码分析

该篇文章&#xff0c;是我解析 Swin transformer 论文原理&#xff08;结合pytorch版本代码&#xff09;所记&#xff0c;图片来源于源paper或其他相应博客。 代码也非原始代码&#xff0c;而是从代码里摘出来的片段&#xff0c;配上简单数据&#xff0c;以便理解。 当然&…

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar&#xff1a;《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读&#xff1a;这篇论文提出了一种名为rStar的自我博弈互推理方法&#xff0c;用于增强小型语言模型 (SLMs) 的推理能力&#xff0c;无需微调或依赖更强大的模型。rStar…

CS 144 check5: down the stack (the network interface)

Lectures Note 略 Exercises TCP片段传输到对等方的过程&#xff1a; TCP-in-UDP-in-IP. Linux 提供了一种接口&#xff08;即“数据报套接字”&#xff0c;UDPSocket&#xff09;&#xff0c;它允许应用程序仅提供用户数据报的有效载荷和目标地址&#xff0c;而内核则负责…

Llama 3 模型系列解析(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练&#xff08;Over-training&#xff09; 3. 计算训练预算 4. 如何逐步估算和确定最优模型&#xff1f; 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…

越疆科技营收增速放缓:毛利率未恢复,持续亏损下销售费用偏高

《港湾商业观察》施子夫 12月13日&#xff0c;深圳市越疆科技股份有限公司&#xff08;以下简称&#xff0c;越疆科技&#xff0c;02432.HK&#xff09;发布全球发售公告&#xff0c;公司计划全球发售4000万股股份&#xff0c;其中3800万股国际发售&#xff0c;200万股香港公开…

微信小程序实现画板画布自由绘制、选择画笔粗细及颜色、记录撤回、画板板擦、清空、写字板、导出绘图、canvas,开箱即用

目录 画板创建canvas绘制及渲染画笔粗细功能实现画笔颜色选择画笔痕迹撤回、板擦、画布清空canvas解析微信小程序中 canvas 的应用场景canvas 与 2D 上下文、webgl 上下文的关系图像的加载与绘制说明代码说明画板创建 canvas绘制及渲染 在wxml添加对应的canvas标签代码,并在j…