Java常用API 之 java.lang.Object类(附解析和示例)_02

了解Object是非常有必要的,Object类是Java里的根类,即Java其他类都使用Object类作为超类。

所有的对象(包括数组)都实现这个类的方法,Object类里的方法在任何对象上都可以使用。

----------------------------------------常用方法-----------------------------------------------

Object常用方法
protected  Object clone() 创建并返回此对象的一个副本,默认采用浅克隆的方式,如果子类需要深克隆,可以覆盖该方法。
boolean equals(Object obj)判断其他某个对象obj是否与此对象相等。
Class<?> getClass() 返回此 Object 的运行时类。
 int hashCode() 返回该对象的哈希码值。
 String toString()  返回该对象的字符串表示。


(1)protected  Object  clone( ) 

 protected native Object clone() throws CloneNotSupportedException

从Object类的源码中可以看出Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。Object的clone()方法采用浅克隆的方式。若子类有深克隆的需求,需实现cloneable接口,并覆盖clone( )方法。

浅克隆的复制方式为:对基础数据类型在内存里复制一份,对其他类型则采用引用的方式,所以浅克隆存在安全隐患。

Object类的clone()方法是一个native方法,native方法的效率一般来说都是远高于Java中的非native方法。这也解释了为什么要用Object中clone()方法而不是先new一个类,然后把原始对象中的信息复制到新对象中。Object.clone()方法返回一个Object对象。我们必须进行强制类型转换才能得到我们需要的类型。



(2)boolean  equals(Object obj)

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

从源码可以看出,默认是调用==操作符去比较两个对象的地址,而不是对象的值。如果子类需要通过两个对象的值来判断对象是否相等,需在子类重写该方法。当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。我们很大部分时间都是进行两个对象的比较,这时Object的equals()方法就满足不了需求,实际上JDK中,String、Math等封装类都对equals()方法进行了重写。

(3)Class<?> getClass( ) 

//源码
public final native Class<?> getClass();

public class Test //实例
{
	public static void main(String[] args) 
	{
		String str= new String();  
		System.out.println(str.getClass());  
	}
}
//输出
class java.lang.String
(4)int hashCode( ) 
public native int hashCode();

Object本地实现的hashCode()方法计算的值是底层代码的实现,采用多种计算参数,返回的并不一定是对象的(虚拟)内存地址,具体取决于运行时库和JVM的具体实现。

重写hashCode()方法的基本规则:

    在 Java 应用程序执行期间,对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数。
    如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象调用 hashCode 方法都必须生成相同的整数结果。


(5)String  toString() 

public String toString()//源码
{
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成,并不是一个简明但易于读懂的信息表达式。 建议所有子类都重写此方法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: java.lang.ObjectJava中所有类的父类,它定义了一些通用的方法,例如toString()和equals()。如果出现“无法解析java.lang.Object”的错误,可能是因为代码中使用了不正确的语法或缺少了必要的依赖库。建议检查代码中是否有拼写错误或语法错误,并确保所有必要的依赖库已正确导入。 ### 回答2: "无法解析java.lang.Object"是指在Java程序中遇到了无法解析java.lang.Object的错误。 java.lang.ObjectJava中所有类的基类,它包含了所有类共有的方法和属性。当无法解析java.lang.Object时,意味着JDK(Java Development Kit)中的核心库没有被正确加载。 解决此问题的方法有以下几种: 1. 检查JDK安装:首先,确保已正确安装了JDK。可以在命令行中运行`java -version`命令,查看是否能正确输出JDK的版本信息。如果没有输出或输出异常,说明JDK没有安装或安装错误,需要重新安装。 2. 检查classpath设置:在Java程序中,classpath是指用于指定Java类和资源文件的搜索路径的系统环境变量。请确保classpath正确设置,以便能够找到java.lang.Object类。可以通过命令行运行`echo %classpath%`(Windows)或`echo $CLASSPATH`(Linux/Mac)命令来查看classpath设置。 3. 检查IDE或编译器配置:如果使用集成开发环境(IDE)或其他编译器进行Java开发,需要检查其配置是否正确。确保项目的构建路径或编译选项中包含了JDK的路径,并且没有错误配置导致无法解析java.lang.Object类。 4. 检查Java项目依赖:如果使用了第三方库或框架,在编译和运行时需要确保相关的依赖库已正确引入,并且版本兼容。如果依赖的库中存在与java.lang.Object类冲突的类或版本不匹配的情况,可能会导致无法解析java.lang.Object。 总之,在遇到无法解析java.lang.Object的错误时,需要仔细检查JDK的安装、classpath设置、IDE或编译器配置以及项目依赖等环节,确保其正确性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值