Java- Object根父类

在java中,所有的类都有一个公共的父类,这个java.lang.Object类
*  * * Object所有类的根,成为超类。

1.证明Object是根

public class A_Object01 {public static void main(String[] args) {//证明Object是根//基本数据类型int a = 0;Object bytea = 2;Object shorta = 125;Object inta = 235;Object longa = 123455677;Object floatb = 12.8f;Object doublea = 123.456;Object chara = '好';Object booleana = true;//引用类型Object string = "String";Object arr1 = new String[5];Object arr2 = new Father[5];/*以上代码段都没有报错  可以证明Object是根*/}
}//我们创建一个类时,如果没有明确继承一个父类,
// * 那么它就会自动继承 Object,成为 Object 的子类。
class Father {
}

2.Object类的其中5个方法

(1)toString()
 ①默认情况下,toString()返回的是“对象的运行时所属类型 @ 对象的hashCode值的十六进制形式"
②如果我们直接System.out.println(对象),默认会自动调用这个对象的toString()
   public static void main(String[] args) {
//        1.未重写toString方法/*  ToString02 obj1=new ToString02();System.out.println(obj1.toString());//day0419.arrange_and_summarize.object01.ToString02@1b6d3586
*//** 注意:一般情况下,我们需要的是结果值,而不是地址值。如何获取结果值呢?*  进行重写toString()方法后就可以拿到结果值* *///2.重写toStringToString02 obj1=new ToString02("重写toString",87);System.out.println(obj1.toString());//输出ToString02{name='重写toString', age=87}
}
(2)getClass()

public final Class<?> getClass():获取对象的运行时类型

因为Java有多态现象,所以一个引用数据类型的变量的编译时类型与运行时类型可能不一致,因此如果需要查看这个变量实际指向的对象的类型,需要用getClass()方法

public class TestGetClass05 {public static void main(String[] args) {
/*1. GetClass04类GetClass04 obj1=new GetClass04("GetClass04类",18);System.out.println(obj1.getClass());//class day0419.arrange_and_summarize.object01.GetClass04*///返回该对象对应的类
//2.OBJECT类Object obj2 = new GetClass04("OBJECT类", 18);System.out.println(obj2.getClass());//class day0419.arrange_and_summarize.object01.GetClass04//编译时是父类(Object),运行时是子类(Student03)}
(3)equals()
1.  重写equals原因equals: 用于判断当前对象this与指定对象obj是否“相等”①在默认情况下,equals方法的实现等价于与“==”,比较的是对象的地址值②但是我们想要的是当前对象this与指定对象obj是否“相等”,如何解决呢?答:重写equals方法
public class TestEquals07 {public static void main(String[] args) {Equals06 obj1 = new Equals06("obj1", 18);Equals06 obj2 = new Equals06("obj1", 18);Equals06 obj3 = new Equals06("obj3", 14);Equals06 obj4 = obj1;/*1.未重写*/
//        1.1未重写equals/* System.out.println(obj1.equals(obj2));//falseSystem.out.println(obj1.equals(obj3));//falseSystem.out.println(obj2.equals(obj3));//falseSystem.out.println(obj4.equals(obj1));//true*///1.2未重写hashCode方法/* System.out.println(obj1.hashCode());//460141958System.out.println(obj2.hashCode());//1163157884System.out.println(obj3.hashCode());//1956725890System.out.println(obj4.hashCode());//460141958*//*注意: 1.  重写equals原因equals: 用于判断当前对象this与指定对象obj是否“相等”①在默认情况下,equals方法的实现等价于与“==”,比较的是对象的地址值②但是我们想要的是当前对象this与指定对象obj是否“相等”,如何解决呢?答:重写equals方法*//*2.重写*///          2.1重写equalsSystem.out.println(obj1.equals(obj2));//trueSystem.out.println(obj1.equals(obj3));//falseSystem.out.println(obj2.equals(obj3));//falseSystem.out.println(obj4.equals(obj1));//true//2.2重写hashCode方法     重写后使hashcode一致System.out.println(obj1.hashCode());//105534713System.out.println(obj2.hashCode());//105534713System.out.println(obj3.hashCode());//105534713System.out.println(obj4.hashCode());//105534713}}
(4)hashCode()

public int hashCode():返回每个对象的hash值。

如果重写equals,那么通常会一起重写hashCode()方法,hashCode()方法主要是为了当对象存储到哈希表(后面集合章节学习)等容器中时提高存储和查询性能用的,这是因为关于hashCode有两个常规协定:

  • ①如果两个对象的hash值是不同的,那么这两个对象一定不相等;

  • ②如果两个对象的hash值是相同的,那么这两个对象不一定相等。

  • public class TestHashCode09 {public static void main(String[] args) {HashCode08 obj1=new HashCode08("obj1",18);HashCode08 obj2=new HashCode08("obj1",18);HashCode08 obj3=obj1;//1.未重写hashCode方法/*   System.out.println(obj1.hashCode());//460141958System.out.println(obj2.hashCode());//1163157884System.out.println(obj3.hashCode());//460141958*//*
    如果根据 equals()方法,两个对象是相等的,
    那么对这两个对象中的每个对象调用 hashCode方法都必须生成相同的整数结果;
    而两个hashCode()返回的结果相等,两个对象的equals()方法不一定相等。*///2.重写hashCode方法System.out.println(obj1.hashCode());//105534713System.out.println(obj2.hashCode());//105534713System.out.println(obj3.hashCode());//105534713/*注意:- ①如果两个对象的hash值是不同的,那么这两个对象一定不相等;- ②如果两个对象的hash值是相同的,那么这两个对象不一定相等。( 都是String对象,而且是不同的对象,但是在某种情况下hashcode有可能相等,十进制  位置有限)*/System.out.println("❤❤❤❤❤❤❤❤❤❤❤❤❤❤");
    //   ①如果两个对象的hash值是不同的,那么这两个对象一定不相等;System.out.println("hello".hashCode());//  99162322System.out.println("kk".hashCode()); //3424System.out.println("hello".equals("kk"));//falseSystem.out.println("❤❤❤❤❤❤❤❤❤❤❤❤❤❤");
    //    ②如果两个对象的hash值是相同的,那么这两个对象不一定相等。System.out.println("Aa".hashCode());//2112System.out.println("BB".hashCode());//2112System.out.println("Aa".equals("BB"));//false}
    }

    总结:

  • 使用hashCode()来比较两个对象是否相等是不合适的,因为确实存在不同的对象具有相同hashCode值的可能性。这种情况被称为哈希冲突,是哈希表等数据结构必须处理的一种情况。

  • 当你需要比较两个对象是否相等时,应该使用equals()方法而不是hashCode()方法。

  • 如果两个对象根据equals()方法是相等的,那么它们的hashCode()方法应该返回相同的值,这是Java对象的一个基本要求。但是,反过来并不成立:即使两个对象的hashCode()值相同,它们也可能不相等。

  • 所以,在编写Java代码时,如果你重写了equals()方法,通常也应该重写hashCode()方法,以确保它们的行为一致。这样可以确保当两个对象根据equals()方法相等时,它们的哈希码也相同,但是,不要仅仅依赖hashCode()来比较对象的相等性。

(5)finalize() (了解)

protected void finalize():用于最终清理内存的方法

面试题:对finalize()的理解?

  • 当对象被GC确定为要被回收的垃圾,在回收之前由GC帮你调用这个方法,不是由程序员手动调用。

  • 这个方法与C语言的析构函数不同,C语言的析构函数被调用,那么对象一定被销毁,内存被回收,而finalize方法的调用不一定会销毁当前对象,因为可能在finalize()中出现了让当前对象“复活”的代码

  • 每一个对象的finalize方法只会被调用一次。

  • 子类可以选择重写,一般用于彻底释放一些资源对象,而且这些资源对象往往时通过C/C++等代码申请的资源内存

  • (6)重写toString、equals和hashCode方法(Alt+Insert)

    建议使用IDEA中的Alt + Insert快捷键,而不是Ctrl + O快捷键。

    3.标准JavaBean

    JavaBean 是 Java语言编写类的一种标准规范。符合JavaBean 的类,要求:

    (1)类必须是具体的和公共的,

    (2)并且具有无参数的构造方法,

    (3)成员变量私有化,并提供用来操作成员变量的setget 方法。

    (4)重写toString方法

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

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

相关文章

去除图像周围的0像素,调整大小

在做分割任务时&#xff0c;经常需要处理图像&#xff0c;如果图像周围有一圈0像素&#xff0c;需要去除掉&#xff0c;重新调整大小 数组的处理 如果图像的最外一圈为0&#xff0c;我们将图像最外圈的图像0去除掉。 import numpy as npdef remove_outer_zeros(arr):# 获取数…

TPG原理以及verilog实现

文章目录 一、前言二、verilog代码实现三、仿真以及结果分析 一、前言 TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据&#xff0c;对视频数据通路测试。根据视频输出时序产生相应的图像数据 二、verilog代码实现 timescale 1ns / 1nsmodule tpg ( i…

冒泡排序c++

题目描述 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 输入 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 输出 由大到小的n个非负整数&#xff0c;每个数占一行。 样例输入 …

.net core webapi 高颜值的接口管理系统界面取代swagger,更好调试和查看

.net core webapi 高颜值的接口管理系统界面取代swagger&#xff0c;更好调试和查看 安装 dotnet add package IGeekFan.AspNetCore.Knife4jUI --version 0.0.16配置文档&#xff1a; 配置起始页 builder.Services.AddSwaggerGen(c > {// 配置 Swagger 文档相关信息c.Swa…

天梯赛 L2-052 吉利矩阵

//r[n]:当前第几列的值。 //l[n]:当前第几行的值。 暴力减止 #include<bits/stdc.h> using namespace std; #define int long long const int n1e3; int a,b,c,l[n],r[n],an; void dfs(int x,int y) {if(xb1){an;return ;}for(int i0;i<a;i){l[x]i;r[y]i;if(l[x]&l…

TCP传输的粘包问题和各种异常情况

文章目录 粘包问题用分隔符用数字代表长度 TCP传输可能遇到的异常情况进程终止电脑关机正常情况下关机非正常情况关机&#xff08;停电&#xff09;电脑断网 粘包问题 粘包问题其实并不是TCP独有的的问题而是每一个面向字节流都会出现的问题&#xff0c;那么什么是粘包问题呢&…

走进敦煌说谷雨 | 谷雨万物新,推开那扇门

谷雨&#xff0c;是春季的最后一个节气&#xff0c; 也铺垫着“热烈”夏天的到来。 让我们来到敦煌&#xff0c;遍寻上下五千年&#xff0c; 了解谷雨在文物里的故事和习俗。 雨生百谷 且把春留驻 谷雨取自“雨生百谷”之意。谷雨&#xff0c;意味着寒潮天气基本结束。这时…

分析和比较深度学习框架 PyTorch 和 Tensorflow

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 深度学习作为人工智能的一个重要分支&#xff0c;在过去十年中取得了显著的进展。PyTorch 和 TensorFlow 是目前最受欢迎、最强大的两个深度学习框架&#xff0c;它们各自拥有独特的特点和优势。 1. Py…

6.MMD ray渲染 材质的添加及打光方法

材质 前置准备 先准备好模型和场景 将ray控制器拖入进去 添加完默认的材质以后的效果 打开插入材质页面 打开MaterialMap栏 将流萤的模型展开 自发光 现在给领带添加一个自发光效果 在自发光Emissive里&#xff0c;打开x1&#xff0c;选择albedo&#xff0c;白光 现在…

【计算机毕业设计】理发店管理系统产品功能说明——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

Quarto Dashboards 教程 1:Overview

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度&#xff0c;分享官方文档的中文教程。软件可能随时更新&#xff0c;建议配合官方文档一起阅读。推荐先按顺序阅读往期内容&#xff1a; 1.quarto 教程 1&#xff1a;Hello, Quarto 2.qu…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 小区物业管理系统 的设计与实现

一.项目介绍 系统分为管理员 和 业主 两块&#xff1a; 管理员点击进入到系统操作界面&#xff0c;可以对首页、业主信息管理、管理员信息管理、 楼栋和房屋信息管理、物业费管理、地下停车位管理、公告信息管理、报修信息管理、 投诉管理以及个人信息等功能模块 …