java中的object类

来源:互联网 发布:数据库关系模型设计 编辑:程序博客网 时间:2024/04/27 01:17


• Object类

1、位于java.lang包中。

2、类 Object 是类层次结构的根类,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法。

3、 因为Object是所有类的直接或间接父类,所以,Object中的所有方法,其子类都拥有。

3.1. toString()当直接打印对象时,默认输出的是该对象的toString方法的返回值。

默认输出的对象的格式为: 类名称@哈希值  如:com.jcxy.demo01.Student@15db9742

为什么会打印出这种形式呢?原因看下面例子

定义一个学生类

package com.jcxy.demo01;public class Student {private int age;private String name;}
定义一个Test类

package com.jcxy.demo01;public class Test {/**测试 toString()的输出结果 * @param args */public static void main(String[] args) {// TODO Auto-generated method stubStudent s = new Student();System.out.println(s.toString());//打印s就相当于s.toString()}}
打印结果为:com.jcxy.demo01.Student@15db9742

调用的toString()在父类的源码为

 public String toString() {        return getClass().getName() + "@" + Integer.toHexString(hashCode());    }
所以打印出来的结果是类名+@+16进制的哈希值


3.1.2如果想按照自己的格式打印出学生的信息,则需要覆盖父类中的toString()方法。

重新定义学生类



package com.jcxy.demo01;public class Student {private int age;private String name;//提供无参数的构造函数。eclipse快捷键:alt + shift + s 出现界面后按 cpublic Student() {super();// TODO Auto-generated constructor stub}//提供有参数的构造函数。eclipse快捷键: alt + shift + s 出现界面后按 opublic Student(int age, String name) {super();this.age = age;this.name = name;}
<span style="white-space:pre"></span>//重新定以后的父类方法public String toString() {return "age = "+age+"\tname = "+name;}//封装属性。eclipse快捷键: alt + shift + s 出现界面后按 rpublic 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;}}

Test中测试

package com.jcxy.demo01;public class Test {/**测试 toString()的输出结果 * @param args */public static void main(String[] args) {// TODO Auto-generated method stubStudent s = new Student(21,"Rose");System.out.println(s.toString());}}


打印结果:age = 21 name = Rose



3.2 equals()通过类比toString的复写形式,我们也可以重写自定义类的equals方法。

如比较两个学生是否相等,当年龄和姓名都相同时,我们认为是同一个学生。

学生类:

package com.jcxy.demo01;public class Student {private int age;private String name;//提供无参数的构造函数。eclipse快捷键:alt + shift + s 出现界面后按 cpublic Student() {super();// TODO Auto-generated constructor stub}//提供有参数的构造函数。eclipse快捷键: alt + shift + s 出现界面后按 opublic Student(int age, String name) {super();this.age = age;this.name = name;}public String toString() {return "age = "+age+"\tname = "+name;}//封装属性。eclipse快捷键: alt + shift + s 出现界面后按 rpublic 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;}//复写父类Object中的equals方法public boolean equals(Object obj) {//如果两个对象在栈中的地址值相等,则一定是同一个对象。if(this == obj){return true;}//判断obj是否是学生类对象if(obj instanceof Student){//如果是则向下转型,downcaseing  obj转换为student类Student s = (Student)obj;return (this.age == s.age && this.name == s.name) ? true : false;}return false;}}
Test类

package com.jcxy.demo01;public class Test {/**测试 equals()的输出结果 * @param args */public static void main(String[] args) {Student s1 = new Student(21,"Rose");Student s2 = new Student(21,"Rose");Student s3 = new Student(22,"Rose");Student s4 = new Student(21,"Jack");System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s1.equals(s4));}}
打印结果:true

                    false

    false



– 注意:关于Object与数组的关系:

1、对于数组元素类型为引用类型的数组来说

– Object obj = strs;//子类转换成父类。将数组整个对象转换成Object对象

– Object[] objs = strs;//将数组中的每个元素转换成对应的Object数组


2、对于数组元素类型为基本数据类型的数组来说

– Object obj2 = arrs;//子类转换成父类对象。将数组整个对象转换成Object对象

– Object[] objs2 = arrs;因为int类型没有父类。

package com.jcxy.demo01;public class Test {/**关于Object与数组的关系 * @param args */public static void main(String[] args) {int[] arrs = {1,2,3,4,5};String[] strs = {"aaa","bbb","ccc","ddd"};//子类转换成父类。将数组整个对象转换成Object对象Object obj = strs;//将数组中的每个元素转换成对应的Object数组Object[] objs = strs;//子类转换成父类对象。将数组整个对象转换成Object对象Object obj2 = arrs;//因为int类型没有父类。Object[] objs2 = arrs;//报错}}<span style="color:#800000;"></span>



好啦,我所掌握的Object类(上帝类)就这么多啦,希望能帮到有需要的人,同时也让自己能在以后有空复习一下。

0 0
原创粉丝点击