一、Object 类的基本定义

​ Object 类是所有类的父类,最大的一个好处就是:利用 Object 类可以接收所有类的对象(向上自动转型)。如果不确定参数类型,使用 Object 类型是最好的选择。

为什么 Object 类里要定义一个无参构造方法。因为 Object 类是所有类的父类,所有对象实例化的时候,构造方法一定要默认调用父类的无参构造。

从严格意义上来讲(一般不遵守),任何一个简单 java 类都应该覆写 Object 类中的如下 3 个方法:

  • public String toString() :取得对象信息;
  • public boolean equals(Object obj):对象比较;
  • public int hashCode() 取得对象 hash 码。

1.1 取得对象信息:toString()

class Book{}
public class TestDemo{
public static void main(String args[]){
Book book = new Book();
System.out.println(book);
System.out.println(book.toString());
String h = "Hello";
System.out.println(h);
}
}

​ 发现直接输出对象与输出对象调用 toString() 方法的功能一样。在进行对象输出时,输出操作会自动调用对象的 toString() 方法将对象变成字符串后再输出,而默认情况下 Object 类中的 toString()为了适应于所有对象的输出,只输出了对象的编码。如果有需要,可以自己根据实际情况来覆写此方法。

范例:覆写 toString() 方法。

class Book{
private String title;
private double price;
public Book(String title,double price){
this.title = title;
this.price = price;
}
public String toString(){
return "书名:" + this.title + ",价格:" + this.price;
}
}
public class TestDemo{
public static void main(String args[]){
Book book = new Book("Java",79.9);
System.out.println(book);
System.out.println(book.toString());
}
}

直接输出对象就调用了 toString() ,等于输出对象的时候代码又节约了。

1.2 对象比较:equals(Object obj)

范例:equals(Object obj) 方法

class Book{
private String title;
private double price;
public Book(String title,double price){
this.title = title;
this.price = price;
}
public String toString(){
return "书名:" + this.title + ",价格:" + this.price;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(obj == this){
return true;
}
if(obj instanceof Book){
Book book = (Book) obj;
if(this.title.equals(book.title) && book.price == this.price){
return true;
}else{
return false;
}
}
}
public class TestDemo{
public static void main(String args[]){
Book book = new Book("Java",79.9);
Book book2 = new Book("Java",79.9);
String string = "hello";
System.out.println(book.equals(book2));
System.out.println(book.equals(string));
}
}

1.3 Object 类可以接收一切引用数据类型

Object 类是所有类的父类,所以 Object 类可以接收所有类的对象,而且还可以接收 数组 和 接口对象。

范例:Object 对象接收数组对象

public class TestDemo{
public static void main(String args[]){
Object obj = new int[]{1,2,3};
int[] data = (int[]) obj;
for(int i=0; i<data.length; i++){
System.out.println(data[i]);
}
}
}

范例:Object 对象接收接口对象

interface A{
public void fun();
}
class B implements A{
public void fun(){
System.out.println("B 覆写fun()");
}
}
public class TestDemo{
public static void main(String args[]){
A a = new B();
Object obj = a;
A aa = (A) obj;
aa.fun();
}
}

【2】java之object类的更多相关文章

  1. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  2. Java之Object类和常用的API

    Object类和常用的API 学习过程中的笔记,涉及到Objetc中的equals方法和toString方法,日期类Date,日历类Calendar,日期格式化类SimpleDateFormat以及基 ...

  3. Java中Object类hashCode的底层实现

    Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...

  4. Java 之 Object 类

    一.Object 概述  java.lang.Object 类是 Java 语言中的根类,即所有类的父类. 在对象实例化的时候,最终找的父类就是 Object. 如果一个类没有特别指定父类,那么默认则 ...

  5. Java之Object类用法总结

    Object类概述: 1.Object类是所有Java类的根父类. 2.如果在类的声明中未使用extends关键字指明其父类, 则默认父类为java.lang.Object类. Object类主要结构 ...

  6. java.lang.Object类与equals()及toString()的使用

    1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Object类中的功能(属性.方法)就具有通用 ...

  7. java之Object类介绍

    1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 p ...

  8. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  9. JDK1.8源码(一)——java.lang.Object类

    本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址. 首先介绍JDK中所有类的基类——java.lang.Object. Object 类属于 java.lang 包,此包下 ...

  10. 浅析Java的Object类

    前言:   最近在回顾Java基础,在此过程中,查看源码是少不了的   这里以JDK8以基准,记录一些自己查看源码的观感 Object类,翻阅源码,看看这个类的所在位置,是在 java.lang 包下 ...

随机推荐

  1. 解决多次重连rabbitMQ失败

    项目中有用到rabbitMQ,但由于防火墙原因只有在SIT环境下才能连上rabbitMQ,在本地是无法连上rabbitMQ的.如下: 为了不影响调试,临时解决方法为禁止rabbitMQ打印日志.在lo ...

  2. [R语言] R语言PCA分析教程 Principal Component Methods in R

    R语言PCA分析教程 Principal Component Methods in R(代码下载) 主成分分析Principal Component Methods(PCA)允许我们总结和可视化包含由 ...

  3. 【前端调试】- 借助Performance分析并优化性能

    欢迎阅读本系列其他文章 [前端调试]- 更好的调试方式 VSCode Debugger [前端调试]- 断点调试的正确打开方式 介绍 首先简单过一下Performance的使用,打开网页点击控制台Pe ...

  4. 数据结构——八大排序算法(java部分实现)

    java基本排序算法 1.冒泡排序 顶顶基础的排序算法之一,每次排序通过两两比较选出最小值(之后每个算法都以从小到大排序举例)图片取自:[小不点的博客](Java的几种常见排序算法 - 小不点丶 - ...

  5. dp 优化

    dp 优化 \(\text{By DaiRuiChen007}\) I. [ARC085D] - NRE \(\text{Link}\) 思路分析 将最终的第 \(i\) 对 \(a_i\) 和 \( ...

  6. Quartz.Net 官方教程 Tutorial 3/3

    Schedule 相关属性设置 扩展属性方式 var host = Host.CreateDefaultBuilder() .ConfigureServices(services => { se ...

  7. 提供给用户使用的表格样式自定义工具,适用于elementUI表格

    介绍 给用户提供了可以自定义修改elementUI表格的能力,通过混入(mixins)使用,必须先安装element-ui. 通过npm安装: npm i el-table-customizer 使用 ...

  8. 数据同步gossip协议原理与应用场景介绍

    作者:京东物流 冯鸿儒 1 简介 Gossip是一种p2p的分布式协议.它的核心是在去中心化结构下,通过将信息部分传递,达到全集群的状态信息传播,传播的时间收敛在O(Log(N))以内,其中N是节点的 ...

  9. 关于我在学习LFU的时候,在开源项目捡了个漏这件事。

    你好呀,我是歪歪. 这篇文章带大家盘一下 LFU 这个玩意. 为什么突然想起聊聊这个东西呢,因为前段时间有个读者给我扔过来一个链接: 我一看,好家伙,这不是我亲爱的老朋友,Dubbo 同学嘛. 点进去 ...

  10. 国际财务系统基于ShardingSphere的数据分片和一主多从实践

    作者:京东物流 张广治 1 背景 传统的将数据集中存储至单一数据节点的解决方案,在性能和可用性方面已经难于满足海量数据的场景,系统最大的瓶颈在于单个节点读写性能,许多的资源受到单机的限制,例如连接数. ...