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()
返回该对象的哈希码值
注意:哈希值是根据哈希算法计算出来的值,这个值跟地址有关,但不是实际地址值,可以理解为地址值。(对应关系)
2.public final Class getClass()
返回此 Object 的运行时类。
Class类下也有一方法:public String getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
3.public String toString()
返回该对象的字符串表示
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
由于此方法意义不大,所以建议子类重写该方法
eclipse提供的重写:
4.public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
默认情况下比较的是地址值,意义不大,子类一般重写该方法。
源码:
举例:
eclipse提供的重写:
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
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
相关文章推荐
- object-c中的-和+
- object-c中类的定义
- javascript dateObject.getYear()的历史遗留问题
- ObjectiveC基础-ivar是什么意思
- Objective-C 学习笔记
- 跟王老师学泛型(五): 自定义带泛型声明的方法
- IOS 开发 OC(Object_C)与前端页面JS(JavaScript)交互整理(一)
- 跟王老师学泛型(一)使用泛型
- Scriptable Object
- Cloneable接口和Object的clone()方法
- [IOS/翻译]GCD-4 Managing Dispatch Objects
- objective-c内存管理的实现机制,并简述什么时候由你负责释放对象,什么时候不由你释放?
- 在Objective-C声明Block的几种方式
- Java NIO框架Netty教程(三) – Object对象传递
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- Object-C之继承
- Xcode7 安装VVDocumenter-Xcode步骤
- [PWA] 13. New db and object store
- Objective-C ---NSArray(梳理整理)
- effective objective-c 2.0 笔记 第五章 :内存管理