Java Object类详解

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 判断类型是否是一个整型数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 成功率_备考2022年MBA: 如何提高清华、北大MBA提前面试成功率|博雅汇MBA

北大清华在国内可是著名高校&#xff0c;也是不少学子梦寐以求的院校&#xff0c;当然这也就早就竞争激烈的现状&#xff0c;无论是高考还是攻读MBA。那么在剧烈竞争压力下&#xff0c;我们怎么能提高被名校录取的几率呢&#xff0c;我今天从材料关和面试关为大家做一个详细的解…

CRITIC法之python

目录 1.简介 2.原理解析 2.1 指标正向化及标准化 2.2 计算信息承载量 2.3 计算权重和评分 3.实例分析 3.1 读取数据 3.2 指标正向化及标准化 3.3 计算对比度 3.4 矛盾性 3.5 计算信息载量 3.6 计算权重 3.7 计算得分 完整代码 1.简介 CRITIC是Diakoulaki&#…

Java Integer类详解

Integer 类在对象中包装了一个基本类型 int 的值。Integer 类对象包含一个 int 类型的字段。此外&#xff0c;该类提供了多个方法&#xff0c;能在 int 类型和 String 类型之间互相转换&#xff0c;还提供了处理 int 类型时非常有用的其他一些常量和方法。 Integer 类的构造方…

层次分析法之matlab

目录 1.简介 2.算法解析 3.实例分析 3.1 构造矩阵 3.2 查看行数和列数 3.3 求特征向量 3.4 找到最大特征值和最大特征向量 3.5 计算权重 3.6 一致性检验 3.7 计算评分 完整代码 1.简介 一种主观赋权的方法&#xff0c;在数据集比较小&#xff0c;实在不好比较的时候…

css布局方式_收藏!40 个 CSS 布局技巧

简介&#xff1a;CSS是Web开发中不可或缺的一部分&#xff0c;随着Web技术的不断革新&#xff0c;CSS也变得更加强大。CSS的众多属性你知道了多少&#xff1f;具体开发中该使用什么属性才最适合恰当&#xff1f;如今的一些CSS属性可以让我们节约更多的时间。比如在Web布局中&am…

Java Float类详解

Float 类的构造方法 Float 类中的构造方法有以下 3 个。 Float(double value)&#xff1a;构造一个新分配的 Float 对象&#xff0c;它表示转换为 float 类型的参数。Float(float value)&#xff1a;构造一个新分配的 Float 对象&#xff0c;它表示基本的 float 参数。Float(S…

层次分析法之python

目录 1.简介 2.算法解析 3.实例分析 3.1 构造矩阵 3.2 查看行数和列数 3.3 求特征向量 3.4 找到最大特征值和最大特征向量 3.5 计算权重 3.6 一致性检验 3.7 计算评分 完整代码 1.简介 一种主观赋权的方法&#xff0c;在数据集比较小&#xff0c;实在不好比较的时候…

c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...

仓位控制不是精确的科学。它是保证资金安全、有效规避风险、长期稳定盈利的有效手段&#xff0c;有仓位控制意识和规则是股市交易者在心理和技术上成熟的表现之一&#xff0c;仓位控制是建立在市场和个股短期具有不可预测的特性、尊重市场、保证资金安全的基础上的。对于看好的…

Java Double类详解

Double 类的构造方法 Double 类中的构造方法有如下两个。 Double(double value)&#xff1a;构造一个新分配的 Double 对象&#xff0c;它表示转换为 double 类型的参数。Double(String s)&#xff1a;构造一个新分配的 Double 对象&#xff0c;它表示 String 参数所指示的 do…

解决matlab2018a安装后遇到matlab license manager error -8

安装包及教程&#xff1a;传送门 基础教程&#xff1a;传送门 在安装完成后&#xff0c;按照教程安装并将所需文件复制到相应文件中&#xff0c;然后回到桌面打开matlab显示 matlab license manager error -8 的错误 经过查找之后发现两种解决办法&#xff1a; 1&#xff1…

python以什么方式处理文件-Python文件修改和常用方法

为了更好地说明接下来的文件修改操作&#xff0c;我们有必要先来学习下文件操作的常用方法。 一、文件处理中的常用方法 #&#xff01;/usr/bin/env python3#-*- coding:utf-8 -*-#write by congcong #flush() 把文件从内存强制刷新到硬盘 f open("w_flush.txt",mod…

matlab设置工作路径

目录 暂时修改路径 永久修改路径 暂时修改路径 a)直接在页面的路径框里粘贴想进的路径然后 回车 即可 b) 如果只是想暂时将文件夹加入路径&#xff0c;防止函数名字空间污染的话&#xff0c;可采用本方法&#xff1a;用MATLAB运行目标文件夹下任意一个m文件&#xff0c;MATL…

Java System类详解

System 类位于 java.lang 包&#xff0c;代表当前 Java 程序的运行平台&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。 System 类提供了一些类变量和类方…

linux入门_linux入门-常用命令的使用

linux入门-常用命令的使用对于命令行的接触&#xff0c;最开始是window下的cmd&#xff0c;比如查看电脑ip地址、进入某一个文件夹、下载npm模块等等window cmdwindow ipconfig对于习惯了window桌面操作系统的用户来说&#xff0c;其实是比较少接触到命令行的&#xff0c;而在l…

MATLAB遇到问题:错误使用eval,未定义与‘struct‘类型的输入参数相对应的函数‘workspacefunc‘

安装好什么也没干&#xff0c;就开始报错&#xff0c;命令行窗口输入什么都是错误 错误使用eval 未定义与’struct’类型的输入参数相对应的函数’workspacefunc’ 解决方法&#xff1a; 在命令行窗口分别输入下面语句&#xff0c;箭头可不是哦&#xff0c;只有加粗部分是 &…

广西壮族自治区直流充电桩说明书下载_鄂州便携式直流充电桩

安徽能通新能源科技有限公司坐落在一座美丽宜居的城市中。在我国东部地区、长江下游、巢湖之滨&#xff0c;横贯连接京台高速、沪蓉高速、沪陕高速、合徐高速、京合高铁、合宁高铁、合福高铁、合武高铁、京九铁路、宁西铁路并与世界有名的自然和文化遗产—黄山风景区毗邻&#…

Java多维数组

除了一维数组和二维数组外&#xff0c;Java 中还支持更多维的数组&#xff0c;如三维数组、四维数组和五维数组等&#xff0c;它们都属于多维数组。想要提高数组的维数&#xff0c;只要在声明数组时将索引与中括号再加一组即可&#xff0c;所以三维数组的声明为 int score[][][…

三大相关性分析之matlab

目录 1.简介 2.Pearson相关系数 算法详解 程序实现 3.Kendall相关系数 算法详解 程序实现 4.Spearman相关系数 算法详解 程序实现 1.简介 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度。相关性的元素之…

java反编译工具_Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)...

我之前推送过Java代码的编译与反编译&#xff0c;其中简单的介绍了Java编译与反编译相关的知识&#xff0c;最近给GitChat写《深入分析Java语法糖》的时候&#xff0c;又用到了很多反编译相关的知识&#xff0c;遂发现哪篇文章已有些过时。于是&#xff0c;这篇文章就这样呈现在…

Java不规则数组

多维数组被解释为是数组的数组&#xff0c;所以因此会衍生出一种不规则数组。 规则的 43 二维数组有 12 个元素&#xff0c;而不规则数组就不一定了。如下代码静态初始化了一个不规则数组。 int intArray[][] {{1,2}, {11}, {21,22,23}, {31,32,33}};**高维数组&#xff08;…