最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Object類詳細解讀

 更新時間:2023年11月29日 09:55:36   作者:時代&信念  
這篇文章主要介紹了Java中的Object類詳細解讀,java.lang.Object是類層次結(jié)構(gòu)的根類,即所有其它類的父類,每個類都使用 Object 作為超類,需要的朋友可以參考下

什么是Object類?

類 java.lang.Object是類層次結(jié)構(gòu)的根類,即所有其它類的父類。

每個類都使用 Object 作為超類。(父類和超類是一個意思,不同的叫法) 也就是當初的Java語言設計時,就將Object作為所有類的父類, 是萬類之父。

①Object類型的變量與除Object以外的任意引用數(shù)據(jù)類型的對象都存在多態(tài)引用。

method(Object obj){…} //可以接收任何類作為其參數(shù)
Person o = new Person();  
method(o);

②所有對象(包括數(shù)組)都實現(xiàn)這個類的方法。

③如果一個類沒有特別指定父類,那么默認則繼承自Object類。

public class Person {
	...
}
//等價于:
public class Person extends Object {
	...
}

Object類的相關方法

  1. equals()
  2. = =:

基本類型比較值:只要兩個變量的值相等,即為true。

int a=5; 
if(a==6){…}

引用類型比較引用(是否指向同一個對象):只有指向同一個對象時,==才返回true。

Person p1=new Person();  	    
Person p2=new Person();
if (p1==p2){…}

用“==”進行比較時,符號兩邊的數(shù)據(jù)類型必須兼容(可自動轉(zhuǎn)換的基本數(shù)據(jù)類型除外),否則編譯出錯

equals()

所有類都繼承了Object,也就獲得了equals()方法。還可以重寫。

  • 只能比較引用類型,Object類源碼中equals()的作用與“==”相同:比較是否指向同一個對象。
  • 特例:當用equals()方法進行比較時,對類File、String、Date及包裝類(Wrapper Class)來說,是比較類型及內(nèi)容而不考慮引用的是否是同一個對象;
  • 原因:在這些類中重寫了Object類的equals()方法。
  • 當自定義使用equals()時,可以重寫。用于比較兩個對象的“內(nèi)容”是否都相等。

經(jīng)典面試題:==和equals的區(qū)別?

  • == 既可以比較基本類型也可以比較引用類型。對于基本類型就是比較值,對于引用類型就是比較內(nèi)存地址
  • equals的話,它是屬于java.lang.Object類里面的方法,如果該方法沒有被重寫過默認也是==;我們可以看到String等類的equals方法是被重寫過的,而且String類在日常開發(fā)中用的比較多,久而久之,形成了equals是比較值的錯誤觀點。
  • 具體要看自定義類里有沒有重寫Object的equals方法來判斷。
  • 通常情況下,重寫equals方法,會比較類中的相應屬性是否都相等。

toString()

方法聲明:public String toString()

① 默認情況下,toString()返回的是“對象的運行時類型 @ 對象的hashCode值的十六進制形式"

② 在進行String與其它類型數(shù)據(jù)的連接操作時,自動調(diào)用toString()方法

Date now=new Date();
System.out.println(“now=”+now);  //相當于
System.out.println(“now=”+now.toString()); 

③ 如果我們直接System.out.println(對象),默認會自動調(diào)用這個對象的toString()

因為Java的引用數(shù)據(jù)類型的變量中存儲的實際上是對象的內(nèi)存地址,但是Java對程序員隱藏內(nèi)存地址信息,所以不能直接將內(nèi)存地址顯示出來,所以當你打印對象時,JVM幫你調(diào)用了對象的toString()。

④ 可以根據(jù)需要在用戶自定義類型中重寫toString()方法 如String 類重寫了toString()方法,返回字符串的值。

s1="hello";
System.out.println(s1);//相當于System.out.println(s1.toString());

例如自定義的Person類:

public class Person {  
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

finalize()

  • 當對象被回收時,系統(tǒng)自動調(diào)用該對象的 finalize() 方法。(不是垃圾回收器調(diào)用的,是本類對象調(diào)用的)
    • 永遠不要主動調(diào)用某個對象的finalize方法,應該交給垃圾回收機制調(diào)用。
  • 什么時候被回收:當某個對象沒有任何引用時,JVM就認為這個對象是垃圾對象,就會在之后不確定的時間使用垃圾回收機制來銷毀該對象,在銷毀該對象前,會先調(diào)用 finalize()方法。
  • 子類可以重寫該方法,目的是在對象被清理之前執(zhí)行必要的清理操作。比如,在方法內(nèi)斷開相關連接資源。
    • 如果重寫該方法,讓一個新的引用變量重新引用該對象,則會重新激活對象。
  • 在JDK 9中此方法已經(jīng)被標記為過時的。
public class FinalizeTest {
	public static void main(String[] args) {
		Person p = new Person("Peter", 12);
		System.out.println(p);
		p = null;//此時對象實體就是垃圾對象,等待被回收。但時間不確定。
		System.gc();//強制性釋放空間
	}
}

class Person{
	private String name;
	private int age;

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	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;
	}
	//子類重寫此方法,可在釋放對象前進行某些操作
	@Override
	protected void finalize() throws Throwable {
		System.out.println("對象被釋放--->" + this);
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}

getClass()

public final Class<?> getClass():獲取對象的運行時類型

因為Java有多態(tài)現(xiàn)象,所以一個引用數(shù)據(jù)類型的變量的編譯時類型與運行時類型可能不一致,因此如果需要查看這個變量實際指向的對象的類型,需要用getClass()方法

public static void main(String[] args) {
	Object obj = new Person();
	System.out.println(obj.getClass());//運行時類型
}

結(jié)果:

class com.atguigu.java.Person

到此這篇關于Java中的Object類詳細解讀的文章就介紹到這了,更多相關Java中的Object類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java項目中classpath指向哪里

    java項目中classpath指向哪里

    這篇文章介紹了java項目中classpath指向哪里及工作原理,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • Java實現(xiàn)調(diào)用對方http接口得到返回數(shù)據(jù)

    Java實現(xiàn)調(diào)用對方http接口得到返回數(shù)據(jù)

    這篇文章主要介紹了Java實現(xiàn)調(diào)用對方http接口得到返回數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Mybatis-plus插入后返回元素id的問題

    Mybatis-plus插入后返回元素id的問題

    這篇文章主要介紹了Mybatis-plus插入后返回元素id的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IntelliJ IDEA 中使用jRebel進行 Java 熱部署教程圖解

    IntelliJ IDEA 中使用jRebel進行 Java 熱部署教程圖解

    Rebel是一款JAVA虛擬機插件,它使得JAVA程序員能在不進行重部署的情況下,即時看到代碼的改變對一個應用程序帶來的影響。本文通過圖文并茂的形式給大家介紹了IntelliJ IDEA 中使用jRebel進行 Java 熱部署教程圖解,需要的朋友參考下吧
    2018-04-04
  • Java實現(xiàn)一鍵將Word文檔轉(zhuǎn)為PDF

    Java實現(xiàn)一鍵將Word文檔轉(zhuǎn)為PDF

    在開發(fā)中,經(jīng)常會碰到需要把 Word 文檔轉(zhuǎn)換成 PDF 格式的需求,Java 有不少好用的庫能實現(xiàn)這個功能,本文為大家介紹了兩個常用的方法,需要的可以了解下
    2025-02-02
  • SpringBoot項目中訪問HTML頁面的實現(xiàn)示例

    SpringBoot項目中訪問HTML頁面的實現(xiàn)示例

    本文主要介紹了SpringBoot項目中訪問HTML頁面的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • java中File轉(zhuǎn)為MultipartFile的四種實現(xiàn)方式

    java中File轉(zhuǎn)為MultipartFile的四種實現(xiàn)方式

    這篇文章主要介紹了java中File轉(zhuǎn)為MultipartFile的四種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • java輸入時如何通過回車(enter)來結(jié)束輸入

    java輸入時如何通過回車(enter)來結(jié)束輸入

    這篇文章主要介紹了java輸入時如何通過回車(enter)來結(jié)束輸入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • springboot 接口版本區(qū)分方式

    springboot 接口版本區(qū)分方式

    這篇文章主要介紹了springboot 接口版本區(qū)分方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • kafka自定義分區(qū)器使用詳解

    kafka自定義分區(qū)器使用詳解

    本文介紹了如何根據(jù)企業(yè)需求自定義Kafka分區(qū)器,只需實現(xiàn)Partitioner接口并重寫partition()方法,示例中,包含"cuihaida"的數(shù)據(jù)發(fā)送到0號分區(qū),否則發(fā)送到1號分區(qū),在生產(chǎn)者配置中添加分區(qū)器參數(shù)即可使用
    2025-11-11

最新評論

固阳县| 宁夏| 巫山县| 那坡县| 娄底市| 望江县| 牡丹江市| 保康县| 杂多县| 恭城| 秦皇岛市| 泉州市| 潼南县| 乐亭县| 台东市| 蒙自县| 三河市| 新津县| 馆陶县| 寿宁县| 即墨市| 湟源县| 云浮市| 搜索| 美姑县| 涞源县| 商丘市| 秦安县| 万全县| 辉县市| 苏尼特左旗| 乐都县| 林芝县| 鞍山市| 肃宁县| 吴忠市| 家居| 鲜城| 开江县| 陆河县| 六安市|