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

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

Java到底是不是一種純面向?qū)ο笳Z言?

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

Java——是否確實的 “純面向?qū)ο?rdquo;?讓我們深入到Java的世界,試圖來證實它。

Java到底是不是一種純面向?qū)ο笳Z言?

在我剛開始學習 Java 的前面幾年,我從書本里知道了 Java 是遵循 “面向?qū)ο缶幊谭妒剑∣bject Oriented Programming paradigm)”的。在Java世界內(nèi)一切都是對象,甚至包括字符串(String)這些都是對象(在 C 語言中,字符串是字符數(shù)組),那時候,我認為 Java是一種面向?qū)ο蟮恼Z言。

但是在后來,我在互聯(lián)網(wǎng)站上陸續(xù)看到不少開發(fā)者說 “Java實際上不是純粹的面向?qū)ο螅驗椴⒉皇撬械臇|西在 Java 世界都是一個對象”。他們很多的論點都可以概括為以下兩點:

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

在那時,由于個人知識經(jīng)驗儲備有限,我又很容地相信上面的論點,并且也開始認為 “Java 不是純粹的面向?qū)ο缶幊陶Z言”。

到了更后來,在我的一次JVM學習過程中,我有了新的發(fā)現(xiàn):

JVM 在創(chuàng)建對象的時候,實際上會創(chuàng)建兩個對象:

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

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

Employee emp = new Employee();

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

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

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

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

例如:

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

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

如果站在JVM的視角,會有新的發(fā)現(xiàn):

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

根據(jù) 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應用程序的類和接口。像枚舉是一種類和注解則是一種接口。每個數(shù)組也屬于被反射作為由具有相同的元素類型和尺寸的數(shù)目的所有陣列共享一類對象的類。原始的Java類型(boolean, byte, char, short, int, long, float, and double)和關鍵字void也表示為Class對象。

同時也根據(jù)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創(chuàng)建的。…return

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

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

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

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

Java官方描述:

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

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

那么,既然說 “JVM”會為所有的基本類型創(chuàng)建一個對象,那我們?yōu)槭裁催€那么常用 “原始類型”, 而不是直接使用對應的包裝類對象呢?

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

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

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

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] 這個區(qū)間的265個整數(shù)會被 JVM 緩存存放, 所以在這個區(qū)間, JVM返回相同的對象;然而,超出這個區(qū)間, JVM就不再有緩存了,將會創(chuàng)建新的對象,所以結果是不等的。

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

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

英文原文:Why Java Is a Purely Object-Oriented Language... Or Why Not 翻譯:碼農(nóng)網(wǎng)

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩欧美一区二区三区| 日韩激情网站| 久久精品国产99国产精品| 日韩成人精品一区二区三区| 亚洲精品在线a| 日本午夜精品久久久久| 欧美一级全黄| 国产精品777777在线播放| 911亚洲精品| 国产精品theporn| 国语对白精品一区二区| 91av亚洲| 亚洲欧美久久| 日韩av一区二| 精品亚洲自拍| 日产精品一区二区| 国产综合欧美| 最新国产精品久久久| 91精品啪在线观看国产爱臀| 国产日韩亚洲| 成人高清一区| 精品一区在线| 综合激情一区| 国产黄色一区| 欧美色图国产精品| 亚洲精品无播放器在线播放| 久久爱www.| 久久在线电影| 亚洲bt欧美bt精品777| 国产精品激情| 国产va免费精品观看精品视频| 电影亚洲精品噜噜在线观看 | 日韩欧美一区二区三区免费观看| 免费视频亚洲| 91精品日本| 欧美精品高清| 日韩精品成人| 国产精品久久久久久久免费观看| 91精品在线观看国产| 亚洲制服欧美另类| 国产精品福利在线观看播放| 午夜日韩福利| 久久国际精品| 日韩欧美精品综合| 免费成人在线视频观看| 精品久久一区| 最新日韩欧美| 麻豆精品视频在线观看| 亚洲精品一区二区妖精| 欧美久久一区二区三区| 精精国产xxxx视频在线野外| 综合欧美亚洲| 天堂网av成人| 国产伦乱精品| 午夜国产精品视频| 欧美黄色一区二区| 日韩中文字幕1| 国产一区二区三区久久 | 久久精品成人| 欧美天堂一区| 黄色国产精品| 红杏一区二区三区| 午夜亚洲福利| 亚洲高清二区| 精品免费av| 日韩精品欧美精品| 欧美精选一区二区三区| 免费在线亚洲欧美| 蜜臀久久久99精品久久久久久| 精品国产麻豆| 日韩不卡一区二区三区| 在线一区视频观看| 国产精品任我爽爆在线播放| 亚洲女同中文字幕| 成人国产综合| 青青青国产精品| 性一交一乱一区二区洋洋av| 色乱码一区二区三区网站| 日韩和欧美一区二区| 欧美成人久久| 九色porny丨国产首页在线| 国产探花在线精品| 亚洲综合中文| 国产亚洲在线| 99久久精品网| 国产在线观看www| 日韩欧美另类中文字幕| 国产二区精品| 999国产精品999久久久久久| 精品国产亚洲一区二区在线观看| 亚洲欧美在线专区| 亚洲综合日韩| 亚洲激情精品| 欧美 日韩 国产精品免费观看| 成年男女免费视频网站不卡| 国产麻豆一区二区三区精品视频| 亚洲三级视频| 免费人成在线不卡| 99re国产精品| 国产精品99免费看| 亚洲黄色免费av| 激情中国色综合| 国产精品一区三区在线观看| 亚洲ww精品| 亚洲精品乱码| 日本综合精品一区| 亚洲综合福利| 亚洲激情偷拍| 伊人成人网在线看| 日韩视频一区| 蘑菇福利视频一区播放| 91久久亚洲| 欧美日韩国产亚洲一区| 欧美日中文字幕| 久久久久久久久久久妇女| 高潮一区二区| 亚洲成av在线| 日韩久久电影| 亚洲一级少妇| 久久黄色影院| 精品一区免费| 亚洲一区中文| 亚洲精品一级| 日韩高清不卡在线| 国产色99精品9i| 久久这里只有| 色综合狠狠操| 亚洲二区在线| 免费人成在线不卡| 88久久精品| 精品一区视频| 天堂中文在线播放| 亚洲精品一级二级| 樱桃成人精品视频在线播放| 视频一区中文字幕| 日韩精品一区二区三区中文 | 麻豆精品蜜桃视频网站| 国产成人调教视频在线观看| 正在播放日韩精品| 免费视频国产一区| 在线精品国产亚洲| 日本天堂一区| 日产精品一区二区| 红桃视频国产精品| 日产欧产美韩系列久久99| 国产美女久久| 天堂av在线| 免费在线成人网| 国产精品白丝久久av网站| 国产一区二区三区精品在线观看| 成人在线网站| 一本综合精品| 捆绑调教美女网站视频一区| 国产aⅴ精品一区二区四区| 天堂网av成人| 亚洲精品欧美| 国产精品99一区二区三| 好看不卡的中文字幕| 777久久精品| 特黄毛片在线观看| 夜久久久久久| 欧美一区=区三区| 成人片免费看| 亚洲日韩中文字幕一区| 精品亚洲成人| 免费精品国产的网站免费观看| 日韩在线黄色| 正在播放日韩精品| 亚洲美女91| 超碰99在线| 中文无码日韩欧| 久久久久久网| 蜜臀91精品一区二区三区| 欧美精品二区| 亚洲欧美日韩国产一区| 日韩精选在线| 亚洲成人国产| 欧美日韩精品一区二区三区在线观看| 日韩欧美午夜| 日本三级亚洲精品| 久久久久久黄| 91九色综合| 99热国内精品| 国产人成精品一区二区三| 日本va欧美va精品| 欧美一区二区三区高清视频| 婷婷综合国产| 久久国产成人午夜av影院宅| 国产另类在线| 久久先锋影音| 加勒比视频一区| 亚洲九九精品| 久久久久一区| 久久av影院| 樱桃成人精品视频在线播放| 精品久久中文| 日韩黄色在线观看| 影音国产精品| 丝袜美腿诱惑一区二区三区| 国产日韩欧美一区在线|