概述

如果要问Java为什么是用起来非常舒服的语言,那很大一部分的功劳就是JavaAPI的。API定义了许多封装好的类和方法供我们使用,来处理特定的问题,所以学习常用的API是非常重要的。

同时,面向对象的核心思想就是用合适的对象去做合适的事情。什么是合适的对象呢?一种是自己根据需要创建的类而生成的对象,另一种是sun官方描述的好多常用的类,我们使用这些类创建的对象,这也就是API的概念。

sun定义的那么多类的终极父类是Objec类。Object描述的是所有类的通用属性与方法。

所以,API的介绍就是从Object类开始的。

Object对象

1. toString方法:返回的是对象的描述信息

当我们直接输出一个对象的时候,这时候就会调用被输出对象的toString方法。代码如下:

class Person{
public String name;
public String sex;
public int age; public Person(String name,String sex,int age){
this.age = age;
this.name = name;
this.sex = sex;
}
}
public class Demo1 {
public static void main(String[] args){
System.out.println(p);
}
}

代码执行后输出的结果是:java.lang.Object@de6ced

可以看出,直接调用toString方法输出的是:类名@哈希码值的十六进制形式。

对于上述代码,如果给出的需求是这样的:调用输出方法的时候,输出这个对象(Person)姓名、年龄、性别。这个时候又应该如何实现呢?

根据我们之前学的继承,假如父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。

所以为了达到这个目的,需要对Person类的toString方法重写。

//重写toString方法
public String toString(){
return "姓名:" + name + " 性别:" + sex + " 年龄" + age;
}

这个时候,输出的内容就满足我们的需求了。

这里一个重要的编程习惯就是:我们在进行开发时,要对自定义的类重写toString方法,对对象进行详细的描述说明。

2. equals方法:返回的是比较的结果

利用equals方法来比较两个对象,如果相等返回true,否则false,比较的是对象的内存地址值。

public class Demo1 {
public static void main(String[] args){
Person p = new Person("王浩","男",33);
Person p1 = new Person("王浩","男",33);
System.out.println(p.equals(p1));
}
}

还是使用Person这个类,创建的两个对象。根据我们前面学习的知识,比较之后输出的结果肯定是false。因为创建的这两个对象的内存地址不同,所以会产生这样的输出结果。

如果我们将代码这样改写:

public class Demo1 {
public static void main(String[] args){
Person p = new Person("王浩","男",33);
Person p1 = p;
System.out.println(p.equals(p1));
}
}

这时候,输出的结果就是true了。因为此时p和p1指向的是同一块内存地址。

那么,接下来我们有一个需求:将equals比较的条件换成姓名、性别、年龄,如果以上三项相同,则表示相同。根据toString方法的启示,这里当然也要对equals方法进行重写。

class Person{
public String name;
public String sex;
public int age; public Person(String name,String sex,int age){
this.age = age;
this.name = name;
this.sex = sex;
}
public boolean equals(Object obj){
Person p = null;
//判断obj对象是否属于Person类
if(obj instanceof Person){
//obj对象如果是Person的类,则对obj进行类型转换
p = (Person)obj;
}
if(this.name.equals(p.name)&&this.sex.equals(p.sex)&&this.age==p.age){
return true;
}
return false;
}
}
public class Demo1 {
public static void main(String[] args){
Person p = new Person("王浩","男",33);
Person p1 = new Person("王浩","男",33);
System.out.println(p.equals(p1));
}
}

此时输出的结果就是true了。

注意:代码中的instanceof的作用是判断某个对象是否属于某个类,这个关键字的应用还是相当广范的。

最后,我们要对自定义的类重写equals(),使得比较两个对象的时候比较对象的属性是否相等,而不是内存地址

3. hashCode方法:返回该对象的哈希码值

这个方法采用系统底层的哈希算法实现,同一个对象的呷西码是唯一的,同时,java规定如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。

所以,一旦对equals方法重写,那么一般来讲也要对hashCode方法重写。对于hashCode方法不做过多赘述。

Java中常用的API(一)——Object的更多相关文章

  1. Java中常用的API(四)——其他

    前面说三篇文章分别介绍了Object.String.字符缓冲类的API,接下来我们简要介绍一下其他常用的API. 1.System System类用于获取各种系统信息,最为常用的是: System.o ...

  2. Java中常用的API(二)——String

    在第一节中我们介绍了Object类的方法以及操作,那么这一节,我们将介绍一个新的类:String. String类是我们经常使用的类,应用十分广泛.同时,String类中封装了一系列的方法,非常常用, ...

  3. Java中常用的API(三)——缓冲区字符串

    前两节中分别介绍了Object和String,这一节主要介绍StringBuffer和StringBuilder. StringBuffer 由于String是不可变的,所以导致String对象泛滥, ...

  4. Java高级特性 第2节 java中常用的实用类(1)

    一.Java API Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用:此外也特指API的说明文档,也称帮助文档. Java中常用的包: jav ...

  5. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  6. java中常用的工具类(三)

    继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类       ...

  7. java中常用的工具类(二)

    下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil           Java   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  8. java中常用的工具类(一)

    我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...

  9. java中常用的字符串的截取方法

    java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...

随机推荐

  1. POJ 3252:Round Numbers

    POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...

  2. 洛谷 P1934 封印

    题目传送门 解题思路: f[i]表示打到第i层的最小值 AC代码: #include<iostream> #include<cstdio> using namespace st ...

  3. Vulkan 之 Synchronization

    1.2之前定的版本采用 vkSemaphore和vkFence来进行同步, VkSemaphore allowed applications to synchronize operations acr ...

  4. 079-PHP数组排序,两次循环法封装成函数

    <?php function mysort($arr){ //将排序的代码封装为函数 echo '<br />数组排序之前的信息:<br />'; print_r($ar ...

  5. Mysql 终端中文显示乱码

    查看编码 show variables like 'char%'; 结果 +--------------------------+--------+ | Variable_name | Value | ...

  6. HZNU-ACM寒假集训Day12小结 数论入门

    符号说明 a|b      a整除b (a,b)    a与b的最大公因数 [a,b]     a与b的最小公倍数 pα||a    pα|a但pα+1∤a a≡b(mod m) a与b对模m同余 a ...

  7. Spring Cloud Alibaba:Sentinel实现熔断与限流

    一.什么是Sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩效应”,为微服务系统提供了稳 ...

  8. 吴裕雄--天生自然C++语言学习笔记:C++ 函数

    函数是一组一起执行一个任务的语句.每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您 ...

  9. 【Python】【Django】登录用户-链接Mysql

  10. MBE风格图标

    图标的定义 图标是一种通过相似性或类比行来代表对象的符号. 图标的重要性 1.图形以其无与伦比的识别性带来信息传达效率的提升. 2.图形以其百变多样的趣味性带来视觉体验的享受提成用户体验. 3.图形以 ...