博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java常用类三:Object
阅读量:3978 次
发布时间:2019-05-24

本文共 2705 字,大约阅读时间需要 9 分钟。

java常用类三:Object

1.Object类概述

  java.lang.Object类是Java语言中的根类,即所有类的父类。一个类中只要没有明显的继承一个类,则肯定是Object类的子类。其中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。那么既然继承了Object类,Object类有哪些作用呢?实际上Object类中提供了很多的方法,如下:

方法名称 类型 描述
public Object() 构造 构造方法
public boolean equals(Object obj) 普通 对象比较
public int hashCode() 普通 取得Hash码
public String toString 普通 对象打印时调用

2.Object类常用方法

这里介绍两个主要方法:toString()和equals()方法。

方法一:public String toString方法

  在讲解toString()方法之前,先看以下这段代码:

class Demo{
//定义Demo类,实际上就是继承了Object类}// 另外创建一个java.class文件:ObjectDemo01public class ObjectDemo01{
public static void main(String args[]){
Demo d = new Demo(); //实例化Demo对象 System.out.println("不加toString()输出:"+d); // 不加toString()输出:Object.Demo@34a245ab System.out.println("加上toString()输出:"+d.toString());//加上toString()输出:Object.Demo@34a245ab }}

从上面的程序运行结果可以看出,加与不加toString()最终的输出结果是一样的,也就是说对象输出的结果是一样的,也就是说对象输出时一定会调用Object类中的toString()方法打印内容。所以利用此特性就可以通过toString()取得一些对象的信息,如下面代码:

class Person{
private int age; public Person(String name, int age){
this.name = name; this.age = age; } public String toString(){
//此处重写toString方法 return "姓名:" + this.name + "; 年龄:" + this.age; }}public class ObjectDemo02{
public static void main(String args[]){
Person per = new Person("张三",30); System.out.println("对象信息:"+per); }}

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

方法二:对象的比较操作:public boolean equals(Object obj)

  Object类中的equals()方法实际上也是可以使用的,默认使用的是按地址进行比较,并不能对内容进行比较。

class Person{
private String name; //定义name属性 private int age; //定义age属性 //创建构造方法来初始化该对象,给对象的成员变量赋初值 public Person(String name, int age){
this.name = name; this.age = age; } public boolean equals(Object obj){
if(this==obj){
//地址相等 return true; //肯定是同一个对象 } if(!(obj instanceof Person)){
//不是Person对象 return false; } Person per = (Person) obj; //向下转型:通过父类实例化子类 if(per.name.equals(this.name)&&per.age==this.age){
return true; //依次比较内容 }else{
return false; } } public String toString(){
return "姓名:" + this.name + ":年龄:" + this.age; }}class OjectDemo03{
public static void main(String args[]){
Person per1 = new Person("张三",30); //实例化Person Person per2 = new Person("张三", 30); //实例化Person System.out.println(per1.equals(per2)?"是同一个人!":"不是同一个人!"); System.out.println(per1.equals("hello")?"是同一个人!":"不是同一个人!"); }}

在Person类中重写了equals()方法,首先判断传递进来的对象与当前对象的地址是否相等,如果相等,则肯定是同一个对象,因为在equals()方法处传递参数是Object类型,所以任何对象都可以接收,这样在对象进行向下转型前就必须进行判断,判断传进来的对象是否是Person的实例,如果不是,则直接返回false;如果是,则将各个属性依次进行判断。

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

如果感觉看的有些生涩,可以把代码运行一下看看,代码都是调试好了的,结合代码会更容易懂的。

转载地址:http://qagki.baihongyu.com/

你可能感兴趣的文章
使用secure CRT的SFTP在LINUX与WINDOWS下交换文件
查看>>
如何使用PHP开发高效的WEB系统
查看>>
linux下查看系统配置的命令
查看>>
linux 链接的使用 创建和删除符号连接(软、硬链接)
查看>>
linux修改系统时间详解
查看>>
linux下设置IP为什么每次重启后会自动变?
查看>>
php导出数据到excel,防止身份证等数字字符格式变成科学计数的方法
查看>>
shell操作mysql
查看>>
netcat
查看>>
Linux下如何查看CPU信息, 包括位数和多核信息
查看>>
Linux命令行访问网页
查看>>
VMware网络连接 桥接、NAt、host-only模式
查看>>
VMware网络设置详解 打造超级虚拟网络
查看>>
关于MYSQL Error:ERROR 1005 (HY000) at line 3: Can't create table '.\xx.frm'错误
查看>>
linux命令行获取机器的物理地址并打印及Linux获取系统信息的常用命令
查看>>
解决在CentOS 5.5 yum源下载慢的办法即修改yum源
查看>>
PHP中exec、system等函数调用linux命令问题
查看>>
httpd.conf文件配置详解
查看>>
php shell_exec()与反撇号等价输出结果
查看>>
chmod 命令,主要是+s的选项
查看>>