Object 是 Java 类库中的一个特殊类,也是所有类的父类。也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类。因此,以下两个类表示的含义是一样的。

public class MyClass{…}

等价于

public class MyClass extends Object {…}

Java 所有的类都是 Object 类的子类,任何 Java 对象都可以调用 Object 类的方法。

Object 类的常用方法

toString() 方法

toString() 方法返回该对象的字符串,当程序输出一个对象或者把某个对象和字符串进行连接运算时,系统会自动调用该对象的 toString() 方法返回该对象的字符串表示。

Object 类的 toString() 方法返回“运行时类名@十六进制哈希码”格式的字符串,但很多类都重写了 Object 类的 toString() 方法,用于返回可以表述该对象信息的字符串。

哈希码(hashCode),每个 Java 对象都有哈希码属性,哈希码可以用来标识对象,提高对象在集合操作中的执行效率。

代码示例

// 定义Demo类,实际上继承Object类
class Demo {}public class ObjectDemo {public static void main(String[] args) {Demo d = new Demo(); // 实例化Demo对象System.out.println("不加toString()输出:" + d);System.out.println("加上toString()输出:" + d.toString());}
}

输出结果为:

不加toString()输出:Demo@15db9742
加上toString()输出:Demo@15db9742

随机输出了一些地址信息,加和不加 toString() 的最终输出结果是一样的,也就是说对象输出时一定会调用 Object 类中的 toString() 方法打印内容。所以利用此特性就可以通过 toString() 取得一些对象的信息,如下面代码。

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String toString() {return "姓名:" + this.name + ":年龄" + this.age;}public static void main(String[] args) {Person per = new Person("百度", 30);// 实例化Person对象System.out.println("对象信息:" + per);// 打印对象调用toString()方法}
}

输出结果为:

对象信息:姓名:百度:年龄30

Person 类中重写了 Object 类中的 toString() 方法,这样直接输出对象时调用的是被子类重写过的 toString() 方法。

equals() 方法

在字符串比较时,介绍过两种比较方法,分别是==运算符和 equals() 方法,==运算符是比较两个引用变量是否指向同一个实例,equals() 方法是比较两个对象的内容是否相等,通常字符串的比较只是关心内容是否相等。

其使用格式如下:

boolean result = obj.equals(Object o);

其中,obj 表示要进行比较的一个对象,o 表示另一个对象。

要求用户从键盘输入登录用户名和密码,当用户输入的用户名等于 admin 并且密码也等于 admin 时,则表示该用户为合法用户,提示登录成功,否则提示用户名或者密码错误信息。

在这里使用 equals() 方法将用户输入的字符串与保存 admin 的字符串对象进行比较,具体的代码如下:

import java.util.Scanner;public class Test {// 验证用户名和密码public static boolean validateLogin(String uname, String upwd) {boolean con = false;if (uname.equals("admin") && upwd.equals("admin")) { // 比较两个 String 对象con = true;} else {con = false;}return con;}public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("------欢迎使用大数据管理平台------");System.out.println("用户名:");String username = input.next(); // 获取用户输入的用户名System.out.println("密码:");String pwd = input.next(); // 获取用户输入的密码boolean con = validateLogin(username, pwd);if (con) {System.out.println("登录成功!");} else {System.out.println("用户名或密码有误!");}}
}

上述代码在 validateLogin() 方法中又使用 equals() 方法将两个 String 类型的对象进行了比较,当 uname 对象与保存 admin 的 String 对象相同时,uname.equals(“admin”) 为 true;与此相同,当 upwd 对象与保存 admin 的 String 对象相同时,upwd.equals(“admin”) 为 true。当用户输入的用户名和密码都为 admin 时,表示该用户为合法用户,提示登录成功信息,否则提示用户名或密码有误的错误信息。

getClass() 方法

getClass() 方法返回对象所属的类,是一个 Class 对象。通过 Class 对象可以获取该类的各种信息,包括类名、父类以及它所实现接口的名字等。

对 String 类型调用 getClass() 方法,然后输出其父类及实现的接口信息。代码如下:

public class Test {public static void printClassInfo(Object obj) {// 获取类名System.out.println("类名:" + obj.getClass().getName());// 获取父类名System.out.println("父类:" + obj.getClass().getSuperclass().getName());System.out.println("实现的接口有:");// 获取实现的接口并输出for (int i = 0; i < obj.getClass().getInterfaces().length; i++) {System.out.println(obj.getClass().getInterfaces()[i]);}}public static void main(String[] args) {String strObj = new String();printClassInfo(strObj);}
}

该程序的运行结果如下:

类名:java.lang.String
父类:java.lang.Object实现的接口有:
interface java.io.Serializable
interface java.lang.Comparable
interface java.lang.CharSequence

接收任意引用类型的对象

既然 Object 类是所有对象的父类,则所有的对象都可以向 Object 进行转换,在这其中也包含了数组和接口类型,即一切的引用数据类型都可以使用 Object 进行接收。

interface A {public String getInfo();
}class B implements A {public String getInfo() {return "Hello World!!!";}
}public class ObjectDemo04 {public static void main(String[] args) {// 为接口实例化A a = new B();// 对象向上转型Object obj = a;// 对象向下转型A x = (A) obj;System.out.println(x.getInfo());}
}

输出结果为:

Hello World!!!

我们可以发现,虽然接口不能继承一个类,但是依然是 Object 类的子类,因为接口本身是引用数据类型,所以可以进行向上转型操作。

同理,也可以使用 Object 接收一个数组,因为数组本身也是引用数据类型。

public class ObjectDemo {public static void main(String[] args) {int temp[] = { 1, 3, 5, 7, 9 };// 使用object接收数组Object obj = temp;// 传递数组引用print(obj);}public static void print(Object o) {// 判断对象的类型if (o instanceof int[]) {// 向下转型int x[] = (int[]) o;// 循环输出for (int i = 0; i < x.length; i++) {System.out.print(x[i] + "\t");}}}
}

输出结果为:

1 3 5 7 9

使用 Object 接收一个整型数组,因为数组本身属于引用数据类型,所以可以使用 Object 接收数组内容,在输出时通过 instanceof 判断类型是否是一个整型数组。

Java Object类详解相关推荐

  1. Java Pattern类详解

    Java Pattern类详解 Pattern在java.util.regex包中,是正则表达式的编译表示形式,此类的实例是不可变的,可供多个并发线程安全使用. 定义 public final cla ...

  2. java 抽象类,接口,object类详解

    抽象类: 如果一个类没有足够的信息去描绘一个具体的对象,那么这个类就可以叫做抽象类. 也可以叫做:可声明抽象方法的类==>抽象类 注意: <1>抽象类不可以实例化对象,所以它只能被继 ...

  3. java object 详解_Java基础之Object类详解

    类Object是类层次结构的根类.每个类都直接或者间接地继承Object类.所有对象(包括数组)都实现这个类的方法.Object类中的构造方法只有一个,并且是无参构造方法,这说明每个类中默认的无参构造 ...

  4. Java基础--object类详解

    原文链接:https://www.cnblogs.com/zhangyinhua/p/7715486.html 阅读目录(Content) 一.clone()方法 1.1.clone与copy的区别 ...

  5. 1.2 Object类详解

    Object类概述 Object类是所有Java类的根父类 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 Object类中的功能(属性.方法)就 ...

  6. Java System类详解

    System 类位于 java.lang 包,代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部.由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是 ...

  7. Java Entry类详解

    Entry类概述 Java的entry是一个静态内部类,实现Map.Entry< K ,V> 这个接口,通过entry类可以构成一个单向链表. 一.java中Map及Map.Entry ( ...

  8. Java final类详解

    1.什么是final类? Java中有一些类,如String,Math等,就是final类的典型例子. 虽然在Java编程中并不经常使用final类和final方法,但它们有着与众不同的特点,即fin ...

  9. java Random类详解

    2019独角兽企业重金招聘Python工程师标准>>> Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起 ...

最新文章

  1. 爬虫入门的基本原理,如果你连这些都不知道那你可以放弃爬虫了
  2. 【Python】简单的最优算法函数创建
  3. 【CV秋季划】人脸识别经典难题介绍,抗遮挡,跨年龄,异质源,少样本等
  4. Self-reflection for career
  5. python数据结构递归树_python数据结构(对称二叉树递归和迭代)
  6. Tomcat开发技术之与HTTP服务器的集成
  7. Python学习02 列表 List
  8. websocket使用指南
  9. uniapp 微信内置浏览器h5打开app
  10. EMC RS485接口EMC电路设计方案
  11. windows下视频捕捉VFW和DirectShow
  12. nginx+rtmp(或http-flv)+ffmpeg搭建流媒体视频直播服务器
  13. 【Linux】【操作】Linux操作集锦系列之一——定时任务
  14. ANSI标准数据类型
  15. PHPWord利用模板替换字符串生成精确的word文档
  16. it计算机职业评估,最新澳洲技术移民评估ACS 职业评估(计算机IT类)
  17. 【Linux 中国】Simula 诞生之前的面向对象程序设计
  18. 网络空间安全-密码学
  19. NNDL 实验三 线性模型
  20. 探寻Cat.1和NB-IoT的发展方向

热门文章

  1. win10文件显示后缀名_Win10一开机,内存占用竟高达60%?你可以尝试这样做
  2. Dreamwear如何创建javascript_JavaScript 太糟糕,JVM 有妙招!
  3. 简单html5作品,最新HTML5简单入门系列精选
  4. MyBatis-Plus——增删查改
  5. python getchar,Linux C编程学习:getchar()和getch()
  6. se是什么职位_女皇大学PSE&SE 独家解析!
  7. 线程被中断跟被阻塞有什么区别_宠物加盟店跟自营店有什么区别
  8. java类加载及new对象的过程
  9. java 新建 api 案列_Java利用webservice创建接口案例源码
  10. Redis 基础——五大类型与数据结构