7.java——Obiect内部类 equals方法和toString方法

1.所有的java类都必须继承于object类

object中没有声明任何属性
object类提供一个空参的构造器
object类中声明的方法
面试题:final ,finally,finalize区别
在Java中,final、finally和finalize是三个不同的概念。

1.final是一个关键字,可以修饰类、方法和变量。它的作用如下:

修饰类:final修饰的类是不可继承的,即无法派生出子类。

  • 修饰方法:final修饰的方法是不可重写的,即子类无法覆盖该方法。
  • 修饰变量:final修饰的变量是一个常量,其值无法被修改。
    2.finally也是一个关键字,用于定义在try-catch语句中的一个代码块。无论是否发生异常,finally中的代码都会被执行。主要用于释放资源或者确保某些代码一定会被执行。
    3.finalize是Object类中的一个方法,用于在垃圾回收器清理对象之前执行一些清理操作。通常情况下,不需要显式地调用finalize方法,垃圾回收器会在合适的时候自动调用该方法来清理对象。
    简而言之:
  • final用于修饰类、方法和变量,分别表示不可继承、不可重写和不可修改。
  • finally用于定义必须执行的代码块,无论是否发生异常。
  • finalize是Object类中的方法,用于垃圾回收器清理对象前执行清理操作。

2.重点方法:equals( ) ,toString()

equals():———比较地址一样还是不一样,是否指向堆区同一块内存

equals()是Object类中定义的方法,在Java中所有类都是Object类的子类,因此所有的类都继承了equals()方法。equals()方法用于比较两个对象是否相等(如果地址相同,引用相同,则对象一定相同)。对于值类型(如int、float等),直接使用==运算符进行比较即可。而对于引用类型对象,相等指的是两个对象在逻辑上相等,即它们具有相同的属性和状态。默认的equals()方法是通过比较两个对象的内存地址来决定它们是否相等。如果自定义的类需要比较自身的属性,则需要重写equals()方法,通常需要覆盖hashCode()方法。

toString():

toString()方法返回一个表示该对象的字符串。在实际开发中,toString()方法是非常重要的。它可以将一个对象的属性值转换成字符串表示,方便输出或日志记录。默认情况下,toString()方法返回一个字符串,该字符串包含对象的类名及其哈希码。如果我们想要输出自定义的字符串表示,就需要重写toString()方法。在重写方法时,我们可以根据需要自由地组织各个属性的字符串表示形式,从而实现方便的输出。
在实际开发中,equals()和toString()是非常常用的方法。

equals()方法用于判断对象是否相等,而toString()方法则用于将对象属性的值转换成字符串形式进行输出、记录日志等。同时,需要注意重写这两个方法时需要遵循一定的规范,比如equals()方法需要满足自反性、对称性、传递性和一致性等性质,而toString()方法则应该返回具有可读性的表示字符串

equals()方法——比较引用数据类型的地址是否相等,引用是否指向同一片内存

运算符,正常就是比较数值,如果需要比较的对象类型不同且不支持隐式转换,则必须显式转换类型以进行比较。如果比较的是指针,则比较的是指向的内存地址是否相同,而不是它们所指向的数据内容。

public class Equals {public static void main(String[] args) {C C1= new C();C C2= new C();
'区分 == 和equals'System.out.println(C1.equals(C2)); //falseSystem.out.println(C1==C2); // falseString s1="abc";String s2="abc";String s3=new String("abc");String s4=new String("abc");System.out.println(s1.equals(s2)); //true s1==s2

1.运算符 在基本数据类型,判断数据值是否相等,使用范围基本数据类型

引用数据类型 基本数据类型就是 比数值 ,引用数据类型就是 比地址

        System.out.println(s1==s2);// trueSystem.out.println(s3==s4); //falseSystem.out.println(s1==s3); //false//下面三组都相等int i=10;int j=10;char c1='A';int i1=65;float f1=12.0f;int i4=12;System.out.println(i==j);System.out.println(c1==i1);System.out.println(f1==i4);//equals是个方法,只能使用在引用数据类型上,数组也可以用的上int[]arr =new int[10];System.out.println(arr.equals(new int[10]));}}toString()
在我们平时调用System.out.println打印变量对象的时候就已经调用了toString()
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}import java.awt.*;
import java.io.File;public class Main {public static void main(String[] args) {User u1=new User(1,"zs");System.out.println(u1.toString()); //User@3b07d329System.out.println(u1);//User@3b07d329,打印地址String s1 =new String("hello");//helloSystem.out.println(s1.toString());File f1=new File("asd");System.out.println(f1.toString());  //asd}}toString()主要还是返回对象属性的数据 
public String toString()
{return "User[color= " +color +", weight="+weight+"]";
}

拓展static关键字——公共的,静态共用的,四个人寝室厕所公有没有必要独自开辟一份,但是床是私人要独立开辟的,

3.了解方法:clone(), finalize()

clone克隆——类克隆。类中内容一样,地址不一样

finalize ——重写的时候,对象销毁的时候你有什么遗言。scanner和close()
自己调用自己

4.目前不需要关注的是:getClass() ,hashCode() , notify(), notifyAll(), wait()

在Java中,getClass(), hashCode(), notify(), notifyAll() 和 wait() 是一些对象的基本方法,它们都定义在 java.lang.Object 类中,这意味着所有Java类的实例都可以调用这些方法。

getClass()
这是一个实例方法,用于获取当前对象所属的类引用。返回值是 Class<?> 类型的对象,该对象描述了此对象的类信息。Object obj = new MyClass();
Class<?> clazz = obj.getClass();hashCode()
这个方法返回一个整数值,它代表对象的哈希码(hash code)。每个对象都有唯一的哈希码(在理想情况下),且相同的对象应该具有相同的哈希码。这个方法主要用于基于哈希的数据结构如HashMapHashSet,以确定对象的位置或比较对象是否相等。int hashCodeValue = obj.hashCode();notify()
这是一个线程同步方法,用于唤醒在此对象监视器上等待的一个线程(如果有多个线程在等待,则会选择其中一个随机唤醒)。在多线程编程中,当一个线程进入某个对象的 synchronized 方法或代码块并调用了 wait() 方法后,它会释放对该对象监视器的所有权并进入等待状态,直到其他线程调用 notify()notifyAll() 唤醒它。synchronized (this) {// ...this.notify();  // 唤醒在此对象监视器上等待的一个线程
}notifyAll()
同样是一个线程同步方法,但与 notify() 不同的是,notifyAll() 会唤醒在此对象监视器上等待的所有线程。
java
synchronized (this) {// ...this.notifyAll();  // 唤醒在此对象监视器上等待的所有线程
}wait()
此方法使当前线程进入等待状态,直到其他线程调用此对象的 notify()notifyAll() 方法,或者等待指定的时间间隔结束。wait() 方法必须在 synchronized 方法或代码块中被调用,否则将抛出 IllegalMonitorStateException 异常。
java
synchronized (this) {try {this.wait();  // 当前线程进入等待状态} catch (InterruptedException e) {// 处理中断异常}
}

注意:使用这些方法时要特别小心,因为它们涉及线程同步和对象监视器的概念,不当的使用可能会导致死锁、线程饥饿等问题。同时,在调用 wait()、notify() 和 notifyAll() 方法前,通常需要先获得对象的锁(即处于 synchronized 代码块或方法中)。

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

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

相关文章

自动驾驶学习笔记(二十三)——车辆控制模型

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 运动学模型 动力学模型 总结…

微服务(4)

目录 16.网关与过滤器有什么区别&#xff1f; 17.常用的网关框架有哪些&#xff1f; 18.Zuul与Nginx有什么区别&#xff1f; 19.既然Nginx可以实现网关&#xff0c;为什么还需要使用Zuul框架&#xff1f; 20.ZuulFilter常用有哪些方法&#xff1f; 16.网关与过滤器有什么区…

MyBatis-config.xml配置文件

1、基本介绍&#xff1a; mybatis的核心配置文件(mybatis-config.xml)&#xff0c;比如配置jdbc连接信息&#xff0c;注册mapper等等&#xff0c;我们需要对这个配置文件有详细的了解。 官网地址有详细介绍 mybatis – MyBatis 3 | 配置 2、properties属性 在通常的情况下&am…

Java 运算符

&&运算比||运算的优先级高 C与Java

GPT-5:未来的大潮,即将到来?

GPT-5&#xff1a;未来的大潮&#xff0c;即将到来&#xff1f; 随着人工智能领域的迅猛发展&#xff0c;OpenAI的GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型已经成为了业界的焦点。自从GPT-3在2020年震撼发布以来&#xff0c;它凭借强大的自然语…

微信小程序 手机号授权登录 偶尔后端解密失败

微信小程序wx.login获取code要在手机号授权前触发 <button:id"code":open-type"hasGetPrivacySetting ? getPhoneNumber|agreePrivacyAuthorization : getPhoneNumber"getphonenumber"onGetPhoneNumber"class"btn"click"cli…

【Unity入门】热更新框架之xLua

目录 一、xLua概述1.1xLua简介1.2xLua安装 二、Lua文件加载2.1执行字符串2.2加载Lua文件2.3自定义loader 三、xLua文件配置3.1打标签3.2静态列表3.3动态列表 四、Lua与C#交互4.1 C#访问Lua4.1.1 获取一个全局基本数据类型4.1.2 访问一个全局的table4.1.3 访问一个全局的functio…

python:PyCharm更改.PyCharm配置文件夹存储位置

关联账号文章&#xff1a;另外的账号 在启动 PyCharm 后选择 Help -> Edit Custom Properties 的选项&#xff0c;弹出&#xff1a; 选择 Create &#xff0c;之后在文件中添加配置文件新的存储位置即可&#xff0c;例如&#xff1a; idea.config.pathD:/Program Files/.Py…

STM32 ESP8266 物联网智能温室大棚 源码PCB原理图 设计文档

资料下载: https://download.csdn.net/download/vvoennvv/88680924 一、概述 本系统以STM32F103C8T6单片机为主控芯片&#xff0c;采用相关传感器构建系统硬件电路。其中使用DHT11温湿度传感器对温度和湿度的采集&#xff0c;MQ-7一氧化碳传感器检测CO浓度&#xff0c;GP2Y101…

Hive集群出现报错信息解决办法

一、报错信息&#xff1a;hive> show databases;FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 解决办法&#xff1a;1.删除mysql中的元数据库&#xff08;metastore&#xff0…

车载电子电器架构 —— 电子电气系统开发角色定义

车载电子电器架构 —— 电子电气系统开发角色定义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文12000字,深度思考者进!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…

docker_ROS的usb_cam使用与标定

目录 准备 准备标定板 新建容器 新建usb_cam话题的ROS功能包 编写代码 编译 运行功能包 标定 安装camera_calibration标定功能包 启动发布usb_cam话题的功能包 启动camera_calibration标定功能包 准备 usb相机 标定板 一个带有ROS的docker镜像。 准备标定板 图…

Spark编程实验四:Spark Streaming编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、利用Spark Streaming对三种类型的基本数据源的数据进行处理 2、利用Spark Streaming对Kafka高级数据源的数据进行处理 3、完成DStream的两种有状态转换操作 4、把DStream的数据输出保存到文本文件或MySQL数据库中 四…

什么是检索增强生成?

检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;是指对大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;输出进行优化&#xff0c;使其能够在生成响应之前引用训练数据来源之外的权威知识库。LLM 用海量数据进行…

win11出现安全中心空白和IT管理员已限制对某些区域的访问(不一样的解决方式),真实的个人经历,并且解决经过

1、个人的产生问题的经历 2023年12月22日&#xff0c;由于我买了一块电脑的固态硬盘1T&#xff0c;想要扩容&#xff0c;原来电脑自带512G(由于个人是一个程序员&#xff0c;导致512G实在太古鸡肋)装好以后&#xff0c;想要重装一下系统&#xff0c;来个大清理。结果不出意料&…

DrGraph原理示教 - OpenCV 4 功能 - 颜色空间

前言 前段时间&#xff0c;甲方提出明确需求&#xff0c;让把软件国产化。稍微研究了一下&#xff0c;那就转QT开发&#xff0c;顺便把以前的功能代码重写一遍。 至于在Ubuntu下折腾QT、OpenCV安装事宜&#xff0c;网上文章很多&#xff0c;照猫画虎即可。 这个过程&#xff0…

dbf文件批量合成excel

我有一个文件夹&#xff0c;内含多个dbf文件&#xff0c;现在要合成一个excel。 前提&#xff1a;安装os、pandas、dbfread、openpyxl包 import os import pandas as pd from dbfread import DBF# 指定包含dbf文件的文件夹路径 folder_path r"J:\sta"# 初始化一个空…

据报道,微软的下一代 Surface 笔记本电脑将是其首款真正的“人工智能 PC”

明年&#xff0c;微软计划推出 Surface Laptop 6和 Surface Pro 10&#xff0c;这两款设备将提供 Arm 和 Intel 两种处理器选项。不愿意透露姓名的不透露姓名人士透露&#xff0c;这些新设备将引入先进的人工智能功能&#xff0c;包括配备下一代神经处理单元 (NPU)。据悉&#…

FPGA LCD1602驱动代码 (已验证)

一.需求解读 1.需求 在液晶屏第一行显示“HELLO FPGA 1234!” 2. 知识背景 1602 液晶也叫 1602 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵 型液晶模块。它由若干个 5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一 个字符,每位之间有一个点距的…