欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      java高級Inside_JVM讀書筆記

      時間:2019-05-13 11:07:50下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《java高級Inside_JVM讀書筆記》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《java高級Inside_JVM讀書筆記》。

      第一篇:java高級Inside_JVM讀書筆記

      本文首先介紹一下Java虛擬機(jī)的生存周期,然后大致介紹JVM的體系結(jié)構(gòu),最后對體系結(jié)構(gòu)中的各個部分進(jìn)行詳細(xì)介紹。

      (首先這里澄清兩個概念:JVM實(shí)例和JVM執(zhí)行引擎實(shí)例,JVM實(shí)例對應(yīng)了一個獨(dú)立運(yùn)行的java程序,而JVM執(zhí)行引擎實(shí)例則對應(yīng)了屬于用戶運(yùn)行程序的線程;也就是JVM實(shí)例是進(jìn)程級別,而執(zhí)行引擎是線程級別的。)

      一、JVM的生命周期

      JVM實(shí)例的誕生:當(dāng)啟動一個Java程序時,一個JVM實(shí)例就產(chǎn)生了,任何一個擁有public static void main(String[] args)函數(shù)的class都可以作為JVM實(shí)例運(yùn)行的起點(diǎn),既然如此,那么JVM如何知道是運(yùn)行class A的main而不是運(yùn)行class B的main呢?這就需要顯式的告訴JVM類名,也就是我們平時運(yùn)行java程序命令的由來,如java classA hello world,這里java是告訴os運(yùn)行Sun java 2 SDK的java虛擬機(jī),而classA則指出了運(yùn)行JVM所需要的類名。

      JVM實(shí)例的運(yùn)行:main()作為該程序初始線程的起點(diǎn),任何其他線程均由該線程啟動。JVM內(nèi)部有兩種線程:守護(hù)線程和非守護(hù)線程,main()屬于非守護(hù)線程,守護(hù)線程通常由JVM自己使用,java程序也可以標(biāo)明自己創(chuàng)建的線程是守護(hù)線程。

      JVM實(shí)例的消亡:當(dāng)程序中的所有非守護(hù)線程都終止時,JVM才退出;若安全管理器允許,程序也可以使用Runtime類或者System.exit()來退出。

      二、JVM的體系結(jié)構(gòu)

      粗略分來,JVM的內(nèi)部體系結(jié)構(gòu)分為三部分,分別是:類裝載器(ClassLoader)子系統(tǒng),運(yùn)行時數(shù)據(jù)區(qū),和執(zhí)行引擎。

      下面將先介紹類裝載器,然后是執(zhí)行引擎,最后是運(yùn)行時數(shù)據(jù)區(qū)

      1,類裝載器,顧名思義,就是用來裝載.class文件的。JVM的兩種類裝載器包括:啟動類裝載器和用戶自定義類裝載器,啟動類裝載器是JVM實(shí)現(xiàn)的一部分,用戶自定義類裝載器則是Java程序的一部分,必須是ClassLoader類的子類。(下面所述情況是針對Sun JDK1.2)

      動類裝載器:只在系統(tǒng)類(java API的類文件)的安裝路徑查找要裝入的類

      用戶自定義類裝載器:

      系統(tǒng)類裝載器:在JVM啟動時創(chuàng)建,用來在CLASSPATH目錄下查找要裝入的類

      其他用戶自定義類裝載器:這里有必要先說一下ClassLoader類的幾個方法,了解它們對于了解自定義類裝載器如何裝載.class文件至關(guān)重要。

      protected final Class defineClass(String name, byte data[], int offset, int length)

      protected final Class defineClass(String name, byte data[], int offset, int length, ProtectionDomain protectionDomain);

      protected final Class findSystemClass(String name)

      protected final void resolveClass(Class c)

      defineClass用來將二進(jìn)制class文件(新類型)導(dǎo)入到方法區(qū),也就是這里指的類是用戶自定義的類(也

      就是負(fù)責(zé)裝載類)

      findSystemClass通過類型的全限定名,先通過系統(tǒng)類裝載器或者啟動類裝載器來裝載,并返回

      Class對象。

      ResolveClass: 讓類裝載器進(jìn)行連接動作(包括驗(yàn)證,分配內(nèi)存初始化,將類型中的符號引用解析為

      直接引用),這里涉及到j(luò)ava命名空間的問題,JVM保證被一個類裝載器裝載的類所引用的所有類都被這個類裝載器裝載,同一個類裝載器裝載的類之間可以相互訪問,但是不同類裝載器裝載的類看不見對方,從而實(shí)現(xiàn)了有效的屏蔽。

      2,執(zhí)行引擎:它或者在執(zhí)行字節(jié)碼,或者執(zhí)行本地方法

      要說執(zhí)行引擎,就不得不的指令集,每一條指令包含一個單字節(jié)的操作碼,后面跟0個或者多個

      操作數(shù)。

      (一)指令集以棧為設(shè)計(jì)中心,而非以寄存器為中心

      這種指令集設(shè)計(jì)如何滿足Java體系的要求:

      平臺無關(guān)性:以棧為中心使得在只有很少register的機(jī)器上實(shí)現(xiàn)java更便利

      compiler一般采用stack向連接優(yōu)化器傳遞編譯的中間結(jié)果,若指令集以stack為基礎(chǔ),則有利于運(yùn)行

      時進(jìn)行的優(yōu)化工作與執(zhí)行即時編譯或者自適應(yīng)優(yōu)化的執(zhí)行引擎結(jié)合,通俗的說就是使編譯和運(yùn)行用的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一,更有利于優(yōu)化的開展。

      網(wǎng)絡(luò)移動性:class文件的緊湊性。

      安全性:指令集中絕大部分操作碼都指明了操作的類型。(在裝載的時候使用數(shù)據(jù)流分析期進(jìn)行一

      次性驗(yàn)證,而非在執(zhí)行每條指令的時候進(jìn)行驗(yàn)證,有利于提高執(zhí)行速度)。

      (二)執(zhí)行技術(shù)

      主要的執(zhí)行技術(shù)有:解釋,即時編譯,自適應(yīng)優(yōu)化、芯片級直接執(zhí)行

      其中解釋屬于第一代JVM,即時編譯JIT屬于第二代JVM,自適應(yīng)優(yōu)化(目前Sun的HotspotJVM

      采用這種技術(shù))則吸取第一代JVM和第二代JVM的經(jīng)驗(yàn),采用兩者結(jié)合的方式

      自適應(yīng)優(yōu)化:開始對所有的代碼都采取解釋執(zhí)行的方式,并監(jiān)視代碼執(zhí)行情況,然后對那些經(jīng)常調(diào)

      用的方法啟動一個后臺線程,將其編譯為本地代碼,并進(jìn)行仔細(xì)優(yōu)化。若方法不再頻繁使用,則取消編譯過的代碼,仍對其進(jìn)行解釋執(zhí)行。

      3,運(yùn)行時數(shù)據(jù)區(qū):主要包括:方法區(qū),堆,java棧,PC寄存器,本地方法棧

      (1)方法區(qū)和堆由所有線程共享

      堆:存放所有程序在運(yùn)行時創(chuàng)建的對象

      方法區(qū):當(dāng)JVM的類裝載器加載.class文件,并進(jìn)行解析,把解析的類型信息放入方法區(qū)。

      (2)Java棧和PC寄存器由線程獨(dú)享,在新線程創(chuàng)建時間里

      (3)本地方法棧: 存儲本地方法調(diào)用的狀態(tài)

      上邊總體介紹了運(yùn)行時數(shù)據(jù)區(qū)的主要內(nèi)容,下邊進(jìn)行詳細(xì)介紹,要介紹數(shù)據(jù)區(qū),就不得不說明JVM

      中的數(shù)據(jù)類型。

      JVM中的數(shù)據(jù)類型:JVM中基本的數(shù)據(jù)單元是word,而word的長度由JVM具體的實(shí)現(xiàn)者來決定

      數(shù)據(jù)類型包括基本類型和引用類型,(1)基本類型包括:數(shù)值類型(包括除boolean外的所有的java基本數(shù)據(jù)類型),boolean(在JVM中使

      用int來表示,0表示false,其他int值均表示true)和returnAddress(JVM的內(nèi)部類型,用來實(shí)現(xiàn)

      finally子句)。

      (2)引用類型包括:數(shù)組類型,類類型,接口類型

      前邊講述了JVM中數(shù)據(jù)的表示,下面讓我們輸入到JVM的數(shù)據(jù)區(qū)

      首先來看方法區(qū):

      上邊已經(jīng)提到,方法區(qū)主要用來存儲JVM從class文件中提取的類型信息,那么類型信息是如何存儲的呢?眾所周知,Java使用的是大端序(big—endian:即低字節(jié)的數(shù)據(jù)存儲在高位內(nèi)存上,如對于1234,12是高位數(shù)據(jù),34為低位數(shù)據(jù),則java中的存儲格式應(yīng)該為12存在內(nèi)存的低地址,34存在內(nèi)存的高地址,x86中的存儲格式與之相反)來存儲數(shù)據(jù),這實(shí)際上是在class文件中數(shù)據(jù)的存儲格式,但是當(dāng)數(shù)據(jù)倒入到方法區(qū)中時,JVM可以以任何方式來存儲它。

      類型信息:包括class的全限定名,class的直接父類,類類型還是接口類型,類的修飾符(public,等),所有直接父接口的列表,Class對象提供了訪問這些信息的窗口(可通過Class.forName(“”)或instance.getClass()獲得),下面是Class的方法,相信大家看了會恍然大悟,(原來如此?)

      getName(), getSuperClass(), isInterface(), getInterfaces(), getClassLoader();

      static變量作為類型信息的一部分保存

      指向ClassLoader類的引用:在動態(tài)連接時裝載該類中引用的其他類

      指向Class類的引用:必然的,上邊已述

      該類型的常量池:包括直接常量(String,integer和float point常量)以及對其他類型、字段和方法的符號引用(注意:這里的常量池并不是普通意義上的存儲常量的地方,這些符號引用可能是我們在編程中所接觸到的變量),由于這些符號引用,使得常量池成為java程序動態(tài)連接中至關(guān)重要的部分

      字段信息:普通意義上的類型中聲明的字段

      方法信息:類型中各個方法的信息

      編譯期常量:指用final聲明或者用編譯時已知的值初始化的類變量

      class將所有的常量復(fù)制至其常量池或者其字節(jié)碼流中。

      方法表:一個數(shù)組,包括所有它的實(shí)例可能調(diào)用的實(shí)例方法的直接引用(包括從父類中繼承來的)除此之外,若某個類不是抽象和本地的,還要保存方法的字節(jié)碼,操作數(shù)棧和該方法的棧幀,異常表。舉例:

      class Lava{

      private int speed = 5;

      void flow(){}

      }

      class Volcano{

      public static void main(String[] args){

      Lava lava = new Lava();

      lava.flow();

      }

      }

      運(yùn)行命令java Volcano;

      (1)JVM找到Volcano.class倒入,并提取相應(yīng)的類型信息到方法區(qū)。通過執(zhí)行方法區(qū)中的字節(jié)碼,JVM

      執(zhí)行main()方法,(執(zhí)行時會一直保存指向Vocano類的常量池的指針)

      (2)Main()中第一條指令告訴JVM需為列在常量池第一項(xiàng)的類分配內(nèi)存(此處再次說明了常量池并非

      只存儲常量信息),然后JVM找到常量池的第一項(xiàng),發(fā)現(xiàn)是對Lava類的符號引用,則檢查方法區(qū),看Lava類是否裝載,結(jié)果是還未裝載,則查找“Lava.class”,將類型信息寫入方法區(qū),并將方法區(qū)Lava類信息的指針來替換Volcano原常量池中的符號引用,即用直接引用來替換符號引用。

      (3)JVM看到new關(guān)鍵字,準(zhǔn)備為Lava分配內(nèi)存,根據(jù)Volcano的常量池的第一項(xiàng)找到Lava在方法區(qū)的位置,并分析需要多少對空間,確定后,在堆上分配空間,并將speed變量初始為0,并將lava對象的引用壓到棧中

      (4)調(diào)用lava的flow()方法

      好了,大致了解了方法區(qū)的內(nèi)容后,讓我們來看看堆

      java對象的堆實(shí)現(xiàn):

      java對象主要由實(shí)例變量(包括自己所屬的類和其父類聲明的)以及指向方法區(qū)中類數(shù)據(jù)的指針,指向方法表的指針,對象鎖(非必需),等待集合(非必需),GC相關(guān)的數(shù)據(jù)(非必需)(主要視GC算法而定,如對于標(biāo)記并清除算法,需要標(biāo)記對象是否被引用,以及是否已調(diào)用finalize()方法)。

      那么為什么java對象中要有指向類數(shù)據(jù)的指針呢?我們從幾個方面來考慮

      首先:當(dāng)程序中將一個對象引用轉(zhuǎn)為另一個類型時,如何檢查轉(zhuǎn)換是否允許?需用到類數(shù)據(jù)

      其次:動態(tài)綁定時,并不是需要引用類型,而是需要運(yùn)行時類型,這里的迷惑是:為什么類數(shù)據(jù)中保存的是實(shí)際類型,而非引用類型?這個問題先留下來,我想在后續(xù)的讀書筆記中應(yīng)該能明白

      指向方法表的指針:這里和C++的VTBL是類似的,有利于提高方法調(diào)用的效率

      對象鎖:用來實(shí)現(xiàn)多個線程對共享數(shù)據(jù)的互斥訪問

      等待集合:用來讓多個線程為完成共同目標(biāo)而協(xié)調(diào)功過。(注意Object類中的wait(),notify(),notifyAll()方法)。

      Java數(shù)組的堆實(shí)現(xiàn):數(shù)組也擁有一個和他們的類相關(guān)聯(lián)的Class實(shí)例,具有相同dimension和type的數(shù)組是同一個類的實(shí)例。數(shù)組類名的表示:如[[Ljava/lang/Object 表示Object[][],[I表示int[],[[[B表示byte[][][]

      至此,堆已大致介紹完畢,下面來介紹程序計(jì)數(shù)器和java棧

      程序計(jì)數(shù)器:為每個線程獨(dú)有,在線程啟動時創(chuàng)建,若thread執(zhí)行java方法,則PC保存下一條執(zhí)行指令的地址。

      若thread執(zhí)行native方法,則Pc的值為undefined

      Java棧:java棧以幀為單位保存線程的運(yùn)行狀態(tài),java棧只有兩種操作,幀的壓棧和出棧。

      每個幀代表一個方法,java方法有兩種返回方式,return和拋出異常,兩種方式都會導(dǎo)致該方法對應(yīng)的幀出棧和釋放內(nèi)存。

      幀的組成:局部變量區(qū)(包括方法參數(shù)和局部變量,對于instance方法,還要首先保存this類型,其中方法參數(shù)按照聲明順序嚴(yán)格放置,局部變量可以任意放置),操作數(shù)棧,幀數(shù)據(jù)區(qū)(用來幫助支持常量池的解析,正常方法返回和異常處理)。

      本地方法棧:依賴于本地方法的實(shí)現(xiàn),如某個JVM實(shí)現(xiàn)的本地方法借口使用C連接模型,則本地方法棧就是C棧,可以說某線程在調(diào)用本地方法時,就進(jìn)入了一個不受JVM限制的領(lǐng)域,也就是JVM可以利用本地方法來動態(tài)擴(kuò)展本身。

      第二篇:Java讀書筆記

      讀書筆記

      1、類和對象:類是用來定義一組對象共同具有的狀態(tài)和行為的模版。而對象是現(xiàn)實(shí)世界中個體或事物的抽象表示,并且封裝了它們的屬性和行為。

      2、為了防止命名沖突,Java采用了管理類文件的機(jī)制,即類包機(jī)制。(package)定義包名的語法格式:

      “package包名;”

      Java命名規(guī)則要求包的命名需要使用小寫字母。

      3、成員變量和成員方法:

      1成員變量是在類體中定義的變量即全局變量,○成員變量一般用于定義對象的狀態(tài)。成員變量是給對象使用的,每個對象被創(chuàng)建后都會有屬于自己的屬性,即成員變量。通過修改這些屬性,從而改變對象的某個狀態(tài)。

      2成員方法是對象行為的描述。○

      定義成員方法的語法格式:

      “[修飾符] 返回值類型方法名([形參表]){

      ······//方法體

      }”

      修飾符:可以是:publicprivateprotactedstaticfinall等;

      返回值類型:如果方法需要返回值,必須這里聲明方法的返回值類型,可以是基

      本數(shù)據(jù)類型(int short double booleanvoid等),也可以是對象

      類型如:數(shù)組、字符串等。

      形參表:(可選部分)說明方法被調(diào)用時應(yīng)該向它傳遞的數(shù)據(jù)。形參表可以有一

      個也可以有多個,當(dāng)有多個形參時每個形參之間要用“,”隔開。

      1創(chuàng)建對象:創(chuàng)建對象使用到new語句。

      4、對象:○

      聲明并創(chuàng)建對象的語法格式如下:

      “類名對象名=new 類構(gòu)造方法()”

      構(gòu)造方法:構(gòu)造方法是類創(chuàng)建對象是必須執(zhí)行的方法,用于構(gòu)造一個新的對象并

      初始化對象屬性。

      2訪問對象的屬性: ○

      語法格式:

      “對象名.屬性”

      3執(zhí)行對象的行為:○對象的行為就是對象的成員方法,通常說調(diào)用或執(zhí)行對象的某個方法。

      語法格式:

      “對象名.成員方法名();”

      4對象的銷毀:Java提供了垃圾回收機(jī)制,對不再使用的對象會自動銷毀,也可○

      以在程序中顯式的為某個對象賦null值,使對象不再被使用。

      垃圾回收機(jī)制會找到并銷毀它,釋放該對象所占用的資源。

      語法格式:

      “對象名=null”

      1創(chuàng)建類:Java中使用class關(guān)鍵字來創(chuàng)建類。

      5、類:○

      聲明并創(chuàng)建類的語法格式:

      “權(quán)限修飾符 class類名{

      類體;

      }”

      權(quán)限修飾符:(可選項(xiàng))可以使用public protected private 或者省略這3者。類體主要由成員變量和方法兩部分組成。

      2成員變量:在Java中對象的屬性也稱為成員變量?!?/p>

      聲明并創(chuàng)建成員變量的語法格式:

      “權(quán)限修飾符數(shù)據(jù)類型成員變量名;”

      (用static關(guān)鍵字定義的成員變量被稱為靜態(tài)成員變量即類變量。靜態(tài)成員變量不是分配給每個對象的,而是屬于累的變量。它在內(nèi)存中是唯一的,可以直接使用“類名.成員變量名”的格式去訪問,他在內(nèi)存中的位置是固定的,是該類的所有實(shí)例對象所共享的存儲單元。)

      3成員方法:在Java語言中使用成員方法對應(yīng)與類對象的行為?!?/p>

      定義成員方法的語法格式:

      “權(quán)限修飾符返回值類型方法名(參數(shù)類型參數(shù)名){

      ·······//方法體

      }”

      (同類變量一樣,由static關(guān)鍵字定義的成員方法被稱為類方法,類方法可以不必創(chuàng)建對象而由類直接訪問,靜態(tài)方法不可以直接調(diào)用非靜態(tài)方法)4局部變量:○在方法體中聲明的變量為局部變量,局部變量的有效范圍為方法體結(jié)束。

      5this關(guān)鍵字:在Java語言中用this關(guān)鍵字來代表類對象的引用,this關(guān)鍵字被○

      隱式地用于引用對象的成員變量和方法。(在類方法中不可以使用this關(guān)鍵字。)this關(guān)鍵字和和對象都可以調(diào)用成員變量和方法,兩者的區(qū)別:

      事實(shí)上,this引用的就是本類的一個對象,在局部變量或方法參數(shù)覆蓋了成員變量時,就要添加this關(guān)鍵字明確引用的是類成員還是局部變量的方法參數(shù)。6類的構(gòu)造方法:構(gòu)造方法與類同名。○

      7類的主方法:主方法是類的入口點(diǎn),它定義了程序從何處開始;主方法提供對○

      程序流向的控制,Java編譯器通過主方法來執(zhí)行程序。

      1)主方法是靜態(tài)的,所以如果要直接在主方法體中

      調(diào)用其他方法,則該方法必須也是靜態(tài)的。

      2)主方法沒有返回值。

      3)主方法的形參為數(shù)組。其中args[0]~args[n]分別

      代表程序的第一個參數(shù)到第n個參數(shù),可以使用

      args.length獲取參數(shù)的個數(shù)。

      Java中完整的類聲明格式:

      “權(quán)限修飾符class類名{

      權(quán)限修飾符數(shù)據(jù)類型成員變量名1;

      權(quán)限修飾符數(shù)據(jù)類型成員變量名2;

      ·······

      權(quán)限修飾符數(shù)據(jù)類型成員變量名n;

      權(quán)限修飾符返回值類型成員方法名1(形參類型形參變量){ 方法體

      權(quán)限修飾符返回值類型成員方法名2(形參類型形參變量){ 方法體

      ······

      權(quán)限修飾符返回值類型成員方法名n(形參類型形參變量){ 方法體

      } }”

      6.由于類的主方法是靜態(tài)方法所以不可以調(diào)用類中的非靜態(tài)方法所以當(dāng)需要調(diào)用非靜態(tài)方法時必須創(chuàng)建對象來調(diào)用。在輸入不同類型的數(shù)據(jù)時要使用不同的Scanner類對象,否則只能實(shí)現(xiàn)輸入一種數(shù)據(jù)類型。

      7.abstract關(guān)鍵字是定義抽象類的關(guān)鍵字。使用abstract定義的發(fā)放成為抽象方法。抽象方法沒有方法體。抽象方法的唯一意義就是被重載。

      第三篇:高級java面試題

      高級java面試題

      來源:58.com 2013-09-23 17:15

      高級java面試題:

      第一,Anonymous Inner Class(匿名內(nèi)部類)是否可以繼承其它類,是否可以實(shí)現(xiàn)接口? 匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能繼承其它類,但可作為一個接口,由另一個內(nèi)部類實(shí)現(xiàn)。

      第二,談?wù)刦inal, finally, finalize的區(qū)別。

      final 如果一個類被聲明為final,意味著它不能再派生出新的子類,因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。

      finally 用來清除異常。如果拋出一個異常,那么相匹配的 catch 子句就會執(zhí)行,然后控制就會進(jìn)入 finally 塊(如果有的話)。

      finalize()在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。它是在 Object 類中定義的,因此所有的類都繼承了它。

      第三,Static Nested Class 和 Inner Class的不同。

      Nested Class(一般是C++的說法),Inner Class(一般是JAVA的說法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。

      注:靜態(tài)內(nèi)部類(Inner Class)意味著:創(chuàng)建一個static內(nèi)部類的對象不能從一個static內(nèi)部類的一個對象訪問一個外部類對象

      第四,&和&&的區(qū)別。

      &是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。

      第五,HashMap和Hashtable的區(qū)別。

      都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。

      HashMap 類 允許一個 null 鍵和多個 null 值。

      Hashtable 類 不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹5诹?,Collection 和 Collections的區(qū)別。

      Collections是個java.util下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。Collection是個java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。

      第七,什么時候用assert。

      斷言是一個包含布爾表達(dá)式的語句,在執(zhí)行這個語句時假定該表達(dá)式為 true。如果表達(dá)式計(jì)算為 false,那么系統(tǒng)會報(bào)告一個 AssertionError。

      示例:

      assert(a > 0);// throws an AssertionError if a <= 0

      斷言可以有兩種形式:

      assert Expression1;

      assert Expression1 : Expression2;

      Expression1 應(yīng)該總是產(chǎn)生一個布爾值。

      Expression2 可以是得出一個值的任意表達(dá)式。這個值用于生成顯示更多調(diào)試信息的 String 消息。

      斷言在默認(rèn)情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標(biāo)記: javac-source 1.4 Test.java

      要在運(yùn)行時啟用斷言,可使用-enableassertions 或者-ea 標(biāo)記。

      要在運(yùn)行時選擇禁用斷言,可使用-da 或者-disableassertions 標(biāo)記。

      要系統(tǒng)類中啟用斷言,可使用-esa 或者-dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。

      可以在預(yù)計(jì)正常情況下不會到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過,斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌?,公有方法都必須檢查其

      參數(shù)。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。

      第八,GC是什么? 為什么要有GC?

      GC是垃圾收集器。Java 程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿詣舆M(jìn)行管理。要請求垃圾收集,可以調(diào)用下面的方法之一:

      System.gc()

      Runtime.getRuntime().gc()

      第九,String s = new String(“xyz”);創(chuàng)建了幾個String Object?

      兩個對象,一個是String類型的“xyx”,一個是指向“xyx”的引用對象s。

      第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

      Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

      第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

      都不能

      第二十二,接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類(concrete class)?

      接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。

      第二十三,啟動一個線程是用run()還是start()?

      啟動一個線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。

      這并不意味著線程就會立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個線程。個人猜測,可能是以下結(jié)構(gòu):

      run(){

      myThread.start();

      ······

      }

      第二十四,構(gòu)造器Constructor是否可被override?

      構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。第二十五,是否可以繼承String類?

      String類是final類故不可以繼承。

      第二十六,當(dāng)一個線程進(jìn)入一個對象的一個synchronized方法后,其它線程是否可進(jìn)入此對象的其它方法?

      不能,一個對象的一個synchronized方法只能由一個線程訪問。

      第二十七,try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?

      會執(zhí)行,在return前執(zhí)行。

      第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?

      有C背景的程序員特別喜歡問這種問題。

      第二十九,兩個對象值相同(x.equals(y)== true),但卻可有不同的hash code,這句話對不對?

      不對,有相同的hash code。

      第三十,當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?

      是值傳遞。Java 編程語言只有值傳遞。當(dāng)一個對象實(shí)例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠(yuǎn)不會改變的。

      第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

      switch(expr1)中,expr1是一個整數(shù)表達(dá)式。因此傳遞給 switch 和 case 語句的參數(shù)應(yīng)該是 int、short、char 或者byte。long,string 都不能作用于swtich。

      第三十二,編程題: 寫一個Singleton出來。

      Singleton模式主要作用是保證在Java應(yīng)用程序中,一個類Class只有一個實(shí)例存在。一般Singleton模式通常有幾種種形式:

      第一種形式: 定義一個類,它的構(gòu)造函數(shù)為private的,它有一個static的private的該類變量,在類初始化時實(shí)例話,通過一個public的getInstance方法獲取對它的引用,繼而調(diào)用其中的方法。

      public class Singleton {

      private Singleton(){}

      //在自己內(nèi)部定義自己一個實(shí)例,是不是很奇怪?

      //注意這是private 只供內(nèi)部調(diào)用

      private static Singleton instance = new Singleton();

      //這里提供了一個供外部訪問本class的靜態(tài)方法,可以直接訪問

      public static Singleton getInstance(){

      return instance;

      }

      }

      第二種形式:

      public class Singleton {

      private static Singleton instance = null;

      public static synchronized Singleton getInstance(){

      //這個方法比上面有所改進(jìn),不用每次都進(jìn)行生成對象,只是第一次

      //使用時生成實(shí)例,提高了效率!

      if(instance==null)

      instance=new Singleton();return instance;} }

      第四篇:java高級編程教學(xué)大綱

      《Java高級編程》教學(xué)大綱

      鄭州大學(xué)軟件技術(shù)學(xué)院

      一、課程的性質(zhì)與任務(wù)

      本課程是軟件開發(fā)專業(yè)開設(shè)的程序設(shè)計(jì)類高級課程,學(xué)生在學(xué)習(xí)了《程序設(shè)計(jì)導(dǎo)論》,初步具備了一定的程序以介紹面向?qū)ο缶幊痰幕靖拍?、基本理論為重點(diǎn),結(jié)合Java語言的語法規(guī)則、編程特點(diǎn)和設(shè)計(jì)思想、強(qiáng)調(diào)容易發(fā)生錯誤和編程應(yīng)注意的地方,使學(xué)生能對Java技術(shù)有一個總體了解,通過本課程學(xué)習(xí),使學(xué)生掌握J(rèn)ava語言的基礎(chǔ)知識,理解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想,熟練地使用Java語言進(jìn)行程序的編寫、編譯以及調(diào)試工作設(shè)計(jì)基本理念后才可學(xué)習(xí)本課程。本課程將教給學(xué)生如何利用Java這一有力工具進(jìn)行程序設(shè)計(jì),如程序邏輯、用戶界面、數(shù)據(jù)處理、多媒體編程方法、網(wǎng)絡(luò)通訊軟件開發(fā)等。由于教材采用弱化語法,深入淺出的表達(dá)方式,使得學(xué)生將主要的注意力放在用軟件實(shí)現(xiàn)實(shí)際問題上,而不是放在程序設(shè)計(jì)語言這一載體上。

      二、教學(xué)基本要求

      (講課學(xué)時:68;實(shí)訓(xùn)學(xué)時:32)

      1、Java概述

      ? 了解Java 語言的發(fā)展和特點(diǎn) ? 了解Java 語言的工作機(jī)制

      ? 掌握J(rèn)Builder9.0開發(fā)工具的安裝和簡單使用 ? 了解面向?qū)ο蟪绦蛟O(shè)計(jì)的理念 ? Java應(yīng)用程序及小程序舉例

      2、Java語言基礎(chǔ)

      ? 熟悉Java語言的標(biāo)識符、基本數(shù)據(jù)類型

      ? 熟悉Java語言的運(yùn)算符、表達(dá)式、運(yùn)算優(yōu)先級等。? 了解Java語言的包裝類

      ? 熟練掌握if—else語句和 switch語句。

      ? 熟練運(yùn)用Java語言的分支結(jié)構(gòu)進(jìn)行簡單的程序設(shè)計(jì)。? 熟練掌握while語句、do—while語句和for 語句。? 熟練運(yùn)用循環(huán)流程控制語句進(jìn)行簡單的程序設(shè)計(jì)。? 基本掌握循環(huán)嵌套的使用。? 初步掌握break、continue、return語句。? 能夠初步掌握方法、異常處理的程序設(shè)計(jì)技術(shù)。

      ? 了解面向過程的編程方法的局限性,了解面向?qū)ο蟮木幊痰幕拘g(shù)語、基本特性等。

      ? 掌握類的定義與對象的生成。? 掌握構(gòu)造方法的特點(diǎn)、作用。? 初步掌握類和成員的修飾符。? 初步掌握類繼承的實(shí)現(xiàn)方式。? 了解抽象類和抽象方法 ? 了解接口的定義和實(shí)現(xiàn)方法 ? 了解接口的繼承和多態(tài) ? 了解包的創(chuàng)建及其使用方法

      3、Java Applet程序設(shè)計(jì)

      ? 了解Java Applet的特點(diǎn)和運(yùn)行機(jī)制。

      ? 了解HTML語言,熟悉如何在HTML文件中嵌入Applet。? 了解Applet的類層次及框架結(jié)構(gòu)。? 初步掌握Applet的主要方法及生命周期。? AWT繪制基礎(chǔ)。? 掌握應(yīng)用字體的方法。? 掌握應(yīng)用顏色的方法。? 掌握繪制簡單圖形的方法。

      4、圖形界面設(shè)計(jì)

      ? 熟練掌握基本組件的使用 ? 掌握高級組件的使用 ? 掌握面板和布局控制

      ? 掌握窗口、菜單和對話框的使用 ? 會進(jìn)行一般的圖形界面設(shè)計(jì)

      5、輸入輸出設(shè)計(jì)

      ? 理解基本I/O流 ? 了解文件I/O流 ? 了解字節(jié)流 ? 了解字符流

      ? 會進(jìn)行稍微復(fù)雜的I/O設(shè)計(jì)

      6、多線程 ? 理解多線程的概念 ? 掌握線程的生命周期

      ? 會用多線程編寫較為靈活的程序

      以介紹面向?qū)ο缶幊痰幕靖拍?、基本理論為重點(diǎn),結(jié)合Java語言的語法規(guī)則、編程特點(diǎn)和設(shè)計(jì)思想、強(qiáng)調(diào)容易發(fā)生錯誤和編程應(yīng)注意的地方,使學(xué)生能對Java技術(shù)有一個總體了解,通過本課程學(xué)習(xí),使學(xué)生掌握J(rèn)ava語言的基礎(chǔ)知識,理解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想,熟練地使用Java語言進(jìn)行程序的編寫、編譯以及調(diào)試工作

      7、多媒體程序設(shè)計(jì)

      ? 了解java多媒體框架 ? 掌握音頻開發(fā)的方法 ? 了解視頻開發(fā)

      8、數(shù)據(jù)庫程序開發(fā)

      ? 掌握ODBC的概念 ? 掌握連接數(shù)據(jù)庫的方法 ? 了解操作數(shù)據(jù)庫的組件 ? 了解管理數(shù)據(jù)庫的方法

      9、網(wǎng)絡(luò)通訊

      ? 理解TCP/IP網(wǎng)絡(luò)通訊 ? 了解Java網(wǎng)絡(luò)類和接口 ? 了解面向連接的套接字通訊 ? 了解無連接的數(shù)據(jù)報(bào)通訊

      ? 以介紹面向?qū)ο缶幊痰幕靖拍?、基本理論為重點(diǎn),結(jié)合Java語言的語法規(guī)則、編程特點(diǎn)和設(shè)計(jì)思想、強(qiáng)調(diào)容易發(fā)生錯誤和編程應(yīng)注意的地方,使學(xué)生能對Java技術(shù)有一個總體了解,通過本課程學(xué)習(xí),使學(xué)生掌握J(rèn)ava語言的基礎(chǔ)知識,理解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想,熟練地使用Java語言進(jìn)行程序的編寫、編譯以及調(diào)試工作

      ? 文章由北大青鳥.嘉華教育(深圳大學(xué)實(shí)訓(xùn)基地&北大青鳥全國三甲校區(qū)):004km.cn 深圳權(quán)威IT培訓(xùn)學(xué)校,歡迎課程咨詢交流QQ:100236036

      第五篇:如何成為高級Java程序員

      如何成為高級Java程序員

      給一個剛出社會的程序員新生一個建議,想成為一個優(yōu)秀的程序員,高級程序員,不能眼高手低,不能認(rèn)為開發(fā)新項(xiàng)目,技術(shù)研發(fā)才學(xué)到東西,不能看不起維護(hù)系統(tǒng),不要以為自己懂的技術(shù)越多自認(rèn)為自己很牛叉。假如你忽略了一個問題那么你永遠(yuǎn)成為不了優(yōu)秀的程序員、高級程序員,那就是系統(tǒng)優(yōu)化。

      一、JAVA。要想成為JAVA(高級)工程師肯定要學(xué)習(xí)JAVA。一般的程序員或許只需知道一些JAVA的語法結(jié)構(gòu)就可以應(yīng)付了。但要成為JAVA(高級)工程師,您要對JAVA做比較深入的研究。您應(yīng)該多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、線程。如果可能,希望您對JAVA的所有包都瀏覽一下,知道大概的API,這樣您就發(fā)現(xiàn)其實(shí)您想實(shí)現(xiàn)的很多功能,通過JAVA的API都可以實(shí)現(xiàn)了,就不必自己費(fèi)太多的腦經(jīng)了。

      二、設(shè)計(jì)模式。其實(shí)寫代碼是很容易的事情,我相信您也有同感。但如何寫得好就比較難了。這個“好”字包括代碼可重用性,可維護(hù)性,可擴(kuò)展性等。如何寫出好的代碼往往要借助一些設(shè)計(jì)模式。當(dāng)然長期的代碼經(jīng)驗(yàn)積累,只要您用心,會使您形成自己代碼風(fēng)格。相信您的代碼也比較符合代碼的可重用性,可維護(hù)性,可擴(kuò)展性。但既然前人已經(jīng)給我們總結(jié)出了經(jīng)驗(yàn),我們何不踩著前人的肩膀前進(jìn)?

      三、XML?,F(xiàn)在的系統(tǒng)中不使用XML幾乎是不可能的。XML的功能非常強(qiáng)大,它可以做數(shù)據(jù)轉(zhuǎn)換、做系統(tǒng)的配置、甚至可保存您的系統(tǒng)業(yè)務(wù)數(shù)據(jù)。因此您必須了解XML,包括它的語法,結(jié)構(gòu)。您還需要比較熟練的使用解析XML的一些API,比如JDOM,SAX等,因?yàn)樵谖覀円话愕捻?xiàng)目中,XML往往擔(dān)當(dāng)系統(tǒng)配置信息的作用,您需要用這些API解析這些配置信息,開發(fā)完美的項(xiàng)目。

      四、精通使用一種或兩種框架。像在《如何成為java初級程序員》中提到的那樣,“框架都會有許多可重用的代碼,良好的層次關(guān)系和業(yè)務(wù)控制邏輯,基于框架的開發(fā)使你可以省出很多的開發(fā)成本”。但我這里希望您能精通,更多的是希望您能通過框架的使用了解框架的思想。這樣您在開發(fā)一個項(xiàng)目時思路會開闊一些,比如您會想到把SQL語句與您的java代碼分開,再比如您會考慮把您的業(yè)務(wù)邏輯配置到XML或者數(shù)據(jù)庫中,這樣整個項(xiàng)目就很容易擴(kuò)張了。

      五、熟悉主流數(shù)據(jù)庫。其實(shí)真正比較大的項(xiàng)目都是有人專門做數(shù)據(jù)庫的,但往往很多項(xiàng)目要求作為(高級)工程師的您也參與數(shù)據(jù)庫的設(shè)計(jì)以及SQL的編寫。所以為了更好的為國家做貢獻(xiàn),建議您還是多了解一些主流數(shù)據(jù)庫,比如SQLSERVER,ORACLE,多連接SQL和存儲過程以及觸發(fā)器。如果您不是“科班”出身,您還需要補(bǔ)充一些數(shù)據(jù)庫原理方面的知識。

      六、精通一種或兩種WEBServer。盡管我再《如何成為java初級程序員》里講過它,我還是要強(qiáng)調(diào)您要精通一種或兩種。因?yàn)樽鳛閖ava工程師,特別時想成為高級JAVA工程師的您,您不可避免地要部署您的項(xiàng)目到WebServer上,而且只有當(dāng)您精通一種WebServer,您才可能最大限度地使用它的資源,這往往可以節(jié)省很多時間和精力。

      七、UML。我知道您肯定想成為高級工程師,因此您有必要了解或熟練或精通UML,這取決于您有多大決心想成為高級工程師和項(xiàng)目經(jīng)理。在比較正規(guī)的開發(fā)團(tuán)隊(duì)中,UML是討論項(xiàng)目的交流工具,您要想做一個軟件工程師,您至少要能看懂,您要想做高級工程師,您要能通過它來描述您對項(xiàng)目的理解,盡管這不是必須,但卻很重要。

      八、站在高度分析問題:這不是一個知識點(diǎn),也不是通過書本就能學(xué)得到的。只所以提到這一點(diǎn),是因?yàn)槲冶饶€著急,我希望您更快的成為一個高級的軟件工程師,而不是一個一般的軟件工程師。希望您在工作中多向您的系統(tǒng)分析員、需求分析員、系統(tǒng)設(shè)計(jì)員學(xué)習(xí),多站在他們角度上去看您在開發(fā)的項(xiàng)目。在最好在項(xiàng)目之初先在您的腦海里對項(xiàng)目有個大致的分析、設(shè)計(jì),然后和他們進(jìn)行比較,找找差別,想想缺點(diǎn)。

      九、工具。與在《如何成為java初級程序員》里提到的不同,您在這個階段可能接觸到不同的工具了,盡管您還需要使用JB或者IDEA,但能可能對ROSE,Together要多了解一些,因?yàn)槟婾ML了。不要再對Dreamweaver等HTML編輯器情有獨(dú)鐘了,那些JSP頁面讓初級程序員去寫吧。

      1、具有1-5工作經(jīng)驗(yàn)的,面對目前流行的技術(shù)不知從何下手,需要突破技術(shù)瓶頸的可以加群。

      下載java高級Inside_JVM讀書筆記word格式文檔
      下載java高級Inside_JVM讀書筆記.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        讀書筆記(高級財(cái)務(wù)管理)

        讀書筆記 姓名:姚娟萍學(xué)號:2011516171 閱讀材料: 1.《企業(yè)社會責(zé)任研究》——劉新民 2.《論利益相關(guān)者利益最大化財(cái)務(wù)目標(biāo)》——陳瑋 3.《紅領(lǐng)巾還是綠領(lǐng)巾—民營企業(yè)慈善捐贈......

        高級微觀經(jīng)濟(jì)學(xué)讀書筆記

        高微讀書筆記經(jīng)濟(jì)學(xué)的發(fā)展經(jīng)歷了漫長的歷史過程,這里,我們不必嚴(yán)格地按照標(biāo)準(zhǔn)的經(jīng)濟(jì)思想史或經(jīng)濟(jì)史理論的講法,追溯到古希臘的色諾芬。只需以人們公認(rèn)的1776年為里程碑,亞當(dāng)·斯......

        Java編程思想讀書筆記

        這是一份試圖提綱挈領(lǐng)的讀書筆記,《java編程思想》這本八百多頁的書娓娓道來地包含了太多細(xì)節(jié),這對讀者是非常貼心的,我也強(qiáng)烈建議細(xì)細(xì)讀這本書,如果你希望在短時間內(nèi)學(xué)會java這......

        JAVA高級程序員招聘考題

        姓名:日期:時間: 1.請問您在開發(fā)中或?qū)W習(xí)中運(yùn)用過哪些架構(gòu)(struts,hibernate,spring,webwork,xword等), 請談?wù)勀鷮λ褂玫募軜?gòu)的理解及使用心得? 2.請問您是否用JAVA開發(fā)過web se......

        高級JAVA、PHP程序員崗位職責(zé)

        1.負(fù)責(zé)公產(chǎn)品軟件設(shè)計(jì)、開發(fā)、測試和維護(hù)工作,主要為C++、java、php。2.負(fù)責(zé)任務(wù)的質(zhì)量和完整性,包含故障分析、解決、修復(fù),一般文檔編制。3.發(fā)現(xiàn)和指出項(xiàng)目或計(jì)劃中的設(shè)計(jì)問......

        JAVA高級軟件開發(fā)工程師崗位職責(zé)(推薦)

        1.參與項(xiàng)目的需求分析,負(fù)責(zé)項(xiàng)目的架構(gòu)設(shè)計(jì)、模塊設(shè)計(jì)和開發(fā)。2.負(fù)責(zé)指導(dǎo)軟件工程師詳細(xì)設(shè)計(jì)和開發(fā)。3.負(fù)責(zé)解決項(xiàng)目中的技術(shù)難點(diǎn)和技術(shù)把關(guān)。4.協(xié)助項(xiàng)目經(jīng)理做好項(xiàng)目管理。......

        高級Java軟件工程師崗位職責(zé)

        1.協(xié)助需求分析師進(jìn)行可行性分析,協(xié)助測試人員完成測試。2.按照需求分析師以及本公司架構(gòu)的要求,完成代碼的編寫工作。3.研究新技術(shù),并能與其他團(tuán)隊(duì)成員共享新發(fā)現(xiàn)。......

        讀書筆記《Java郵件開發(fā)詳解》

        讀書筆記《Java郵件開發(fā)詳解》 DNS MX自動回復(fù) 不填from 避免循環(huán)回復(fù)。Pop3:可以查郵件總數(shù)、已占空間。電子郵件的RFC822格式: Return-Path:代表郵件的回復(fù)地址,該字段的內(nèi)容......