最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JAVA字節(jié)代碼有何特點(diǎn),字節(jié)代碼的特點(diǎn)

Java語言有哪些特點(diǎn)?

1、簡單性:Java語言繼承了C++語言的優(yōu)點(diǎn),去掉了C++中學(xué)習(xí)起來比較難的多繼承、指針等概念,所以Java語言學(xué)習(xí)起來更簡單,使用起來也更方便。

站在用戶的角度思考問題,與客戶深入溝通,找到三明網(wǎng)站設(shè)計(jì)與三明網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋三明地區(qū)。

2、面向?qū)ο螅篔ava是一種面向?qū)ο蟮木幊陶Z言。

3、分布性:Java設(shè)計(jì)成支持在網(wǎng)絡(luò)上應(yīng)用,它是分布式語言。所以只要用Java編寫了一個(gè)程序,就可以到處應(yīng)用。可以節(jié)省大量人力物力。

4、編譯和解釋性:Java編譯程序生成字節(jié)碼,而不是通常的機(jī)器碼,這使得Java開發(fā)程序比用其他語言開發(fā)程序快很多。

5、穩(wěn)健性:Java剛開始被設(shè)計(jì)出來就是為了寫高可靠和穩(wěn)健的軟件的。所以用Java寫可靠的軟件很容易。目前許多第三方交易系統(tǒng)、銀行平臺的前臺和后臺電子交易系統(tǒng)等都會用Java語言開發(fā)。

6、安全性:Java的存儲分配模型是它防御惡意代碼的主要方法之一。所以很多大型企業(yè)級項(xiàng)目開發(fā)都會選擇用Java開發(fā)。

7、可移植性:Java并不依賴平臺,用Java編寫的程序可以運(yùn)用到任何操作系統(tǒng)上。

8、高性能:Java是一種先編譯后解釋的語言,所以它不如全編譯性語言快。但Java設(shè)計(jì)者制作了“及時(shí)”編譯程序,這樣就可以實(shí)現(xiàn)全編譯了。

9、多線索性:Java是多線索語言,它可以同時(shí)執(zhí)行多個(gè)程序,能處理不同任務(wù)。

10、動態(tài)性:Java語言設(shè)計(jì)成適應(yīng)于變化的環(huán)境,它是一個(gè)動態(tài)的語言。

Java的特點(diǎn)有哪些?

Java是一種優(yōu)秀的程序設(shè)計(jì)語言,它具有令人賞心悅目的語法和易于理解的語義。不僅如此,Java還是一個(gè)由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系,這個(gè)技術(shù)體系提供了完整的用于軟件開發(fā)和跨平臺部署的支持環(huán)境,并廣泛應(yīng)用于嵌入式系統(tǒng)、移動終端、企業(yè)服務(wù)器、大型機(jī)等各種場合。順便說一下,JavaScript和Java沒有任何關(guān)系,最開始JavaScript叫l(wèi)iveScript,當(dāng)時(shí)Java太火了,于是乎 liveScript更名為JavaScript借勢宣傳了一波。

隨便搜搜近幾年的編程類語言排行榜,Java絕對都是當(dāng)之無愧的老大哥。那么,Java究竟有什么特性能獲得 廣大程序員的一致青睞呢? 在此列出java的11個(gè)特性:

1.簡單性

Java語法是C++語法的一個(gè)“純凈版本”。這里沒有頭文件,指針運(yùn)算(甚至指針語法),結(jié)構(gòu),聯(lián)合,操作符重載,虛基類等等。不僅如此,Java開發(fā)環(huán)境遠(yuǎn)遠(yuǎn)超出大多數(shù)其他編程語言的開發(fā)環(huán)境。

2.面向?qū)ο?/p>

什么是面向?qū)ο??用木匠打一個(gè)比方,一個(gè)“面向?qū)ο蟆钡哪窘呈冀K關(guān)注的是所制作的椅子,第二位才是所使用的工具;而一個(gè)“非面向?qū)ο蟆蹦窘呈紫瓤紤]的是所使用的工具。

在Java的世界里,一切皆對象。

Java的面向?qū)ο筇匦耘cC++旗鼓相當(dāng),與C++不同的點(diǎn)在于多重繼承。在Java中,取而代之的是更簡單的接口概念。而且與C++想比,Java提供了更豐富非運(yùn)行時(shí)自省功能。

3.分布式(微服務(wù))

Java有豐富的例程庫,用于處理HTTP和FTP之類的TCP/IP協(xié)議。Java應(yīng)用程序能夠通過URL打開和訪問網(wǎng)絡(luò)上的對象,其便捷程度就好像訪問本地文件一樣。

4.健壯性

Java與C++最大的不同在于Java使用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能性(對于曾經(jīng)花費(fèi)幾個(gè)小時(shí)來檢查由于指針bug而引起內(nèi)存沖突的人來說,一定很喜歡Java的這一特性)。不僅如此,Java編譯器能夠檢測許多在其他語言中僅在運(yùn)行時(shí)才能夠檢測出來的問題。

5.安全性

Java適用于網(wǎng)絡(luò)/分式式環(huán)境。為了達(dá)到這個(gè)目標(biāo),在安全性方面投入了大量的精力。使用Java可以構(gòu)建防病毒,防篡改的系統(tǒng)。

從一開始,Java就設(shè)計(jì)出能夠防范常見的各種攻擊:

(1)運(yùn)行時(shí)堆棧溢出。蠕蟲和病毒常用的攻擊手段。(2)破壞自己進(jìn)程空間之外的內(nèi)存。(3)未經(jīng)授權(quán)讀寫文件。

6.體系結(jié)構(gòu)中立

編譯器生成一個(gè)體系結(jié)構(gòu)中立的目標(biāo)文件格式,這是一種編譯過的代碼,只要有Java運(yùn)行時(shí)系統(tǒng),這些編譯后的代碼就可以在許多處理器上運(yùn)行。Java編譯器通過生成與特定計(jì)算機(jī)體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令來實(shí)現(xiàn)這一特性。精心設(shè)計(jì)的字節(jié)碼不僅可以很容易的在任何機(jī)器上解釋執(zhí)行,而且還可以動態(tài)地翻譯成本地機(jī)器代碼。

7.可移植性

與C/C++不同,Java規(guī)范中沒有“依賴具體實(shí)現(xiàn)的地方”?;緮?shù)據(jù)類型的大小以及有關(guān)運(yùn)算都做了明確的說明。例如,Java中的int永遠(yuǎn)是32位的整數(shù),二在C/C++中,int可能是16位整數(shù),32位整數(shù),也可能是編譯器提供商指定的其他大小。在Java中,數(shù)據(jù)類型具有固定的大小,這消除了代碼代碼移植時(shí)令人頭疼的主要問題。

8.解釋型

Java解釋器可以再任何移植了解解釋器的機(jī)器上執(zhí)行Java字節(jié)碼。由于鏈接是一個(gè)增量式且輕量級的過程。所以開發(fā)過程也變得更加快捷,更加具有探索性。

9.高能性

盡管對解釋后的字節(jié)碼性能已經(jīng)比較滿意,但是在某些場合下可能需要更加高效的性能。字節(jié)碼可以(在運(yùn)行時(shí)刻)動態(tài)的翻譯成對應(yīng)運(yùn)行這個(gè)應(yīng)用的特定CPU的機(jī)器碼。

10.多線程

Java在當(dāng)時(shí)很超前,他是第一個(gè)支持并發(fā)程序設(shè)計(jì)的主流語言,多線程可以帶來更好的交互影響和實(shí)時(shí)行為。并發(fā)程序設(shè)計(jì)絕非易事,但是Java在這方面表現(xiàn)出色,可以很好的管理這個(gè)工作。

11.動態(tài)性

Java與C/C++相比更具有動態(tài)性。它能夠適應(yīng)不斷發(fā)展的環(huán)境。庫中可以自由的添加新方法和實(shí)例變量,而對客戶端沒有任何影響。在Java中找出運(yùn)行時(shí)類型信息十分簡單。

什么是Java字節(jié)碼?

它是程序的一種低級表示,可以運(yùn)行于Java虛擬機(jī)上。將程序抽象成字節(jié)碼可以保證Java程序在各種設(shè)備上的運(yùn)行

Java號稱是一門“一次編譯到處運(yùn)行”的語言,從我們寫的java文件到通過編譯器編譯成java字節(jié)碼文件(.class文件),這個(gè)過程是java編譯過程;而我們的java虛擬機(jī)執(zhí)行的就是字節(jié)碼文件。不論該字節(jié)碼文件來自何方,由哪種編譯器編譯,甚至是手寫字節(jié)碼文件,只要符合java虛擬機(jī)的規(guī)范,那么它就能夠執(zhí)行該字節(jié)碼文件。

JAVA程序的運(yùn)行

因?yàn)镴ava具有跨平臺特性,為了實(shí)現(xiàn)這個(gè)特性Java執(zhí)行在一臺虛擬機(jī)上,這臺虛擬機(jī)也就是JVM,Java通過JVM屏蔽了不同平臺之間的差異,從而做到一次編譯到處執(zhí)行。JVM位于Java編譯器和OS平臺之間,Java編譯器只需面向JVM,生成JVM能理解的代碼,這個(gè)代碼即字節(jié)碼,JVM再將字節(jié)碼翻譯成真實(shí)機(jī)器所能理解的二進(jìn)制機(jī)器碼。

字節(jié)碼是怎么產(chǎn)生的?

我們所編寫的程序都是.java格式,通常在執(zhí)行的時(shí)候也許點(diǎn)擊一下eclipse的運(yùn)行鍵就可以在控制臺看到運(yùn)行結(jié)果,但是也可以更酷一些,如果你裝了JDK,那就可以直接在以命令行的方式編譯運(yùn)行你的.java文件,編譯后會形成.class文件,這個(gè).class文件即字節(jié)碼。

字節(jié)碼怎么解讀?

上圖是編譯好的字節(jié)碼文件,即一堆16進(jìn)制的字節(jié),如果使用IDE去打開,也許看到的是已經(jīng)被反編譯的我們所熟悉的java代碼,但這才是純正的字節(jié)碼

這里只介紹字節(jié)碼由哪些部分組成, 具體的意思自行百度或者看文尾的連接, 有較為詳細(xì)的講解

上圖即字節(jié)碼文件的組成部分, Class文件的結(jié)構(gòu)不像XML等描述語言那樣松散自由。由于它沒有任何分隔符號,

所以,以上數(shù)據(jù)項(xiàng)無論是順序還是數(shù)量都是被嚴(yán)格限定的。哪個(gè)字節(jié)代表什么含義,長度是多少,先后順序如何,都不允許改變, 如上圖左側(cè)即每一部分規(guī)定的長度

魔數(shù)(Magic Number)

魔數(shù)是用來區(qū)分文件類型的一種標(biāo)志,一般都是用文件的前幾個(gè)字節(jié)來表示。

比如0XCAFE BABE表示的是class文件,那么有人會問,文件類型可以通過文件名后綴來判斷啊?是的,但是文件名是可以修改的(包括后綴),那么為了保證文件的安全性,將文件類型寫在文件內(nèi)部來保證不被篡改。

至于為什么是CAFE BABE估計(jì)大家也能猜到, 程序員與咖啡的不解之緣

版本號(Version)

版本號含主版本號和次版本號,都是各占2個(gè)字節(jié)。在此Demo種為0X0000 0033。其中前面的0000是次版本號,后面的0033是主版本號。通過進(jìn)制轉(zhuǎn)換得到的是次版本號為0,主版本號為51。高版本的JDK能向下兼容以前版本的Class文件,但不能運(yùn)行以后版本的Class文件,即使文件格式未發(fā)生任何變化. 這就是target參數(shù)的用處,可以在使用JDK 1.7編譯時(shí)指定-target 1.5

常量池(Constant Pool)

常量池是Class文件中的資源倉庫, 量池中主要存儲2大類常量:字面量和符號引用。字面量如文本字符串,java中聲明為final的常量值等等,而符號引用如類和接口的全局限定名,字段的名稱和描述符,方法的名稱和描述符。常量池是一個(gè)表結(jié)構(gòu),在表的內(nèi)容前有一個(gè)類型的計(jì)數(shù)器,表示常量池的長度

上面的表中描述了11中數(shù)據(jù)類型的結(jié)構(gòu),其實(shí)在jdk1.7之后又增加了3種(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。這樣算起來一共是14種

訪問標(biāo)志(Access_Flag)

訪問標(biāo)志信息包括該Class文件是類還是接口,是否被定義成public,是否是abstract,如果是類,是否被聲明成final。通過上面的源代碼,我們知道該文件是類并且是public。

0x 00 21:是0×0020和0×0001的并集。其中0×0020這個(gè)標(biāo)志值涉及到字節(jié)碼指令

類索引(This Class Name)

類索引用于確定類的全限定名

0×00 03 表示引用第3個(gè)常量,同時(shí)第3個(gè)常量引用第19個(gè)常量,查找得”com/demo/Demo”。#3.#19

父類索引(Super Class Name)

0×00 04 同理:#4.#20(java/lang/Object)

接口索引(Interfaces)

通過上邊字節(jié)碼圖可以看到,這個(gè)接口有2+n個(gè)字節(jié),前兩個(gè)字節(jié)表示的是接口數(shù)量,后面跟著就是接口的表。我們這個(gè)類沒有任何接口,所以應(yīng)該是0000。果不其然,查找字節(jié)碼文件得到的就是0000。

字段表集合(fields)

字段表用于描述類和接口中聲明的變量。這里的字段包含了類級別變量以及實(shí)例變量,但是不包括方法內(nèi)部聲明的局部變量。接下來就是2+n個(gè)字段屬性。我們只有一個(gè)屬性a,所以應(yīng)該是0001。查找文件果不其然是0001。

該區(qū)域含有字段的訪問標(biāo)志, 訪問權(quán)限, 字段的名稱索引, 字段的描述符索引, 屬性表

描述符的作用就是用來描述字段的數(shù)據(jù)類型、方法的參數(shù)列表和返回值。而屬性表就是為字段表和方法表提供額外信息的表結(jié)構(gòu)。對于字段來說,此處如果將字段聲明為一個(gè)static final msg = "aaa"的常量,則字段后就會跟著一個(gè)屬性表,其中存在一項(xiàng)名為ConstantValue,指向常量池中的一個(gè)常量,值為的"aaa"。

方法(methods)

包含訪問標(biāo)志表, 方法名索引 , 方法描述符索引, 屬性表數(shù)量,等

Attribute

0×0001 :同樣的,表示有1個(gè)Attributes了。

0x000f : #15(“SourceFile”)

0×0000 0002 attribute_length=2

0×0010 : sourcefile_index = #16(“Demo.java”)

SourceFile屬性用來記錄生成該Class文件的源碼文件名稱。


標(biāo)題名稱:JAVA字節(jié)代碼有何特點(diǎn),字節(jié)代碼的特點(diǎn)
當(dāng)前路徑:http://fisionsoft.com.cn/article/dsieodo.html