您好,登錄后才能下訂單哦!
本篇內容介紹了“Java是不是純面向對象語言”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在我剛開始學習Java的前面幾年,我從書本里知道了Java是遵循“面向對象編程范式(ObjectOrientedProgrammingparadigm)”的。在Java世界內一切都是對象,甚至包括字符串(String)這些都是對象(在C語言中,字符串是字符數組),那時候,我認為Java是一種面向對象的語言。
后來,我在網上陸續看到不少開發者說“Java實際上不是純粹的面向對象,因為并不是所有的東西在Java世界都是一個對象”。他們很多的論點都可以概括為以下兩點:
所有基本類型(char,boolean,byte,short,int,long,float,double)都不是對象,因為我們不能做類似對象的所具有的操作(例如:使用“.”來訪問對象的屬性和方法)。
在那時,由于個人知識經驗儲備有限,我又很容地相信上面的論點,并且也開始認為“Java不是純粹的面向對象編程語言”。
到了更后來,我發現JVM在創建對象的時候,實際上會創建兩個對象:
一個是實例對象。另一個是Class對象。該Class對象在JVM內僅僅會裝載一次,該類的靜態方法和靜態屬性也一同裝載,JVM使用該Class對象來創建具體的實例對象(如上面的對象)。
一個是實例對象emp;另一個則是Class對象,我們可以通過Employee.class引用到它;這個Class對象擁有所有的這個類定義的靜態變量和靜態方法。同時,如果我們訪問通過emp對象來訪問靜態內容,會發現它其實指向的對象就是Employee.class。
這也揭開了另一個迷:為什么靜態內容在一個對象中(不管是emp還是emp2)改變了,在另一個對象中也同時改變,因為這兩個對象改變的都是在Employee.class同一個對象里面的內容。
現在,上面說到的第一個論點我們要取消了。因為,靜態內容確實被證實屬于一個對象。
但是我們還要確認第二個論點:正如早前提到的,原始類型在Java中不是對象,它們無法做類似對象的操作。為了解決這個問題,Java官方為每一個原始類型推出了對應的包裝類(比如:Integer對應int,Long對應long,Character對應char),所以,其實現在我們可以為原始類型創建一個包裝對象,同時對它們做對象相關的操作。并且,由于自動拆裝箱,我們可以把一個原始類型值賦值給它對應的包裝類的引用。但是我們仍然不能對這些原始類型做對象的操作,我們需要創建對應包裝類的對象。
所以總結一下是:在JVM內部,原始類型就是被當作對象來處理的。但是我們開發者直接把“原始類型”當作對象使用,開發者應該使用對應的包裝來。
“Java是不是純面向對象語言”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。