老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

java代碼組成理解 java 代碼結(jié)構(gòu)

怎么看懂java代碼?

想要看到都能java代碼,需要了解編程的基礎(chǔ)知識,變量,表達式,程序執(zhí)行結(jié)構(gòu),邏輯判斷等等。最重要是要學(xué)會如何調(diào)試代碼,慢慢練習(xí),熟練了自然就會了。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計與策劃設(shè)計,無極網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:無極等地區(qū)。無極做網(wǎng)站價格咨詢:13518219792

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

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

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

JAVA程序的運行

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

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

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

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

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

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

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

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

魔數(shù)(Magic Number)

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

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

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

版本號(Version)

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

常量池(Constant Pool)

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

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

訪問標志(Access_Flag)

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

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

類索引(This Class Name)

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

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

父類索引(Super Class Name)

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

接口索引(Interfaces)

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

字段表集合(fields)

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

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

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

方法(methods)

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

Attribute

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

0x000f : #15(“SourceFile”)

0×0000 0002 attribute_length=2

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

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

什么是Java?

Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進行復(fù)雜的編程 ? 。

Java具有簡單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵脚_獨立與可移植性、多線程、動態(tài)性等特點 ?。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等 。

Java語言特點

1.簡單性

Java看起來設(shè)計得很像C++,但是為了使語言小和容易熟悉,設(shè)計者們把C++語言中許多可用的特征去掉了,這些特征是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特征,并且不使用主文件,免去了預(yù)處理程序。因為Java沒有結(jié)構(gòu),數(shù)組和串都是對象,所以不需要指針。Java能夠自動處理對象的引用和間接引用,實現(xiàn)自動的無用單元收集,使用戶不必為存儲管理問題煩惱,能更多的時間和精力花在研發(fā)上。

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

Java是一個面向?qū)ο蟮恼Z言。對程序員來說,這意味著要注意其中的數(shù)據(jù)和操縱數(shù)據(jù)的方法(method),而不是嚴格地用過程來思考。在一個面向?qū)ο蟮南到y(tǒng)中,類(class)是數(shù)據(jù)和操作數(shù)據(jù)的方法的集合。數(shù)據(jù)和方法一起描述對象(object)的狀態(tài)和行為。每一對象是其狀態(tài)和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。Java程序是用類來組織的。

Java還包括一個類的擴展集合,分別組成各種程序包(Package),用戶可以在自己的程序中使用。例如,Java提供產(chǎn)生圖形用戶接口部件的類(java.awt包),這里awt是抽象窗口工具集(abstract windowing toolkit)的縮寫,處理輸入輸出的類(java.io包)和支持網(wǎng)絡(luò)功能的類(java點虐 包)。

3.分布性

Java設(shè)計成支持在網(wǎng)絡(luò)上應(yīng)用,它是分布式語言。Java既支持各種層次的網(wǎng)絡(luò)連接,又以Socket類支持可靠的流(stream)網(wǎng)絡(luò)連接,所以用戶可以產(chǎn)生分布式的客戶機和服務(wù)器。

網(wǎng)絡(luò)變成軟件應(yīng)用的分布運載工具。Java程序只要編寫一次,就可到處運行。

4.編譯和解釋性

Java編譯程序生成字節(jié)碼(byte-code),而不是通常的機器碼。Java字節(jié)碼提供對體系結(jié)構(gòu)中性的目標文件格式,代碼設(shè)計成可有效地傳送程序到多個平臺。Java程序可以在任何實現(xiàn)了Java解釋程序和運行系統(tǒng)(run-time system)的系統(tǒng)上運行。

在一個解釋性的環(huán)境中,程序開發(fā)的標準“鏈接”階段大大消失了。如果說Java還有一個鏈接階段,它只是把新類裝進環(huán)境的過程,它是增量式的、輕量級的過程。因此,Java支持快速原型和容易試驗,它將導(dǎo)致快速程序開發(fā)。這是一個與傳統(tǒng)的、耗時的“編譯、鏈接和測試”形成鮮明對比的精巧的開發(fā)過程。

5.穩(wěn)健性

Java原來是用作編寫消費類家用電子產(chǎn)品軟件的語言,所以它是被設(shè)計成寫高可靠和穩(wěn)健軟件的。Java消除了某些編程錯誤,使得用它寫可靠軟件相當容易。

Java是一個強類型語言,它允許擴展編譯時檢查潛在類型不匹配問題的功能。Java要求顯式的方法聲明,它不支持C風格的隱式聲明。這些嚴格的要求保證編譯程序能捕捉調(diào)用錯誤,這就導(dǎo)致更可靠的程序。

可靠性方面最重要的增強之一是Java的存儲模型。Java不支持指針,它消除重寫存儲和訛誤數(shù)據(jù)的可能性。類似地,Java自動的“無用單元收集”預(yù)防存儲漏泄和其它有關(guān)動態(tài)存儲分配和解除分配的有害錯誤。Java解釋程序也執(zhí)行許多運行時的檢查,諸如驗證所有數(shù)組和串訪問是否在界限之內(nèi)。

異常處理是Java中使得程序更穩(wěn)健的另一個特征。異常是某種類似于錯誤的異常條件出現(xiàn)的信號。使用try/catch/finally語句,程序員可以找到出錯的處理代碼,這就簡化了出錯處理和恢復(fù)的任務(wù)。

6.安全性

Java的存儲分配模型是它防御惡意代碼的主要方法之一。Java沒有指針,所以程序員不能得到隱蔽起來的內(nèi)幕和偽造指針去指向存儲器。更重要的是,Java編譯程序不處理存儲安排決策,所以程序員不能通過查看聲明去猜測類的實際存儲安排。編譯的Java代碼中的存儲引用在運行時由Java解釋程序決定實際存儲地址。

Java運行系統(tǒng)使用字節(jié)碼驗證過程來保證裝載到網(wǎng)絡(luò)上的代碼不違背任何Java語言限制。這個安全機制部分包括類如何從網(wǎng)上裝載。例如,裝載的類是放在分開的名字空間而不是局部類,預(yù)防惡意的小應(yīng)用程序用它自己的版本來代替標準Java類。

7.可移植性

Java使得語言聲明不依賴于實現(xiàn)的方面。例如,Java顯式說明每個基本數(shù)據(jù)類型的大小和它的運算行為(這些數(shù)據(jù)類型由Java語法描述)。

Java環(huán)境本身對新的硬件平臺和操作系統(tǒng)是可移植的。Java編譯程序也用Java編寫,而Java運行系統(tǒng)用ANSIC語言編寫。

8.高性能

Java是一種先編譯后解釋的語言,所以它不如全編譯性語言快。但是有些情況下性能是很要緊的,為了支持這些情況,Java設(shè)計者制作了“及時”編譯程序,它能在運行時把Java字節(jié)碼翻譯成特定CPU(中央處理器)的機器代碼,也就是實現(xiàn)全編譯了。

Java字節(jié)碼格式設(shè)計時考慮到這些“及時”編譯程序的需要,所以生成機器代碼的過程相當簡單,它能產(chǎn)生相當好的代碼。

9.多線程性

Java是多線程語言,它提供支持多線程的執(zhí)行(也稱為輕便過程),能處理不同任務(wù),使具有線索的程序設(shè)計很容易。Java的lang包提供一個Thread類,它支持開始線索、運行線索、停止線索和檢查線索狀態(tài)的方法。

Java的線索支持也包括一組同步原語。這些原語是基于監(jiān)督程序和條件變量風范,由C.A.R.Haore開發(fā)的廣泛使用的同步化方案。用關(guān)鍵詞synchronized,程序員可以說明某些方法在一個類中不能并發(fā)地運行。這些方法在監(jiān)督程序控制之下,確保變量維持在一個一致的狀態(tài)。

10.動態(tài)性

Java語言設(shè)計成適應(yīng)于變化的環(huán)境,它是一個動態(tài)的語言。例如,Java中的類是根據(jù)需要載入的,甚至有些是通過網(wǎng)絡(luò)獲取的。

java代碼解讀

第一個if是判斷searchkey是不是空的,如果不是空的,就追加到name字段作為查詢條件,like模糊查詢

接著第二個if判斷如果status的值不為空,就追加到status作為條件

如果status為空,走else分支,從userContext中獲取到employee對象,接著判斷,如果它的角色不是manager的話

把這個對象的id拿出來,作為seller.Id的條件進行查詢


文章名稱:java代碼組成理解 java 代碼結(jié)構(gòu)
分享地址:http://www.xueling.net.cn/article/ddedeog.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 草逼逼视频 | 日韩欧美久久 | 久久一区二区三区欧美 | 日日噜噜噜噜夜夜爽亚洲精品 | 成人1区2区 | 网站av在线 | 成人网站www污污污网站 | 91秒拍福利视频 | 日本黄色高清 | 国产揄拍国产精品人妻蜜 | 国产精品久久久久久久久久久久午夜片 | 三区在线观看 | 国产视频一区在线播放 | 成人国产影院 | 日本欧美一区二区三区高清 | 久久精品99视频 | 91青娱乐在线视频 | 亚洲伦产精品一区二区三区 | H无码精品视频在线观看网站 | 青娱乐极品视觉盛宴国产视频 | 日本午夜成年在线网站 | p影院永久免费p视频 | 亚洲AV无码一区二区二三区∝ | 国内成人免费视频 | 一本色道久久88精品综合 | 夜夜高潮夜夜爽精品欧美做爰 | 青青草手机视频 | 欧美精品cum4k高潮 | 国产成人动漫 | 久久久久亚洲AV无码尤物 | 欧美aⅴ一区二区 | 91免费国产精品 | 精品自拍视频在线观看 | 精品国产91| 国产自啪精品视频网站丝袜 | 欧美高清www | 一级毛片免费视频观看 | aaaaa一级片| 亚洲AV日韩AV永久无码绿巨人 | 天天艹逼网 | 91区人人爽人人都喜欢人人都有 |