博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java高级篇之Object 类
阅读量:3966 次
发布时间:2019-05-24

本文共 2415 字,大约阅读时间需要 8 分钟。

一、Object 类

1、它是所有类的根类,如果一个类未继承其它类它一定继承了Object类,比如

Class Person [extends Object]{} //extends Object 被省略掉
2、Object类中没有属性,只有非私有的方法,这说明它的所有的方法都是子类的方法,这些方法子类都可以重写或者直接进行调用。
3、 在多态中有二个概念叫向上转型和向下转型,其中向上转型的要义就是子类的对象可以直接转换为父类型的对象,Object是所有子类的父类所以所有的对象都可以直接转换为Object类型,比如 Person person;,Object o = person;如果做了这种转换,意味着子类中属于自已的方法都不能使用只能使用Object类的方法。如果一个方法的参数声明为Object类型,比如 public void methd(Object o),意味着所有的对象都可以传入,其内部会自动作类型转换。

sendObj(new String("xxxxxxxx"));//内部执行了向上转型public static void sendObj(Object o){
System.out.println(o); //传入的对象类型就是Object类型,该对象只能调用Object的方法,如果需要调用自已的方法进行向下转换(强制转换) System.out.println(((String) o).length());}

4、Object的常用方法

public int hashCode()

返回对象的哈希码值。 支持这种方法是为了散列表,如HashMap提供的那样

1、什么是散列表
该表中的所有元素都有确定的地址,元素的地址又由元素的key值来决定。
在这里插入图片描述

因此,我们认为对象的哈希值就是对象的地址,System.out.print(obj)的输出结果中的地址值就是调用obj的hashCode()方法的返回值,也就是对象的哈希值。该方法一般由其它的Api来调用,应用程序的设计者一般不会自已去调用。该方法可以被重写,但强烈建议如果对象要放入HashSet集合或作为HashMap集合的key,最好不要重写该方法,否则可能会造成内存泄漏。

2、toString() 方法

public String toString()

返回对象的字符串表示形式。 一般来说, toString方法返回一个“textually代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。

System.out.println(o.toString());//输出对象执行toString方法的返回值System.out.println(o);

在输出语句中,直接使用对象就相当于调用了toString,这是一种默认行为。

如果子类希望改变对象的字符串的表示形式,就可以重写该方法,它的内容可以作为程序执行中日志的输出。

@Overridepublic String toString() {
return "name="+name+" age="+age;}

4、equals() 方法

public boolean equals(Object obj)

指示一些其他对象是否等于此对象。

用来比较两个对象是否是同一对象,相当于 obj1 == obj2 判断
在String类中,该方法被重写了,因此在String 对象上调用该方法是用来比较串值是否相等,而不是判断是否是同一对象。
另外,有时候会在子类中去重写该方法,如果设计者认为两个对象的属性值完全一致,则这两个对象是相等的对象。

@Overridepublic boolean equals(Object o) {
if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {
return Objects.hash(name, age);}

5、jdk1.7新增加的Objects 类

java.util.Objects public static int hash(Object... values)
Object... values 是1.5新特性,叫可变参数,传值是可传入的参数个数是动态的,没有也行,多个也行。传值时多个参数用 , 分隔,如 Objects.hash(name, age),Objects.hash();

为输入值序列生成哈希码。

常用来在重写hashCode()方法进行调用,用该方法的返回值替换原有方法的返回值。

public static boolean equals(Object a,                             Object b)

方法返回true如果参数相等,彼此false其他。 因此,如果两个参数都是null , true返回null ,如果只有一个参数是null ,则返回false 。 否则,使用第一个参数的equals方法确定相等性。

该方法用来替换 Object中的equals方法,老的方法具有类型不安全的漏洞,如果参数比较的对象是null会抛空指针异常,而新的方法则不会。原码:

return (a == b) || (a != null && a.equals(b));

转载地址:http://wkzki.baihongyu.com/

你可能感兴趣的文章
使用ORM工具进行数据访问
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
杭电ACM——6463(思维)
查看>>
杭电ACM——2069,Coin Change(DP)
查看>>
杭电ACM——2110,Crisis of HDU(母函数)
查看>>
杭电AM——2152,Fruit(母函数)
查看>>
杭电ACM——2566,统计硬币(DP)
查看>>
堆栈(数据结构)
查看>>
队列(数据结构)
查看>>
Mule ESB-Content-Based Routing Tutorial(1)
查看>>
Mule ESB-Content-Based Routing Tutorial(2)
查看>>
Mule ESB-Content-Based Routing Tutorial(3)
查看>>
年末项目经验总结
查看>>
做事情要放下面子,拿起责任
查看>>
敏捷开发实践(1)-故事工作量估算导致的问题
查看>>
记一次解决jenkins持续构建,自动部署的问题
查看>>
敏捷开发实践(2)-要不要文档?
查看>>
写博意味着什么
查看>>
比较Cint() , int() , fix() ,round()的区别
查看>>
举例说明常用字符串处理函数
查看>>