Java Object類中的常用API介紹
Java常用API介紹
API概念
什么是API?
API(Application Programming interface) 應(yīng)用程序編程接口。
簡單來說:就是Java幫我們已經(jīng)寫好的一些方法**,我們直接拿過來用就可以了。**
Object類
Object類的作用:
- Object類的方法是一切子類對象都可以直接使用的,所以我們要學(xué)習(xí)Object類的方法。
- 一個類要么默認(rèn)繼承了Object類,要么間接繼承了Object類,Object類是Java中的祖宗類。
toString方法
方法名 | 說明 |
---|---|
toString() | 默認(rèn)是返回當(dāng)前對象在堆內(nèi)存中的地址信息: 類的全限名@內(nèi)存地址 |
基本使用:
例如有一個Student類
public class Test { public static void main(String[] args) { Student stu = new Student(); // 方式一: 將返回的地址在變量中接收 String str = stu.toString(); System.out.println(str); // 方式二: 輸出時, 直接調(diào)用toString方法 System.out.println(stu.toString()); // 方式三: 直接輸出對象變量, 默認(rèn)可以省略toString方法 System.out.println(stu); } }
問題引出:
在開發(fā)中直接輸出對象變量,默認(rèn)輸出對象的地址其實(shí)是毫無意義的。
事實(shí)上, 開發(fā)中更多的時候是希望看到對象的內(nèi)容數(shù)據(jù)而不是對象的地址信息。
toString存在的意義:
父類toString()方法存在的意義是為了被子類重寫,以便返回對象的內(nèi)容信息,而不是地址信息!!
演示代碼:
例如我們有如下一個Student類
package com.chenyq.d12_api_object; /** 默認(rèn)繼承自O(shè)bject */ public class Student { private String name; private int age; private double height; public Student() { } public Student(String name, int age, double height) { this.name = name; this.age = age; this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } }
我們可以在該Student類中重寫toString方法
package com.chenyq.d12_api_object; /** 默認(rèn)繼承自O(shè)bject */ public class Student { private String name; private int age; private double height; public Student() { } public Student(String name, int age, double height) { this.name = name; this.age = age; this.height = height; } // 重新toString方法 @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", height=" + height + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } }
此時再調(diào)用Student對象變量的toString方法, 會調(diào)用我們自己重寫的toString, 返回對象的內(nèi)容
public class Test { public static void main(String[] args) { Student stu = new Student("chenyq", 18, 1.88); System.out.println(stu); // Student{name='chenyq, age=18, height=1.88} } }
小結(jié):
Object的toString方法的作用是什么?
- 讓子類重寫toString方法,以便返回子類對象中的內(nèi)容。
equals方法
方法名 | 說明 |
---|---|
equals(Object o) | 默認(rèn)是比較當(dāng)前對象與另一個對象的地址是否相同,相同返回true,不同返回false |
基本使用:
我們還是繼續(xù)使用上面的Student類演示
public class Test2 { public static void main(String[] args) { Student stu1 = new Student("chenyq", 18, 1.88); Student stu2 = new Student("chenyq", 18, 1.88); // 這里equals調(diào)用的是Object中的 System.out.println(stu1.equals(stu2)); // false } }
問題思考:
直接比較兩個對象的地址是否相同完全可以用 “==”, 那么為什么要使用equals呢?
equals存在的意義
在開發(fā)中, 其實(shí)我們并不會使用equals方法比較兩個對象的地址, 通常是用來比較兩個對象內(nèi)容是否相同
而父類equals方法存在的意義就是為了被子類重寫,以便子類自己來定制比較規(guī)則。
演示代碼:
重寫equals方法, 自己定制比較規(guī)則: 例如比較兩個對象內(nèi)容是否相同
package com.chenyq.d12_api_object; import java.util.Objects; /** 默認(rèn)繼承自O(shè)bject */ public class Student { private String name; private int age; private double height; public Student() { } public Student(String name, int age, double height) { this.name = name; this.age = age; this.height = height; } /** 重寫equals方法 s1 -> this s2 -> o */ @Override public boolean equals(Object o) { // 1. 判斷this和o是否是同一個對象 if (this == o) return true; // 2. 判斷o是否為null以及this和o類型是否相同 if (o == null || getClass() != o.getClass()) return false; // 3. 將o強(qiáng)轉(zhuǎn)為Student類型 Student student = (Student) o; // 4. 返回age, height, name的比較結(jié)果 return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name); public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } }
此時再調(diào)用Student對象的equals方法, 就是調(diào)用的自己重寫的equals
public class Test2 { public static void main(String[] args) { Student stu1 = new Student("chenyq", 18, 1.88); Student stu2 = new Student("chenyq", 18, 1.88); // 這里equals調(diào)用的是自己重寫的, 比較對象內(nèi)容是否相同 System.out.println(stu1.equals(stu2)); // true } }
到此這篇關(guān)于Java Object類中的常用API的文章就介紹到這了,更多相關(guān)Java Object類常用API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA 2018 最新激活碼(截止到2018年1月30日)
這篇文章主要介紹了IntelliJ IDEA 2018 最新激活碼(截止到2018年1月30日)的相關(guān)資料,需要的朋友可以參考下2018-01-01java中用float時,數(shù)字后面加f,這樣是為什么你知道嗎
這篇文章主要介紹了java用float時,數(shù)字后面加f,這樣是為什么你知道嗎?具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Java線程池運(yùn)行狀態(tài)監(jiān)控實(shí)現(xiàn)解析
這篇文章主要介紹了Java線程池運(yùn)行狀態(tài)監(jiān)控實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10使用Java實(shí)現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02Java嵌入式開發(fā)的優(yōu)勢及有點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家整理了關(guān)于Java嵌入式開發(fā)的優(yōu)勢及相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2022-11-11Java實(shí)現(xiàn)單機(jī)版五子棋游戲的示例代碼
五子棋是世界智力運(yùn)動會競技項(xiàng)目之一,是一種兩人對弈的純策略型棋類游戲,是世界智力運(yùn)動會競技項(xiàng)目之一。本文將用java語言實(shí)現(xiàn)單機(jī)版五子棋游戲,感興趣的可以了解一下2022-09-09