您的位置:首页 > 移动开发 > Objective-C

Object类概述

2016-05-18 14:40 447 查看
java.lang.Object

1.java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。

2.Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。

3.Object类是Java中唯一没有父类的类。其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

构造方法

public Object()

Object类只有这一个构造方法,并且是无参构造,回想之前写构造方法方面的东西时有这样一句话:子类构造方法默认访问的是父类无参构造方法。或许原因就在这!

常见成员方法

1.public int hashCode()

返回该对象的哈希码值

注意:哈希值是根据哈希算法计算出来的值,这个值跟地址有关,但不是实际地址值,可以理解为地址值。(对应关系)

class Demo{//省略了“extends Object”

}
public class HashCodeDemo {
public static void main(String[] args) {
Demo d1=new Demo();
Demo d2=new Demo();
Demo d3=d1;
System.out.println(d1.hashCode());//366712642
System.out.println(d2.hashCode());//1829164700
System.out.println(d3.hashCode());//366712642
}
}


2.public final Class getClass()

返回此 Object 的运行时类。

Class类下也有一方法:public String getName()

以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

package blog_05;
class Demo{

}
public class GetClassDemo {
public static void main(String[] args) {
Demo d1=new Demo();
Class c=d1.getClass();
String str=c.getName();
//链式编程:String str=d1.getClass().getName();
System.out.println(str);//输出:blog_05.Demo

}
}


3.public String toString()

返回该对象的字符串表示

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

getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

由于此方法意义不大,所以建议子类重写该方法

package blog_05;
class Demo{

}
public class ToStringDemo {
public static void main(String[] args) {
Demo d1=new Demo();
System.out.println(d1.toString());
System.out.println(d1.getClass().getName() + '@'
+ Integer.toHexString(d1.hashCode()));

}
}
//输出:
//blog_05.Demo@15db9742
//blog_05.Demo@15db9742


eclipse提供的重写:

package blog_05;
class Demo{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Demo [age=" + age + ", name=" + name + "]";
}//eclipse提供的重写

}
public class ToStringDemo {
public static void main(String[] args) {
Demo d1=new Demo();
d1.setAge(18);
d1.setName("huge");
System.out.println(d1.toString());//Demo [age=18, name=huge]
System.out.println(d1);//Demo [age=18, name=huge]
//可见直接输出也是调用的对象的toString()方法

}
}


4.public boolean equals(Object obj)

指示其他某个对象是否与此对象“相等”。

默认情况下比较的是地址值,意义不大,子类一般重写该方法。

源码:

public boolean equals(Object obj) {
return (this == obj);//比较对象地址是否相同
}


举例:

package blog_05;
class Demo{
private int age;
private String name;

public Demo() {
super();
}
public Demo(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class EqualsDemo {
public static void main(String[] args) {
Demo d1=new Demo(18,"huge");
Demo d2=new Demo(18,"huge");
Demo d3=d1;
System.out.println(d1.equals(d2));//false
System.out.println(d1.equals(d3));//true

}
}


eclipse提供的重写:

package blog_05;
class Demo{
private int age;
private String name;

public Demo() {
super();
}
public Demo(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Demo other = (Demo) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

}
public class EqualsDemo {
public static void main(String[] args) {
Demo d1=new Demo(18,"huge");
Demo d2=new Demo(18,"huge");
Demo d3=d1;
System.out.println(d1.equals(d2));//true
System.out.println(d1.equals(d3));//true

}
}


5.protected Object clone()

Creates and returns a copy of this object.

Object类中的说明是:

protected Object clone()throws CloneNotSupportedException

这个方法比较特殊:

  首先,使用这个方法的类必须实现java.lang.Cloneable接口,否则会抛出CloneNotSupportedException异常。

  Cloneable接口中不包含任何方法,所以实现它时只要在类声明中加上implements语句即可。

  第二个比较特殊的地方在于这个方法是protected修饰的,覆写clone()方法的时候需要写成public,才能让类外部的代码调用。

参考链接:

/article/4672807.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: