【前端学java】java中的Object类和前端中的Object有什么区别(9)

简介: 【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别

引言-前端原型Object回顾

在前端中,每一个对象都继承了原型链顶层Object原型对象上的所有方法,如hasOwnProperty()方法。

let person = {
   
  name:'shixiaoshi',
}
if(!person.hasOwnProperty('age')){
   
  person.age = 18
}

上述代码中,person对象的hasOwnProperty方法继承自其顶层对象Objec原型对象上的方法。

在Java中,Object是所有的根类,这一点和前端的概念也基本是一致的。

普通类的隐式继承

我们先看一段基础代码
GIF 2023-10-12 18-17-46.gif
上述代码中,我们定义了一个Person类,并在主类中打印其name属性的值。

在Java中,所有类都隐式地继承自Object类,因此,上述代码其实可以这么写:

package 类与对象;

public class Object_01 {
   
    public static void main(String[] args) {
   
        Person obj = new Person();
        System.out.println(obj.name);
    }
}

class Person extends Object{
   
    String name = "shixiaoshi";
}

基于这种规则,我们还可以在Object_01类中引用Person类时,使用Object来指明其类型。如

package 类与对象;

public class Object_01 {
   
    public static void main(String[] args) {
   
        // 使用Object指明 obj类型
        Object obj = new Person();
    }
}

class Person extends Object{
   
    String name = "shixiaoshi";
}

但注意,使用 Object指明obj类型时,obj继承的是Object上的所有方法,Person类上的方法或属性会丢失
GIF 2023-10-12 18-25-25.gif
如图,我们使用Object约束obj时,编译器已经无法识别其name属性,给出的提示都是Object类定义了一些通用的方法,如toString()方法等。

Object类的来源

我们在编译器里单击Object,可以定位到Object类定义的位置
GIF 2023-10-13 10-03-17.gif
如图,我们可以知道Object定义在java.lang包里,是这个包里定义的类

Object类的通用方法

Object类定义了一些通用的方法,这些方法在所有的Java对象中都可以使用。
以下是Object类中常用的方法(不用记,了解有这些东西就行

  1. toString():返回对象的字符串表示形式。默认情况下,该方法返回对象的类名和哈希码的十六进制表示。
  2. equals(Object obj):用于判断两个对象是否相等。默认情况下,equals()方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。在自定义类中,可以重写equals()方法来定义对象的相等性比较规则。
  3. hashCode():返回对象的哈希码。哈希码用于在哈希表等数据结构中快速定位对象。
  4. getClass():返回对象的运行时类(Runtime Class),即对象所属的类的Class对象。
  5. notify()notifyAll():用于在多线程编程中实现线程间的通信。这两个方法用于唤醒等待中的线程。
  6. wait():用于在多线程编程中实现线程的等待。调用该方法会使当前线程进入等待状态,直到其他线程调用notify()notifyAll()方法唤醒它。
  7. clone():用于创建并返回对象的副本。默认情况下,clone()方法执行的是浅拷贝。如果需要实现深拷贝,需要在自定义类中重写该方法。
  8. finalize():用于垃圾回收器在回收对象之前执行一些清理操作。但由于这个方法在Java 9中被废弃,不推荐使用。

    Object类是Java中所有类的祖先,它提供了一些通用的方法,可以在所有Java对象中使用。但在实际开发中,我们通常不直接使用Object类,而是使用它的子类,因为它的子类会提供更具体的功能和行为。

接下来,我们学习一些简单的方法,再加深下对Object的理解

toString

我们先来看一段代码
GIF 2023-10-13 10-13-59.gif
上述代码中,我们将Obj通过toString()方法转换成了字符,并打印出了 其结果。
现在,我们简单介绍下toString()方法的作用:
toString()方法可以将对象转换成字符串,其打印的地址就是对象的默认内存地址
image.png

内存地址的概念和前端中是一样的,这里涉及到深浅拷贝,值引用和对象引用等概念,这些概念不熟悉的同学快下去复习吧

为了更直观的理解打印的内容,我们可以将这个方法进行重写,我们先准备如下代码

package 类与对象;

public class Object_01 {
   
    public static void main(String[] args) {
   
        // 使用Object指明 obj类型
        Object obj = new Person();
        System.out.println(obj.toString());
    }
}

class Person {
   

}

鼠标放到Person类里面,点击ctrl + o ,可以快速改写代码
GIF 2023-10-13 10-30-56.gif
上述代码的运行结果自然是打印出了我们自定义的内容
image.png

注意:"My name is "+name+"" 中的 "+name+" 是java中字符拼接的方法

hashCode

这个方法用于返回对象的内存地址(和toString方法效果一致)

package 类与对象;

public class Object_01 {
   
    public static void main(String[] args) {
   
        // 使用Object指明 obj类型
        Object obj = new Person();
        // toString 方法
        System.out.println("tosrting方法" + obj.toString());
        // hashCode 方法
        System.out.println("hashCode方法" + obj.hashCode());
    }
}
class Person {
    }

运行结果
image.png
可能你会有疑问,74a14482的内存地址和1956725890的内存地址不一致啊,实际上,一个是16进制,一个是10进制的显示而已

equals

用于判断两个对象是否相等。默认情况下,equals()方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。
我们先看一个简单例子

package 类与对象;

public class Object_01 {
   
    public static void main(String[] args) {
   
        // 使用Object指明 obj类型
        Object obj = new Person();
        // equals 方法
        System.out.println(obj.equals(new Person()));    // 打印结果是false
    }
}
class Person {
    }

这个打印结果告诉我们,obj 和new Person()不是一模一样的东西。

行了,我们就探究这么多,后面通过其他demo继续扩充我们的知识体系!!

相关文章
|
5月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
291 101
|
5月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
325 100
|
6月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
491 143
|
6月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
2439 102
|
7月前
|
存储 缓存 人工智能
Java int和Integer的区别
本文介绍了Java中int与Integer的区别及==与equals的比较机制。Integer是int的包装类,支持null值。使用==比较时,int直接比较数值,而Integer比较对象地址;在-128至127范围内的Integer值可缓存,超出该范围或使用new创建时则返回不同对象。equals方法则始终比较实际数值。
239 0
|
4月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
170 4
|
4月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
254 5
|
4月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
341 5
|
4月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
246 2
|
4月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
291 1

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    749
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    329
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    271
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    229
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    338
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    469
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    222
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    156
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    246
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    301