1,Object类:

Object类是所有的类,数组,枚举的父类,也就是说,JAVA中允许把任何的对象赋值给Object类(包括基础数据类型),当定义一个类的时候,没有使用extends关键字显示指定父类的时候,默认集成Object类。因为所有类都是Object的子类,所以所有的对象都可以调用Object类的方法。
 

2,Object常用方法:

(1),boolean equals(Object obj):

判断指定对象与该对象是否相等。此处默认判断相等,其实就是判断两个变量的内存地址是不是同一个,因此这个equals方法通常没有太大的实用价值。我们通常需要在子类中重写。
 

(2),protected void finalize():

当一个类的状态是可恢复状态的时候,垃圾回收器会自动调用该方法,然后回收内存。
 

(3),String toString():

返回对象的字符串表达形式,当程序使用System.out.println()输出一个对象的时候,或者把对象与字符串做拼接的时候,会调用该方法。一般情况下需要重写。
 
 

3,对象克隆:clone()

java的Object类还提供了一个protected类型的clone方法,该方法用于帮助其他对象实现自我克隆,就是得到一个当前对象的副本,而且两者之间完全隔离。由于Object类提供的clone方法使用了protected,因此该方法只能被子类重写或者调用。

自定义类实现克隆的步骤:

(1),实现Cloneable接口。这是一个标记性的接口,实现该接口的对象可以实现“自我克隆”,接口里面没有定义任何方法。
(2),自定义类实现了自己的clone()方法。
(3),实现clone()方法时通过super.clone(),调用Object实现的clone方法来得到该对象的副本。并且立刻返回该副本。

package com.zmd.common_class_libraries;

import java.util.Objects;

/**
* @ClassName CloneTest
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/6.
*/
public class CloneTest {
private static class Address {
String Detail; public Address(String detail) {
Detail = detail;
}
}
private static class User implements Cloneable{
private int age;
private Address address; public User(int age) {
this.age = age;
this.address = new Address("河北承德");
}
//重写clone方法返回User对象,返回值需要强制转换一下:(User)
@Override
protected User clone() throws CloneNotSupportedException {
return (User)super.clone();
}
}
//测试方法
public static void main(String[] args) throws CloneNotSupportedException { User user = new User(18);
User user1 = user.clone();
System.out.println(user == user1);
System.out.println(user.address == user1.address);
System.out.println(user.age == user1.age); }
}

克隆对象内存示意图图:

上面这个方式其实就是一个浅克隆,就是简单的堆对象的各个变量进行了复制,如果是引用变量类型,实际上指向的还是同一个内存地址。

如果我们要深克隆怎么办?
程序员自己写代码实现

3,Objects类:

java7之后提供了一个Objects类,它其实就是一个对象操作的工具类,他提供了很多工具方法,这些方法都是空指针安全的。
(1),什么是空指针安全
其实就是当一个对象为null的时候,你去调用这个对象对应的方法,那就会触发空指针异常,有可能因为这个异常导致你的程序崩溃。
(2),工具方法
        User user = null;
/**
* 报错空指针异常
System.out.println(user.address);
System.out.println(user.hashCode());
System.out.println(user.toString());
*/
//使用Objects类获取null对象的Object的方法
System.out.println(Objects.hashCode(user)); //返回0
System.out.println(Objects.toString(user)); //返回null
//使用Objects工具类创建User对象,设置不允许对象为null并且设置错误提示。
User user1 = Objects.requireNonNull(user,"User不允许为null");

java 常用类库:Object类和Objects类的更多相关文章

  1. Java常用类库--观察者设计模式( Observable类Observer接口)

    如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口. import java.util.* ; class House extends Obse ...

  2. Java常用类库API之数字处理工具类

    数字处理工具类BigDecimal和DecimalFormat Java提供的java.text.DecimalFormat类,帮助我们用最快的速度将数据格式化为我们想要的样子.例如,取两位小数 im ...

  3. JAVA(三)JAVA常用类库/JAVA IO

    成鹏致远 | lcw.cnblog.com |2014-02-01 JAVA常用类库 1.StringBuffer StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不 ...

  4. Java 常用类库与技巧【笔记】

    Java 常用类库与技巧[笔记] Java异常体系 Java异常相关知识 Java在其创立的时候就设置了比较有效的处理机制,其异常处理机制主要回答了三个问题:what,where,why what表示 ...

  5. Google的Java常用类库 Guava资料

    java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子 ...

  6. Java 常用对象-Object类

    2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ...

  7. java 常用类库:操作系统System类,运行时环境Runtime

    System类: System 类代表Java程序的运行平台,程序不能创建System类的对象, System类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法. Sy ...

  8. 谈谈Java常用类库中的设计模式 - Part Ⅱ

    概述 本系列上一篇:建造者.工厂方法.享元.桥接 本文介绍的设计模式(建议按顺序阅读): 适配器 模板方法 装饰器 相关缩写:EJ - Effective Java Here We Go 适配器 (A ...

  9. JAVA常用类库简介(转)

    Java编程语言中为方便学习者学习,编制了许多类,这些类已经经过测试,都是我们编程的基础.如果不利用这些已存在的类,我们的编程工作将变得异常复杂并且效率低下.所以我们应尽可能多的掌握Java基本类库的 ...

随机推荐

  1. IDEA安装JavaFx

    jdk11之后jdk就不内置javafx了,需要自己下载 在idea中新建JavaFx项目: 创建成功后发现代码标红 这个时候要把刚刚下载的JavaFx包解压后添加进去 ​ 选择到自己解压的路径的文件 ...

  2. NFS FTP SAMBA的区别

    Samba服务 samba是一个网络服务器,用于Linux和Windows之间共享文件. samba端口号 samba (启动时会预设多个端口) 数据传输的TCP端口 139.445 进行NetBIO ...

  3. MicrosoftPowerBI—2019-nCov 新型冠状病毒肺炎多功能动态看板

    https://app.powerbi.cn/view?r=eyJrIjoiNmE0ZDU0MGItOTFjYy00MWYyLWFmZjMtMThkM2EwMzg5YjgyIiwidCI6ImQxNj ...

  4. echarts中饼状图数据太多进行翻页

    echarts饼状图数据太多 echarts 饼状图内容太多怎么处理 有些时候,我们饼状图中echarts的数据可能会很多. 这个时候展示肯定会密密麻麻的.导致显示很凌乱 我们需要'翻页'类似表格展示 ...

  5. jmeter+ant输出测试报告

    jmeter自己本身可以输出html测试报告的,不过这种自带的测试报告特别简陋,如下图所示,一般我们是不看这种的. 我们可以使用ant来输出更高效.更直观的测试报告. 首先下载安装ant, 我用的是a ...

  6. 巩固javaweb第九天

    巩固内容: HTML <base> 元素 <base> 标签描述了基本的链接地址/链接目标,该标签作为HTML文档中所有的链接标签的默认链接: <head> < ...

  7. python生成器浅析

    A 'generator' is a function which returns a generator iterator. It looks like a normal function exce ...

  8. nodejs-Path模块

    JavaScript 标准参考教程(alpha) 草稿二:Node.js Path模块 GitHub TOP Path模块 来自<JavaScript 标准参考教程(alpha)>,by ...

  9. 循环队列/顺序队列(C++)

    队列(queue)是一种限定存取位置的线性变.他允许在表的一端插入,在另一端删除.这个和计算机调度策略中的先来先服务FCFS(First Come/First Served)是一样的.队列中可以插入的 ...

  10. LINUX 安装增强 前置安装文件

    yum install kernel yum install kernel-devel yum install gcc yum install make