1. Object类
在Java体系中,java.lang.Object类位于顶端(是所有对象的直接或间接父类)。如果一个类没有写extends关键字声明其父类,则该类默认继承java.lang.Object类。Object类定义了“对象”的基本行为,被子类默认继承。
1)toString方法:返回一个可以表示该对象属性内容的字符串。
MyObject obj=new MyObject(); // MyObject类自定义
String info=obj.toString();
System.out.println(info);
A.上例MyObject 类没有toString方法,对象也能调用toString()?
因为所有的类都继承自Object,而toString方法是Ojbect定义的,我们直接继承了这个方法。Object的toString方法帮我们返回一个字符串,这个字符串的格式是固定的:类型@hashcode,这个hashcode是一串数字,在java中叫句柄,或叫地址(但不是真实的物理地址,是java自己的一套虚拟地址,防止直接操作内存的)。
public String toString(){ //只能用public,重写的方法访问权限要大于等于父类中方法的权限
return "这个是我们自己定义的toString方法的返回值MyObject!";
}
B.为什么要重写toString方法?
toString定义的原意是返回能够描述当前这个类的实例的一串文字,我们看一串hashcode没意义,所以是要重写的。
2)equals方法:用于对象的“相等”逻辑。
A.在Object中的定义:
public boolean equals(Object obj){
return (this==obj);
}
由此可见,this==obj与直接的==(双等于)效果一样,仅仅是根据对象的地址(句柄,那个hashcode值)来判断对象是否相等。因此想比较对象与给定对象内容是否一致,则必须重写equals方法。
B.“==”与equals的区别:
用“==”比较对象时,描述的是两个对象是否为同一个对象!根据地址值判断。而equals方法力图去描述两个对象的内容是否相等,内容相等取决于业务逻辑需要,可以自行定义比较规则。
C.equals方法的重写:如,判断两点是否相等。
public boolean equals(Object obj){
/* 注意参数,若给定的对象obj的地址和当前对象地址一致,那么他们是同一个对象,
* equals方法中有大量的内容比较逻辑时,加上这个判断会节省性能的开销!
*/
if(this == obj){
return true;
}
/* equals比较前要进行安全验证,确保给定的对象不是null!若obj是null,
* 说明该引用变量没有指向任何对象,那么就不能引用ojb所指象的对象(因为对象不存在)
* 的属性和方法!若这么做就会引发NullPointException,空指针异常!
*/
if(obj == null){
return false;
}
/* 直接将Object转为子类是存在风险的!我们不能保证Object和我们要比较的对象是
* 同一个类型的这会引发ClassCastException!我们称为:类造型异常。
* 重写equals时第一件要做的事情就是判断给定的对象是否和当前对象为同一个类型,
* 不是同类型直接返回false,因为不具备可比性!
*/
if( !(obj instanceof Point) ){
return false;
}
// 是同一类型,转换
Point p=(Point)obj;
// 最后返回内容比较( 根据实际情况决定 )
return this.x==p.x && this.y==p.y;
}
2. API介绍
API文档是我们用来了解JDK中提供的类库,我们可以先通过索引输入并找到我们需要了解的类,而后我们就可以方便的了解该类的作用,常量的作用,以及该类提供的所有方法的作用,以及方法的参数及返回值的含义。
本文出自 “永远年轻” 博客,请务必保留此出处http://kingkongzhao.blog.51cto.com/6319491/1656398
原文地址:http://kingkongzhao.blog.51cto.com/6319491/1656398