1. 程式人生 > >【Java】簡單區分物件引用和物件

【Java】簡單區分物件引用和物件

以下純屬個人的理解,如果有不全或者錯誤的地方,歡迎大家批評指正。

初學 Java 的時候,博主很容易將兩者混淆在一起,這裡就做個簡單的區分。

為了方便說明,博主先建立一個 People 類(類是具有相同屬性和行為的一類實體,物件是類的例項化)

public class People {
      
      private String name;
      private int age;
      public People(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;
      }
      
}

具體的類有了,下面我們來例項化 People 類,程式碼如下:

public class ObjTest {
      public static void main(String[] args) {
            People zhh = new People("趙海豪", 23);
      }
}

看似是一行簡單的程式碼,我們把這一行簡單的程式碼做拆分,大概是以下這個樣子:

People zhh;
zhh = new People("趙海豪", 23);
  • 先來說明下 People zhh 這一小段程式碼的作用:Java虛擬機器為其分配了一塊棧空間。這裡主要是聲明瞭一個引用變數 zhh 
    (也就是我們的物件引用),對應的型別為 People 。打個比方,我起了個綽號叫 zhh ,我們只知道有 zhh 這個綽號存在,但是我們並不知道它具體指的是哪個人。這個綽號就可以理解為是物件引用。
  • 再來說下 new People("趙海豪", 23) 這段程式碼:這裡的話Java虛擬機器為其分配的不再是棧空間了,而是分配的堆空間。在這裡主要是例項化了一個具體的物件。換句話說,就是現在有一個這樣的人,他的名字叫 趙海豪,今年 23 歲。這個具體的人就可以理解為是物件。
  • 最後再來說說這個"=":在Java虛擬機器當中,並不是將我們的引用物件直接提供給變數(物件引用)的,而是將引用物件存在堆中的地址提供給變數,然後變數再通過這個物件的地址去堆內查詢我們的引用物件。其實也就是將我們的物件引用指向我們的物件。換句話也就是說,我給這個名字叫 趙海豪
    ,今年 23 歲的小夥子起了 zhh 這樣的一個綽號,現在 zhh 就是指他這個人。

忽略中間其餘的過程,我簡單給出上述程式碼在堆疊中的引用關係圖:

相關推薦

Java簡單區分物件引用物件

以下純屬個人的理解,如果有不全或者錯誤的地方,歡迎大家批評指正。 初學 Java 的時候,博主很容易將兩者混淆在一起,這裡就做個簡單的區分。 為了方便說明,博主先建立一個 People 類(類是具有相同屬性和行為的一類實體,物件是類的例項化) public class

JavaSpring MVC 擴展SSM框架整合

nco span con odin typealias eal nag key ping 開發web項目通常很多地方需要使用ajax請求來完成相應的功能,比如表單交互或者是復雜的UI設計中數據的傳遞等等。對於返回結果,我們一般使用JSON對象來表示,那麽Spring MVC

java簡單實現數據庫連接池

zed cal lean jdbc stat eof LEDE import thread 一直在想java事務是怎麽實現的,在原聲jdbc的時候級別下,我們可以通過關掉autocommit 然後再手動commit。但是項目開發中基本上是看不見conection的。所以自己

java判斷兩個引用型別的變數是否指向同一地址

  問題:有兩個物件obj1和obj2,都是MyObject類的例項。如何比較這兩個物件是否指向相同的記憶體地址? 分情況討論: 1、如果 MyObject類的equals方法和hashcode方法被重寫:  如果obj1 == obj2 為真,則兩者指向相同的

Javaimport org.junit.Test @Test報錯

【問題描述】        Java專案中匯入import org.junit.Test 和使用@Test時報錯。 【解決辦法】        1、在MyEclipse或Eclipse專案中右擊屬性選擇【

java簡單的傳送一段資料到串列埠

可以跟著一起操作。 2 給專案新增外部jar(有eclipse和intellij兩種IDE操作方式說明) 2.1 假設你用eclipse 2.2 使用intellij 3 新增dll 將dll檔案複製到jdk和jre的b

C++C++類的定義物件的建立

類是建立物件的模板,一個類可以建立多個物件,每個物件都是類型別的一個變數;建立物件的過程也叫類的例項化。每個物件都是類的一個具體例項(Instance),擁有類的成員變數和成員函式。 在面向物件的程式語言中,經常把函式(Function)稱為方法(Method)。

Javaudp 實現 client端server端通訊

客戶端  1.建立客戶端+埠  2.準備資料  3.打包(傳送的地點及埠)  4.傳送  5.釋放   服務端  1.建立服務端+埠  2.準備接受容器  3.封裝成包  4.接受資料  5.分析資料  6.釋放  client.java package UdpDe

JAVA簡單實現一個阻塞任務佇列

package p18.juc; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownL

Java使用Apache POI生成解析Excel檔案

概述   Excel是我們平時工作中比較常用的用於儲存二維表資料的,JAVA也可以直接對Excel進行操作,分別有jxl和poi,2種方式。 程式碼   要使用poi,必須引入poi的jar包,maven依賴如下(最新包可參考mvn資訊): <

Java簡單的音樂播放器

應用名稱:Java簡單的音樂播放器 用到的知識:Java GUI程式設計,執行緒,IO 開發環境:win8+eclipse+jdk1.8 功能說明:可以選擇內建的音樂檔案播放,迴圈播放,停止。PS:這個播放器只能播放.au .aiff .wav .midi .rfm

物件引用物件賦值

關鍵字: java物件 引用Java物件及其引用關於物件與引用之間的一些基本概念。 初學Java時,在很長一段時間裡,總覺得基本概念很模糊。後來才知道,在許多Java書中,把物件和物件的引用混為一談。可是,如果我分不清物件與物件引用, 那實在沒法很好地理解下面的面向物件技術。把自己的一點認識寫下來,或許能讓初

Java基本類型引用類型(值傳遞)

適合 and span print pri right bre enc this 【關鍵詞】 【問題】 · 加深對基本類型和引用類型的理解; 【效果圖】 【分析】 參見最後的【參考資料】 【解決方式】 【代碼】 public

Java Spring 框架初步學習總結(一)簡單實現 IoC AOP

1.0 其中 表示 只需要 第一篇 否則 info fin pojo   Spring 是一個開源的設計層面的輕量級框架,Spring 的好處網上有太多,這裏就不在贅述。   IoC 控制反轉和 AOP 面向切面編程是 Spring 的兩個重要特性。   IoC(Inver

Python引用物件的理解

Overview 在Python中使用變數進行值修改、引數傳遞、以及複製變數等等的過程中,往往會出現一些我們意想不到的“錯誤”。 但實際上產生這些“錯誤”的原因,大多是因為沒有深入地理解Python內部的物件引用機制。 針對於此,筆者大致整理了10個例子,用以循序漸進地幫助大家加

java面向物件程式設計——類與物件的繼承多型

一、程式碼塊 程式碼塊定義:使用 {} 定義的一段程式碼。 根據程式碼塊定義的位置以及關鍵字,又可分為以下四種: 普通程式碼塊(定義在方法中,除錯) 構造塊(定義在類中的(不加修飾符)) 靜態塊 同步程式碼塊 構造塊 構造塊在每次產生一個新的物件就呼叫一次構

Java消除fastjson對同一物件迴圈引用的問題

傳入SerializerFeature.DisableCircularReferenceDetect引數 JSON.toJSONString([data],SerializerFeature.DisableCircularReferenceDetect);

JAVA29、面向物件的基本概念三個特徵

本篇博文最後修改時間:2016年3月5日,22:43。 一、簡介 本篇介紹面向物件的基本概念和三個特徵。 二、實驗平臺系統版本:Windows7 家庭普通版 32位作業系統。博主:思跡宣告:喝水

JAVAjava資料儲存-基礎型別,物件字串

總所周知,java是一種面向物件的程式設計語言。在java裡,一切都被視為物件,因此可以採用單一固定的語法。儘管一切都看作物件,但是操縱的識別符號實際上是物件的一個“引用”,這個引用指向資料實際存放的地址。 而我們的資料被儲存到什麼地方呢?特別是記憶體是怎麼分配的呢?我們有

Javajava使用反射訪問物件方法成員變數

雖然java是一門靜態語言,但是java的反射機制卻給java提供了很強大的動態特性,其特點是能讓java支援在執行時才能得知名稱與內部結構的類,並能訪問其所有的方法和成員變數,包括私有方法和私有成員變數。下面我寫了一個比較簡潔的測試程式碼,供參考和使用。 測試類 //O