日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java到底是不是一種純面向對象語言?

瀏覽:169日期:2022-09-05 16:28:04

Java——是否確實的 “純面向對象”?讓我們深入到Java的世界,試圖來證實它。

Java到底是不是一種純面向對象語言?

在我剛開始學習 Java 的前面幾年,我從書本里知道了 Java 是遵循 “面向對象編程范式(Object Oriented Programming paradigm)”的。在Java世界內一切都是對象,甚至包括字符串(String)這些都是對象(在 C 語言中,字符串是字符數組),那時候,我認為 Java是一種面向對象的語言。

但是在后來,我在互聯網站上陸續看到不少開發者說 “Java實際上不是純粹的面向對象,因為并不是所有的東西在 Java 世界都是一個對象”。他們很多的論點都可以概括為以下兩點:

所有的靜態內容( static 關鍵修飾的變量和方法)不屬于任何對象,所以這些是非對象的東西。所有基本類型(char,boolean,byte,short,int,long,float,double)都不是對象,因為我們不能做類似正常對象的所具有的操作(例如:使用“.”來訪問對象的屬性和方法)。

在那時,由于個人知識經驗儲備有限,我又很容地相信上面的論點,并且也開始認為 “Java 不是純粹的面向對象編程語言”。

到了更后來,在我的一次JVM學習過程中,我有了新的發現:

JVM 在創建對象的時候,實際上會創建兩個對象:

一個是實例對象。另一個是Class 對象。該 Class 對象在JVM內僅僅會裝載一次,該類的靜態方法和靜態屬性也一同裝載,JVM使用該 Class 對象來創建具體的實例對象(如上面的對象)。

例如,在下面的 Java 語句中,將有兩個對象被創建:

Employee emp = new Employee();

一個是實例對象 emp ;另一個則是 Class對象,我們可以通過 Employee.class 引用到它;這個 Class 對象擁有所有的這個類定義的靜態變量和靜態方法,同時,如果我們訪問 通過 emp 對象來訪問靜態內容,會發現它其實指向的對象就是 Employee.class 。

這也揭開了另一個迷:為什么靜態內容在一個對象中(不管是emp還是emp2)改變了,在另一個對象中也同時改變,因為這兩個對象改變的都是在 Employee.class 同一個對象里面的內容。

現在,上面說到的第一個論點我們要取消了。因為,靜態內容確實被證實屬于一個對象。

但是我們還要確認第二個論點:正如早前提到的,原始類型在Java中不是對象,它們無法做類似對象的操作。為了解決這個問題,Java 官方為每一個原始類型推出了對應的包裝類(比如:Integer 對應 int,Long 對應 long,Character 對應 char),所以,其實現在我們可以為原始類型創建一個包裝對象,同時對它們做對象相關的操作。并且,由于自動拆裝箱,我們可以把一個原始類型值賦值給它對應的包裝類的引用。但是我們仍然不能對這些原始類型做對象的操作——我們需要創建對應包裝類的對象。

例如:

Integer obj = new Integer(5); // here we can do i.toString();int i = 5; // but we can't do i.toString() here

到目前為止,從一個最終用戶的角度上來看的,我們可以確認 “原始類別不是對象”。( Java開發人員是Java的最終用戶,因為我們正在使用它,而不是創造它 )。

如果站在JVM的視角,會有新的發現:

其實,在JVM看來它把所有的 “原始類型” 都是當作對象處理” ,要證明這一點可以通過 Class類的源代碼 或者 Javadoc中Class類的說明。

根據 java.lang.Class 類的源代碼,該類的注釋是:

Java官方描述:

Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects.

參考譯文:

Class類的實例表示正在運行的Java應用程序的類和接口。像枚舉是一種類和注解則是一種接口。每個數組也屬于被反射作為由具有相同的元素類型和尺寸的數目的所有陣列共享一類對象的類。原始的Java類型(boolean, byte, char, short, int, long, float, and double)和關鍵字void也表示為Class對象。

同時也根據Javadoc中對Class.isPrimitive()方法的定義,來判斷

Java官方描述:

public boolean isPrimitive()Determines if the specified Class object represents a primitive type.There are nine predefined Class objects to represent the eight primitive types and void. These are created by the Java Virtual Machine, and have the same names as t he primitive types that they represent, namely boolean,byte, char, short, int, long, float, and double.These objects may only be accessed via the following public static final variables, and are the only Class objects for which this method returns true.Returns:true if and only if this class represents a primitive typeSince:JDK1.1

參考翻譯:

public boolean isPrimitive()判斷指定的Class對象是否代表一個基本類型。一共有9種設定好的Class對象來表示對應的基本類型和void關鍵字。這些對象都是由JVM創建的。…return

當且僅當該類表示一個真正的基本類型

以上都說明,在JVM內部,其實原始類型就是對象。

當你打開 Javadoc 對 Class 類的定義中,通過 “CTRL+F ” 查找關鍵字 “primitive”, 將會發現證據在表面 “在JVM里,它把基本類型當作對象來處理的”。

我們可以再來看一個例子: Integer.TYPE,在這部分文檔清晰記錄著:

Java官方描述:

public static final Class<Integer> TYPEThe Class instance representing the primitive type int.

以上都說明,在JVM內部,其實原始類型就是對象。

那么,既然說 “JVM”會為所有的基本類型創建一個對象,那我們為什么還那么常用 “原始類型”, 而不是直接使用對應的包裝類對象呢?

這是因為,為 “原始類型” 創建的對象,在JVM內部是很輕量級的,相對與我們直接創建的對應包裝類對象做了許多優化; 也正因為輕量的緣故,這些原始類的功能就比較少(例如我們不能調用其內部的方法,因為他們內部已經優化成沒有方法了)

使用實際的例子來說明,為什么我們更應該使用 “原始類型”:

“原始類型”有更快的速度(例如,下面的代碼執行,在我們的機器上需要9秒,但當我把 Long 改成 long 之后,0秒內就完成了)

public static void main(String[] args) { long millis = System.currentTimeMillis(); Long sum = 0L; // uses Long, not long for (long i = 0; i <= Integer.MAX_VALUE; i++) {sum += i; } System.out.println(sum); System.out.println((System.currentTimeMillis() - millis) / 1000);}

“原始類型”允許我們直接使用 “==”來進行比較

new Integer(3) == new Integer(3); // falsenew Integer(100) == new Integer(100); // falseInteger.valueOf(5) == Integer.valueOf(5); //trueInteger.valueOf(200) == Integer.valueOf(200); //false

我們注意看第四句,輸出結果確實為 “false” 。這個是因在 [-128; 127] 這個區間的265個整數會被 JVM 緩存存放, 所以在這個區間, JVM返回相同的對象;然而,超出這個區間, JVM就不再有緩存了,將會創建新的對象,所以結果是不等的。

所以總結一下是: 在JVM內部,原始類型就是被當作對象來處理的。但是我們開發者直接把 “原始類型” 當作對象使用,開發者應該使用對應的包裝來。

以上就是為什么我說 “ Java確實是一個純粹的面向對象語言 ”的證實過程。如果你們對這個有什么其他的觀點,請在評論留言,一起討論。

英文原文:Why Java Is a Purely Object-Oriented Language... Or Why Not 翻譯:碼農網

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91看片一区| 蜜桃传媒麻豆第一区在线观看| 久久中文字幕av一区二区不卡| 久久国产精品色av免费看| 久久在线免费| 麻豆精品蜜桃| 欧美肉体xxxx裸体137大胆| 久久久久亚洲精品中文字幕| 日韩欧美中文在线观看| 在线观看视频免费一区二区三区| 狠狠色综合网| 性色一区二区| 亚洲精品字幕| 久久av超碰| 欧美黄色精品| 国产成人久久精品麻豆二区 | 欧美成人精品一级| 国产精品视频一区二区三区四蜜臂 | 欧美va天堂| 另类av一区二区| 欧美精品影院| 特黄毛片在线观看| 综合激情婷婷| 丁香婷婷久久| 99在线精品免费视频九九视| 日韩综合小视频| 国产一二在线播放| 好吊视频一区二区三区四区| 亚洲精品精选| 国产伦理久久久久久妇女| 精品一区二区三区中文字幕| 麻豆久久一区| 日韩av中文字幕一区二区三区| 久久国产生活片100| 欧美精品导航| 99成人在线视频| 亚洲人亚洲人色久| 精品视频网站| 日韩一区二区免费看| 精品国产三区在线| 91国语精品自产拍| 中文字幕av一区二区三区四区| 综合激情在线| 成人三级高清视频在线看| 久久九九精品| 日韩精品久久久久久久软件91| 国产日韩欧美三级| 性色一区二区| 精品成人18| 亚洲一级影院| 欧美亚洲自偷自偷| 欧美好骚综合网| 麻豆91在线播放| 亚洲精品激情| 国产精品videossex久久发布| 91成人精品视频| 少妇精品久久久一区二区三区| 日本少妇精品亚洲第一区| 国产一区福利| 亚洲人成精品久久久| 国产va免费精品观看精品视频| 亚洲在线一区| 久久久成人网| 国产一区二区三区免费在线| 国产精品99一区二区三| 神马久久午夜| 蜜臀国产一区二区三区在线播放| 久久毛片亚洲| 欧美在线精品一区| 91精品国产自产在线观看永久∴| 欧美日韩1区2区3区| 亚洲在线国产日韩欧美| 久久久久久网| 日韩欧美2区| 一区在线免费| 亚洲精品小说| 久久一级电影| 国产高清不卡| 中文字幕人成乱码在线观看 | 精品一区二区三区中文字幕 | 天堂va欧美ⅴa亚洲va一国产| 欧美aa国产视频| 黄色精品视频| 1024精品一区二区三区| 欧美少妇精品| 日本综合字幕| 久久国产成人午夜av影院宅| 正在播放日韩精品| 日韩综合一区| 黄色在线网站噜噜噜| 日韩一二三区在线观看| 欧美亚洲三级| 国产精品久久久久毛片大屁完整版| 91精品国产经典在线观看| 国产精品玖玖玖在线资源| 国产精品久一| 日韩精品1区| 日韩精品第一区| 日韩一区二区三区在线看| 国产欧美一区二区三区米奇| 免费视频一区二区三区在线观看| 精品国产欧美日韩| 久久精品影视| 蜜桃av一区二区三区电影| 国产亚洲一卡2卡3卡4卡新区| 久久精品国产99| 久久精品国产99| 久久精品青草| 欧美影院精品| 婷婷激情图片久久| 日韩久久99| 日韩成人高清| 樱桃成人精品视频在线播放| 日韩区欧美区| 日韩高清成人| 久久先锋影音| www.51av欧美视频| 亚洲一区二区日韩| 伊人久久国产| 偷拍欧美精品| 久久久国产精品网站| 91久久国产| 精品72久久久久中文字幕| 亚洲综合国产| 久久91导航| 国产精品玖玖玖在线资源| 免费视频国产一区| 美国三级日本三级久久99| 久久不见久久见国语| 亚洲一区欧美| 99久久激情| 都市激情国产精品| 日本aⅴ免费视频一区二区三区| 国产精品一区二区精品视频观看| 91精品蜜臀一区二区三区在线| 欧美亚洲三级| 亚洲精品美女91| 亚洲激精日韩激精欧美精品| 久久精品国产一区二区| 亚洲专区视频| 亚洲精品韩国| 蜜桃伊人久久| 亚洲美女久久精品| 欧美国产美女| 久久天堂影院| 久久免费视频66| 欧美国产视频| 国产精品magnet| 欧美1区二区| 精品一二三区| 国产精品99久久免费观看| 欧美日韩夜夜| 国产免费播放一区二区| 国产精品久久久免费| 国产欧美午夜| 欧美激情福利| 国产成人精品一区二区三区免费| 蜜桃久久精品一区二区| 日本亚洲最大的色成网站www| 日韩专区欧美专区| 午夜久久av | 蜜臀精品久久久久久蜜臀| 国产手机视频一区二区 | 亚洲精品字幕| 日韩久久99| 国产日韩一区二区三区在线| 日韩二区在线观看| 美女精品在线| 青青草精品视频| 久久久91麻豆精品国产一区| 日韩免费一区| 免费在线观看日韩欧美| 日韩高清三区| 岛国av免费在线观看| 亚洲少妇自拍| 欧美国产亚洲精品| 欧美 日韩 国产精品免费观看| 国产欧美丝祙| 99视频精品全部免费在线视频| 午夜在线一区| 国产69精品久久| 老牛影视一区二区三区| 亚洲小说春色综合另类电影| 欧美一区成人| 极品裸体白嫩激情啪啪国产精品| 日韩一区二区三区精品视频第3页| 精品国产欧美| 综合激情一区| 91精品久久久久久久久久不卡| 国产精品v日韩精品v欧美精品网站 | av在线日韩| 国产精品地址| 日韩中文字幕91| 久久不卡日韩美女| 青青在线精品| 在线亚洲国产精品网站| 国产一区二区三区精品在线观看| 亚洲视频国产| 欧美日韩国产高清电影| 精品视频高潮|