Java常用类01:object类

头歌 Java面向对象- 常用类 Object。 阅读详情

object类

Object类是所有类的父类,即直接或间接的继承lava.lang.Object类

由于所有的类都继承在Object类,因为省略了extends Object关键字

该类中主要有以下方法:

  • toString()
  • getClass()
  • equals()
  • clone()
  • finalize()

1、clone()方法

protected native Object clone() throws CloneNotSupportedException;

clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象, 首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几 种方式可以创建对象呢?

  • 使用new操作符创建一个对象

  • 使用clone方法复制一个对象

那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首 先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后, 再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完 毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。而clone在第一步 是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象) 相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新 的相同的对象被创建,同样可以把这个新对象的引用发布到外部。

package com.object;

import java.util.Date;

public class Person implements Cloneable{
    private String name;
    private int age;
    private Date date;
    public Person() {
    }

    public Person(String name, int age, Date date) {
        this.name = name;
        this.age = age;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public Object clone() throws CloneNotSupportedException{
        Person cloned = (Person)super.clone();
        cloned.date = (Date)date.clone();
        return cloned;
//        return (Person)super.clone();

    }
}

package com.object;

import java.util.Date;

public class Demo01 {
    public static void main(String[] args) throws CloneNotSupportedException {

        Person p = new Person("zhang",23,new Date());
        Person p1 = (Person) p.clone();
        Person p2 =p;
        System.out.println(p);
        System.out.println(p2);
        System.out.println(p1);
        String result = p.getName() == p1.getName()?"clone是浅拷贝":"clone是深拷贝";
        String result2 = p.getDate() == p1.getDate()?"clone是浅拷贝":"clone是深拷贝";
        System.out.println(result);
        System.out.println(result2);

    }
}

2、toString()方法

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at标记符“@”和此对象哈希码的无符号十六进制表示组成。

该方法用得比较多,一般子类都有覆盖。

public static void main(String[] args){
	Object o1 = new Object();
	System.out.println(o1.toString());
}

3、getClass()方法

public final native Class<?> getClass();

返回此Ojbect运行时的类型。

不可重写,要调用一般于getName()联合使用,如getClass().getName();

public static void main(String[] args) {
    Object o = new Object();
    System.out.println(o.getClass());
    //class java.lang.Object
}

4、finalize()方法

protected void finalize() throws Throwable { }

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。 Java允许在类中定义一个名为finalize()的方法。它的工作原理是:一旦垃圾回收器准备好释放对象占用 的存储空间,将首先调用其finalize()方法。并且在下一次垃圾回收动作发生时,才会真正回收对象占用 的内存。 关于垃圾回收,有三点需要记住:

1、对象可能不被垃圾回收。只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不 到释放。

2、垃圾回收并不等于“析构”。

【科普:析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完 毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟 了一片内存空间,delete会自动调用析构函数后释放内存)。】

3、垃圾回收只与内存有关。使用垃圾回收的唯一原因是为了回收程序不再使用的内存。 finalize()的用途:

无论对象是如何创建的,垃圾回收器都会负责释放对象占据的所有内存。

这就将对finalize()的需求限制到一种特殊情况,即通过某种创建对象方式以外的方式为对象分配了存储 空间。不过这种情况一般发生在使用“本地方法”的情况下,本地方法是一种在Java中调用非Java代码的方式。

5、equals()方法

public boolean equals(Object obj) {
	return (this == obj);
}

6、hashCode()方法

public native int hashCode();

返回该对象的哈希码值。 该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写 hashCode方法。这个方法在一些具有哈希功能的Collection中用到。 一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash Code() == obj2.hashCode(),但是 hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

7、 wait()方法 —学完多线程再回来补充

8、notify()方法 —学完多线程再回来补充

头歌--Java面向对象 - 常用类 阅读详情

相关推荐

SpringBoot 中 @RequestMapping 及衍生注解的全面解析与实践

本文全面解析Spring Boot中@RequestMapping及其衍生注解的使用,涵盖核心功能、HTTP方法特定注解(@GetMapping/@PostMapping等)、属性详解(路径/参数/头信息等)以及路径变量处理。文章详细介绍了注解的组合使用、继承特性、版本控制策略等高级应用,并针对405/404等常见错误提供解决方案。通过学习这些注解的规范用法,开发者能够构建符合RESTful风格的API接口,提升代码可读性和可维护性。建议优先使用HTTP方法特定注解,合理规划URL结构,并注意避免路径冲突。

Java&AI小吕布的博客 2037

第1关:Object类

第1关:Object类 任务描述 本关任务:掌握Object类及Object类的一些常用方法。 编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: Demo类和Person类已经写好,在测试类中创建Demo类对象d1,传入输入值num1, d1调用toString方法并打印输出该值; 创建Demo类对象d2,同样传入输入值num1,打印判断d1和d2是否相等(实际是比较地址); 创建Person类对象p,传入输入值num2,打印判断d1和p是否相等(实

陈陈不like的博客 5273

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 186

Educoder- 《JAVA从小白到大牛》(第二章)2-6 Java面向对象 - 常用类

提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论。 文章目录第1关:Object类相关知识什么是Object类1.关于`toString()`方法**2.关于`equals()`方法**Java对象克隆编程要求测试说明参考答案第2关:JAVA基础类型包装类-练习参考答案第3关:String&StringBuilder&StringBuffer类-练习参考答案第4关:Random类相关知识Random类Random对象的生成Random类中的常用方法编程要求测试说明参考答案

weixin_45674170的博客 4782

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

RK3568部署YOLOv8的7种方法对比:量化vs非量化的性能实测与优化建议

本文针对RK3568平台,深度对比了YOLOv8模型的七种部署方法,重点分析了量化与非量化策略的性能差异。通过实测数据,详细评估了不同方法在推理速度、CPU占用、内存消耗及模型精度上的表现,并提供了从模型结构调整到系统级优化的具体建议,为边缘AI部署选型提供实用参考。

weixin_29099217的博客 529

第1关,Object类

第1关:Object类 300 任务要求 参考答案 任务描述 相关知识什么是Object类 Object类的方法 Java对象克隆 编程要求 测试说明 任务描述 本关任务:掌握Object类及Object类的一些常用方法。 相关知识 为了完成本关任务,你需要掌握: 1.什么是Object类; 2.Object类的方法; 3.Java对象克隆。 什么是Object类 Java中有一个比较特殊的类,就是 Object 类,它是所有类的父类,如果一个类没有使用extends关键

weixin_61270115的博客 1124

【云原生进阶之容器】第六章容器网络6.6.2--Cilium部署

部署Cilium非常简单,可以通过单独的yaml文件部署全部组件(目前我使用了这个方式部署了1.7.1版本),也可以通过Helm Chart一键完成。重要的是部署环境和时机:官方建议所有部署节点都使用Linux最新稳定内核版本,这样所有的功能都能启用。作为一个Kubernetes网络组件,它应该在部署Kubernetes其他基础组件之后,才进行部署。

junbaozi的专栏 793

Object类、常用类

java只提供了两种数据类型,基本数据类型和引用数据类型,使用基本数据类型,效率高,但是很多情况下 我们需要创建对象使用,如果我们想要基本数据类型像对象一样操作,就必须使用基本数据类型的包装类:如下;基本类型对应包装类(java.lang包中)byteByetshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean。

2301_77165049的博客 1098

11、基于多阵列电极的表面肌电信号运动估计

本文介绍了一种基于多阵列电极的表面肌电信号运动估计技术,旨在实现对手腕和手指运动的高精度估计,解决传统人机接口在操控多自由度机器人时的局限性。通过多阵列电极系统采集前臂肌肉活动信号,结合独立成分分析(ICA)和非负矩阵分解(NMF)等信号处理方法,提取肌肉协同作用,进而生成运动指令以控制机器人或假肢手。文章对比了多阵列电极与传统电极的优势,展示了运动估计算法的整体流程,并以假肢手控制为例说明其实际应用。最后探讨了该技术在测量精度、应用拓展、智能化和便携化等方面的未来发展方向。该技术为假肢控制、康复训练和人机

ik678901234的博客 87

Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(10) C++ 前置后置增减运算符重载形式与比较

C语言的++、–运算符在此不讨论。 文章目录1、前置后置增减运算符重载的形式2、前置和后置运算符的性能比较 1、前置后置增减运算符重载的形式 自增运算符“++”和自减运算符“–”分别包含两个版本。即运算符前置形式(如 ++x)和运算符后置形式(如 x++),这两者进行的操作是不一样的。因此,当我们在对这两个运算符进行重载时,就必须区分前置和后置形式。C++根据参数的个数来区分前置和后置形式。如果按照通常的方法来重载 ++ 运算符(即作为成员函数重载时不带参数,或者作为非成员函数重载时带有一个参数),那么重载

二进制君 5831

01. Object根类

简书:http://www.jianshu.com/u/92a2412be53e掘金:https://juejin.im/user/499639464759898。

qq_35829566的博客 1907

Android 人像分割实战:OpenCV+YOLOv8+NCNN 三库联动(附 GPU 加速 / 内存优化全方案)

本文详细介绍了在Android项目中集成OpenCV+YOLOv8+NCNN实现实时人像分割的技术方案。主要内容包括:项目环境搭建(配置NDK、添加Native模块)、核心库文件集成(OpenCV、NCNN、YOLOv8模型)、JNI接口设计与实现(Kotlin层调用C++算法)。通过Camera API获取图像数据,使用YOLOv8进行人体检测,结合NCNN高性能推理框架实现人像分割处理,最终将原始画面与分割结果(背景透明)同时显示在Android界面上。该项目采用多技术栈协同工作,OpenCV负责图像处

FJN110的博客 235

Java常用类

返回引用中存储的实际对象类型常用于判断两个引用中实际存储对象类型是否为同一类型//判断s1和s2是不是同一类型 getClass()返回引用中存储的实际对象类型}else {​。

Gjj_2003的博客 1010

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java PTA(10)——Java常用类

/ 打印java.lang.Object@273d3c System.out.println(new Integer(10).toString());// 打印10 System.out.println(new String(“Java”).toString());// 打印false System.out.println(point1.equals(point2));// 返回当前时间(毫秒数)

m0_61442114的博客 1814

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 常用类 01 Object 超类

1.1 Object 超类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现了这个类的方法。 clone() 创建并返回此对象的一个副本 equals() 指示其他某个对象是否与对此对象 “相等” getClass() 返回该对象的 运行时类 与反射有关 hashCode() 返回该对象的 哈希值 可以理解为对象的地址(大概是把 内存地址的十六进制 转换为了 十进制) finalize() notify() 唤醒在此对象监视器上 等待的单个线程。 not

小哞^同^学的技术博客 302

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

(Java常用类)Object类

文章目录Object类toString方法方法摘要覆盖重写代码演示equals方法方法摘要默认地址比较对象内容比较代码演示Objects类代码演示 Object类 类 Object是类层次结构的根(夫)类。 每个类(Person,Student…)都使用Object作为超类(父类)。 所有对象(包括数组)都实现这个类的方法 toString方法 方法摘要 public String toString():返回该对象的字符串表示。 toString方法返回该对象的字符串表示,其实该字符串内容就是对象的

我真的很不错的博客 504

Java常用类——Java API 及 Object类

一、API(应用程序编程接口) 1、概述 比如:我做一个商城网站,需要用到微信支付,那么微信支付会提供一些控制微信支付的Java类,这些类中定义好了操作微信支付的各种方法,这些Java类就是微信支付提供的编程接口,我们通常称为“微信支付API” 二、Object类 1、概述 类层次结构的根类 所有类都直接或间接的继承 Object 类 2、构造方法 public Object() 巧记:子类...

Lemon 580

Java内部类和常用类

字符串是常量,创建之后不消失字符串字面量存储在字符串池中,可以共享//"hello" 存储在常量池中//假如hashcode是x//"zhangsan"赋值给name 给字符串赋值时,并没有在原字符串上修改数据,而是重新开辟一块空间//hashcode是y “zhangsan”字符串常量可以共享//hashcode是y。

Naclarb优快云的博客 1279

java常用类(Object类)

Object类

qq_52215881的博客 581

【JavaSE】【常用类01】Object类

      Object类是java.lang包下的核心类,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入,Object类是所有类的父类,何一个类时候如果没有明确的继承一个父类的话,那么它就是Object的子类; 以下两种类的定义的最终效果是完全相同的: class Person { } class Person extends Object { } Object 类的11 个方法 1) clone() 1.方法声明 (1)

weixin_43589563的博客 210

JavaAPI常用类01

常用类API常用类:Java系统中提供的一些使用频率较高的类Java系统中所提供的一系列类和接口api文档:官方给广大Java开发者、学习者提供对类和接口功能的说明文档。

2303_77543831的博客 2082

Java常用类--Object类

1. Object类 大家都知道Object是所有类的父类,任何类都默认继承Object。 理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。 由于所有的类都继承在Object类,因此省略了extends Object关键字。 Obejct类的主要方法 toString() getClass() equals() clone() finalize( 其中toString(),getClass(),equals是其中最重要的方法。 注意: Object类

天行健 君子以自强不息,地势坤 君子以厚德载物。 631

API常用类-Object类

API常用类 (Application Programming interface)应用程序编程接口 就是JDK 提供的帮助简化编程的东西 编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑,向后跑,射门等各种命令,对于有开发经验的人员说,这道机器人厂商一定会提供一些关于控制机器人的java类,这些类定义好了操作机器人的各种动作的方法,其实这些java类就是机器人厂商提供给应...

u011301372的博客 265

java常用类之Object类

object类 object类是所有类的基类,超类,所有类的直接或者间接父亲,位于继承树的最顶端。 任何类,如没有书写extends显示继承某个类,都默认直接继承object类,否则为间接继承 object类所定义的方法,是所有对象都具备的方法 object类可以存储任何对象 object类的方法 1 getClass()方法 返回应用中存储的实际对象类型 应用:通常用于判断两个引用中实际存储 对象类型是否一致。 package com.object.dem01; public class Stude

Walker_sis的博客 600

java day12 常用类(Object类、包装类、String类)

1、Object类 1.1 toString()方法 public String toString(){…} 返回该对象的字符串表示(表现形式)。 可以根据程序需求覆盖该方法,如:展示对象各个属性值。 2.2.4 equals()方法 public boolean equals(Object obj){…} 默认实现为(this == obj),比较两个对象地址是否相同。 可进行覆盖,比较两个对象的内容是否相同。 equals重写步骤: 比较两个引用是否指向同一个对象。 判断obj是否为

qq_43642864的博客 185
上一篇: 异常03:自定义异常及经验小结
下一篇: Java常用类02:包装类
maby_
博客等级 码龄19年 15粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值