成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:141日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久亚洲国产精品日日av夜夜| 久久99精品久久久久婷婷| 亚洲一区二区欧美激情| 黄色国产精品| 亚洲国产成人自拍| 欧美jjzz| 欧美国产乱子伦| 欧美日韩三区四区| 国产目拍亚洲精品99久久精品| 波多野结衣一区二区三区| 欧美一区二区精品久久911| 麻豆精品精品国产自在97香蕉| 91成人网在线| 国模套图日韩精品一区二区| 欧美高清视频在线高清观看mv色露露十八 | 国产精品日韩欧美一区二区| 亚洲欧美电影一区二区| 一区二区三区av| 亚洲综合精品久久| 国产精品亚洲欧美| 亚洲电影一级黄| 欧美中文字幕一区| 久久精品国产一区二区| 欧美日韩亚洲不卡| 国产精品资源在线观看| 日韩一级片网址| 懂色av一区二区三区免费看| 日韩欧美电影一区| 女人天堂亚洲aⅴ在线观看| 国产精品久久久久aaaa| 樱桃成人精品视频在线播放| 亚洲乱码国产乱码精品精可以看 | 成人一区二区在线观看| 精品国产麻豆免费人成网站| 99国产精品一区| 日本一区二区三区国色天香| 亚洲成人在线视频网站| 亚洲第一久久影院| 色哟哟欧美精品| 欧美精品一卡二卡| 99精品黄色片免费大全| 中日韩免费视频中文字幕| 亚洲高清免费| 亚洲一二三四区不卡| 在线免费观看日本欧美| 国产91精品在线观看| 欧美精品一区二区三区久久久 | 日日夜夜免费精品| 91麻豆精品国产自产在线| 不卡av在线免费观看| 国产精品美女一区二区在线观看| 一区二区三区精品国产| 日韩国产欧美在线观看| 欧美大肚乱孕交hd孕妇| 亚洲精品123区| 石原莉奈在线亚洲二区| 4438x成人网最大色成网站| 欧美成人嫩草网站| 亚洲18色成人| 91精品国产色综合久久不卡电影| 欧美精品国产| 日韩精品色哟哟| 欧美电视剧免费全集观看| 99精品国产福利在线观看免费| 免费观看久久久4p| www国产精品av| 亚洲精选在线| 国产综合久久久久久久久久久久| 亚洲国产精品ⅴa在线观看| 久久久蜜桃一区二区人| 国产乱人伦偷精品视频不卡| 18成人在线视频| 欧美日本不卡视频| 亚洲国产精品毛片| 国模大尺度一区二区三区| 中文字幕二三区不卡| 久久一二三四| 99精品视频在线免费观看| 亚洲国产日韩一级| 精品国产成人在线影院| 亚洲一区二区精品在线观看| 波多野结衣视频一区| 性做久久久久久久久| 久久综合久久99| 久久香蕉精品| 波多野结衣亚洲| 日韩有码一区二区三区| 国产色婷婷亚洲99精品小说| 91久久久免费一区二区| 国产在线成人| 国产精品一区二区在线看| 依依成人精品视频| 精品国产青草久久久久福利| 色av一区二区| 亚洲性图久久| 成人午夜免费视频| 琪琪久久久久日韩精品| 国产精品高潮久久久久无| 在线成人免费观看| 国产日韩欧美二区| 91亚洲精品乱码久久久久久蜜桃| 午夜不卡在线视频| 中文字幕精品一区二区三区精品| 欧美夫妻性生活| 奶水喷射视频一区| 欧美午夜不卡| 丰满亚洲少妇av| 美女高潮久久久| 一区二区三区免费看视频| 久久免费偷拍视频| 欧美老肥妇做.爰bbww视频| 另类的小说在线视频另类成人小视频在线| 中文字幕一区二区三区不卡在线 | 天堂av在线一区| 国产免费久久精品| 91精品国产色综合久久| 色综合久久天天| 亚洲精品色图| 91麻豆福利精品推荐| 激情久久五月天| 香蕉成人啪国产精品视频综合网 | 国产精品二区二区三区| 风间由美性色一区二区三区| 欧美aa在线视频| 亚洲综合色成人| 国产欧美视频一区二区三区| 欧美肥妇bbw| 日本精品免费观看高清观看| 亚洲精品久久| 欧美久久久久| aaa欧美大片| 国产精品一区二区三区乱码| 日本不卡中文字幕| 亚洲一区二区三区美女| 成人欧美一区二区三区小说 | 日本成人中文字幕| 亚洲一区二区三区四区五区中文 | 国内成+人亚洲+欧美+综合在线| 石原莉奈在线亚洲三区| 一区二区三区四区av| 中文字幕中文字幕一区| 欧美国产精品v| 久久精品欧美日韩精品| 亚洲精品在线三区| 日韩一级精品视频在线观看| 欧美日韩中文字幕一区二区| 亚洲女优在线| 一本一道久久综合狠狠老精东影业 | 成人激情黄色小说| 国产精品 欧美精品| 九九热在线视频观看这里只有精品| 首页国产欧美久久| 亚洲一区二区偷拍精品| 亚洲另类中文字| 亚洲色大成网站www久久九九| 国产精品美女一区二区| 中文字幕一区二区日韩精品绯色| 欧美国产激情一区二区三区蜜月| 久久影院电视剧免费观看| 欧美一区二区性放荡片| 欧美久久婷婷综合色| 欧美日韩一区二区三区高清| 欧美色区777第一页| 视频在线观看一区| 麻豆freexxxx性91精品| 麻豆精品在线播放| 久久国产精品第一页| 精品在线播放免费| 国产一区二区三区| 国产老妇另类xxxxx| 懂色av一区二区夜夜嗨| voyeur盗摄精品| 99re在线精品| 国内精品美女在线观看 | 亚洲综合不卡| 久久精品人人| 欧美综合一区二区| 欧美日韩亚洲综合一区| 91麻豆精品国产91久久久使用方法| 欧美一区二区三区四区高清 | 欧美激情艳妇裸体舞| 中文字幕在线免费不卡| 亚洲男人电影天堂| 午夜欧美在线一二页| 久久99精品网久久| 国产精品一区二区久久精品爱涩| 国产精品99久久久久久有的能看| 亚洲伦理在线精品| 亚洲成人精品影院| 日韩电影在线一区| 久久er99热精品一区二区| 丰满少妇在线播放bd日韩电影| 丰满白嫩尤物一区二区| 91影视在线播放| 国产精品av一区二区| 欧美日韩专区在线| 精品奇米国产一区二区三区| 国产无遮挡一区二区三区毛片日本| 综合欧美亚洲日本| 三级欧美在线一区|