Java Object类详解 - C语言中文网

文章推薦指數: 80 %
投票人數:10人

Object 是Java 类库中的一个特殊类,也是所有类的父类。

也就是说,Java 允许把任何类型的对象赋给Object 类型的变量。

当一个类被定义后,如果没有指定继承的父类, ... 首页 教程 VIP会员 一对一答疑 辅导班 公众号 首页 C语言教程 C++教程 Python教程 Java教程 Linux入门 更多>> 目录 Java教程 1 Java入门基础及环境搭建 2 Java程序设计基础 3 Java流程控制语句 4 Java字符串处理 5 Java数字和日期处理 6Java内置包装类6.1Java包装类、装箱和拆箱6.2JavaObject类详解6.3JavaInteger类6.4JavaFloat类6.5JavaDouble类6.6JavaNumber类6.7JavaCharacter类6.8JavaBoolean类6.9JavaByte类6.10JavaSystem类 7 Java数组处理 8 Java类和对象 9 Java继承和多态 10 Java异常处理 11 Java集合、泛型和枚举 12 Java反射机制 13 Java输入/输出流 14 Java注解 首页>Java教程>Java内置包装类 JavaObject类详解   Object是Java类库中的一个特殊类,也是所有类的父类。

也就是说,Java允许把任何类型的对象赋给Object类型的变量。

当一个类被定义后,如果没有指定继承的父类,那么默认父类就是Object类。

因此,以下两个类表示的含义是一样的。

publicclassMyClass{…} 等价于 publicclassMyClassextendsObject{…} 由于Java所有的类都是Object类的子类,所以任何Java对象都可以调用Object类的方法。

常见的方法如表1所示。

表1Object类的常用方法 方法 说明 Objectclone() 创建与该对象的类相同的新对象 booleanequals(Object) 比较两对象是否相等 voidfinalize() 当垃圾回收器确定不存在对该对象的更多引用时,对象垃圾回收器调用该方法 ClassgetClass() 返回一个对象运行时的实例类 inthashCode() 返回该对象的散列码值 voidnotify() 激活等待在该对象的监视器上的一个线程 voidnotifyAll() 激活等待在该对象的监视器上的全部线程 StringtoString() 返回该对象的字符串表示 voidwait() 在其他线程调用此对象的notify() 方法或notifyAll() 方法前,导致当前线程等待 其中,toString()、equals()方法和getClass()方法在Java程序中比较常用。

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

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

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

先看以下代码: //定义Demo类,实际上继承Object类 classDemo{ } publicclassObjectDemo01{ publicstaticvoidmain(String[]args){ Demod=newDemo();//实例化Demo对象 System.out.println("不加toString()输出:"+d); System.out.println("加上toString()输出:"+d.toString()); } } 输出结果为: 不加toString()输出:Demo@15db9742 加上toString()输出:Demo@15db9742 以上的程序是随机输出了一些地址信息,从程序的运行结果可以清楚的发现,加和不加toString()的最终输出结果是一样的,也就是说对象输出时一定会调用Object类中的toString()方法打印内容。

所以利用此特性就可以通过toString()取得一些对象的信息,如下面代码。

publicclassPerson{ privateStringname; privateintage; publicPerson(Stringname,intage){ this.name=name; this.age=age; } publicStringtoString(){ return"姓名:"+this.name+":年龄"+this.age; } publicstaticvoidmain(String[]args){ Personper=newPerson("C语言中文网",30);//实例化Person对象 System.out.println("对象信息:"+per);//打印对象调用toString()方法 } } 输出结果为: 对象信息:姓名:C语言中文网:年龄30 程序中的Person类中重写了Object类中的toString()方法,这样直接输出对象时调用的是被子类重写过的toString()方法。

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

其使用格式如下: booleanresult=obj.equals(Objecto); 其中,obj表示要进行比较的一个对象,o表示另一个对象。

例1 编写一个Java程序,实现用户登录的验证功能。

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

在这里使用equals()方法将用户输入的字符串与保存admin的字符串对象进行比较,具体的代码如下: importjava.util.Scanner; publicclassTest01{ //验证用户名和密码 publicstaticbooleanvalidateLogin(Stringuname,Stringupwd){ booleancon=false; if(uname.equals("admin")&&upwd.equals("admin")){//比较两个String对象 con=true; }else{ con=false; } returncon; } publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); System.out.println("------欢迎使用大数据管理平台------"); System.out.println("用户名:"); Stringusername=input.next();//获取用户输入的用户名 System.out.println("密码:"); Stringpwd=input.next();//获取用户输入的密码 booleancon=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时,表示该用户为合法用户,提示登录成功信息,否则提示用户名或密码有误的错误信息。

该程序的运行结果下所示: ------欢迎使用大数据管理平台------ 用户名: adinm 密码: admin 用户名或密码有误! ------欢迎使用大数据管理平台------ 用户名: admin 密码: admin 登录成功! getClass()方法 getClass()方法返回对象所属的类,是一个Class对象。

通过Class对象可以获取该类的各种信息,包括类名、父类以及它所实现接口的名字等。

例2 编写一个实例,演示如何对String类型调用getClass()方法,然后输出其父类及实现的接口信息。

具体实现代码如下: publicclassTest02{ publicstaticvoidprintClassInfo(Objectobj){ //获取类名 System.out.println("类名:"+obj.getClass().getName()); //获取父类名 System.out.println("父类:"+obj.getClass().getSuperclass().getName()); System.out.println("实现的接口有:"); //获取实现的接口并输出 for(inti=0;i



請為這篇文章評分?