java之對象和引用(在java中,引用對象變量和對象間有什麼關係)

本文目錄一覽:

Java中的對象和對象引用?

 在Java中有一句比較流行的話,叫做“萬物皆對象”,這是Java語言設計之初的理念之一。要理解什麼是對象,需要跟類一起結合起來理解。下面這段話引自《Java編程思想》中的一段原話:

“按照通俗的說法,每個對象都是某個類(class)的一個實例(instance),這裡,‘類’就是‘類型’的同義詞。”

從這一句話就可以理解到對象的本質,簡而言之,它就是類的實例,比如所有的人統稱為“人類”,這裡的“人類”就是一個類(物種的一種類型),而具體到每個人,比如張三這個人,它就是對象,就是“人類”的實例。

何為對象的引用

我們先看一段話:

“每種編程語言都有自己的數據處理方式。有些時候,程序員必須注意將要處理的數據是什麼類型。你是直接操縱元素,還是用某種基於特殊語法的間接表示(例如C/C++里的指針)來操作對象。所有這些在 Java 里都得到了簡化,一切都被視為對象。因此,我們可採用一種統一的語法。儘管將一切都“看作”對象,但操縱的標識符實際是指向一個對象的“引用”(reference)。”

這段話來自於《Java編程思想》,很顯然,從這段話可以看出對象和對象引用不是一回事,是兩個完全不同的概念。舉個例子,我們通常會用下面這一行代碼來創建一個對象:

Person person = new Person(“張三”);

有人會說,這裡的person是一個對象,是Person類的一個實例。

也有人會說,這裡的person並不是真正的對象,而是指向所創建的對象的引用。

到底哪種說法是對的?我們先不急着糾結哪種說法是對的,再看兩行代碼:

Person person;

person = new Person(“張三”);

這兩行代碼實現的功能和上面的一行代碼是完全一樣的。大家都知道,在Java中new是用來在堆上創建對象用的,如果person是一個對象的話,那麼第二行為何還要通過new來創建對象呢?由此可見,person並不是所創建的對象,是什麼?上面的一段話說的很清楚,“操縱的標識符實際是指向一個對象的引用”,也就是說person是一個引用,是指向一個可以指向Person類的對象的引用。真正創建對象的語句是右邊的new Person(“張三”);

Java中對象和對象引用的區別

對象是堆內存的一塊區域,它負責存儲具體的數據;

對象引用是棧內存的一塊區域,它存的是對象的地址;

Java中我們無法直接操作堆內存里的對象,都是通過棧內存的對象引用來操作的。

java的引用,變量,對象分別什麼意思

Java中數據類型分為兩大類,是基本類型和對象類型。相應的,變量也就有兩種類型:基本類型和引用類型。基本類型自然不用說了,它的值就是一個數字,一個字符或一個布爾值。引用類型,可是引用類型呢?它是一個對象類型的啊,值是什麼呢?它的值是指向內存空間的引用,就是地址,所指向的內存中保存着變量所表示的一個值或一組值。很好理解吧,因為一個對象,比如說一個人,不可能是個數字也不可能是個字符啊,所以要想找它的話只能找它的地址了。

求問在JAVA中:對象,實例,引用,分別是什麼意思

一看就是新手,這些概念不需要可以去深究.一下是我的總結,也可以百度看看PDF的書,但是還是要多敲代碼去理解.

對象:在java中所有的東西都是對象,訪問任何方法都需要對象.對象好比是人,人有很多屬性,比如性別,年齡等,要想知道這些數據,就要通過這個人去訪問.

實例:針對對象來說,實例就是這個人的屬性,每個人都是對象,那麼這個人都是以個一個實例.

引用:是java內部(棧)中,相當於一個地址,運行java程序調用這些對象需要找到地址,通過地址去找這個對象.

原創文章,作者:TJNUU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128477.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TJNUU的頭像TJNUU
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論