20) ? false:true"> java常見面試題及答案 1-10(JVM) 2018-01-16 23:50:00
Java 虛拟機是一個可以執行 Java 位元組碼的虛拟機程序。Java 源檔案被編譯成能被 Java 虛拟機執行的位元組碼檔案。 Java 被設計成允許應用程式可以運作在任意的平台,而不需要程式員為每一個平台單獨重寫或者是重新編譯。 Java 虛拟機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。 java常見面試題及答案 1-10(JVM) JDK: java開發工具包,包含了JRE、編譯器和其它工具(如:javaDOc、java調試器) JRE: java運作環境,包含java虛拟機和java程式所需的核心類庫。 如果隻是想跑java程式,那麼隻需安裝JRE,如果要寫java程式并且運作,那就需要JDK了。 如果一個類的變量或者方法前面有static修飾,那麼表明這個方法或者變量屬于這個類,也就是說可以在不建立對象的情況下直接使用 當父類的方法被private修飾時,表明該方法為父類私有,對其他任何類都是不可見的,是以如果子類定了一個與父類一樣的方法,這對于子類來說相當于是一個新的私有方法,且如果要進行向上轉型,然後去調用該“覆寫方法”,會産生編譯錯誤 static方法時編譯時靜态綁定的,屬于類,而覆寫是運作時動态綁定的(動态綁定的多态),是以不能覆寫. java支援的基本資料類型有以下9種:byte,shot,int,long,float,double,char,boolean,void. 自動拆裝箱是java從jdk1.5引用,目的是将原始類型自動的裝換為相對應的對象,也可以逆向進行,即拆箱。這也展現java中一切皆對象的宗旨。 所謂自動裝箱就是将原始類型自動的轉換為對應的對象,而拆箱就是将對象類型轉換為基本類型。java中的自動拆裝箱通常發生在變量指派的過程中,如: 在java中,應該注意自動拆裝箱,因為有時可能因為java自動裝箱機制,而導緻建立了許多對象,對于記憶體小的平台會造成壓力。 覆寫也叫重寫,發生在子類與父類之間,表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類建立的執行個體對象調用這個方法時,将調用子類中的定義方法,這相當于把父類中定義的那個完全相同的方法給覆寫了,這也是面向對象程式設計的多态性的一種表現。 重載是指在一個類中,可以有多個相同名稱的方法,但是他們的參數清單的個數或類型不同,當調用該方法時,根據傳遞的參數類型調用對應參數清單的方法。當參數清單相同但傳回值不同時,将會出現編譯錯誤,這并不是重載,因為jvm無法根據傳回值類型來判斷應該調用哪個方法。 在java中是單繼承的,也就是說一個類隻能繼承一個父類。 java中實作多繼承有兩種方式,一是接口,而是内部類. 值傳遞 就是在方法調用的時候,實參是将自己的一份拷貝賦給形參,在方法内,對該參數值的修改不影響原來實參,常見的例子就是剛開始學習c語言的時候那個交換方法的例子了。 引用傳遞 是在方法調用的時候,實參将自己的位址傳遞給形參,此時方法内對該參數值的改變,就是對該實參的實際操作。 在java中隻有一種傳遞方式,那就是值傳遞.可能比較讓人迷惑的就是java中的對象傳遞時,對形參的改變依然會意向到該對象的内容。 下面這個例子來說明java中是值傳遞. 在上面這個例子中,目前輸出結果為:hello world。這并沒有什麼問題,可能就是大家平常所了解的引用傳遞,那麼當然會改變StringBuffer的内容。但是如果把上面的注釋去掉,那麼就會輸出:hello.此時sb的值并沒有變成ha hello. 假如說是引用傳遞的話,那麼形參的s也就是sb的位址,此時在方法裡new StringBuffer(),并将該對象賦給s,也就是說s現在指向了這個新建立的對象.按照引用傳遞的說法,此時對s的改變就是對sb的操作,也就是說sb應該也指向新建立的對象,那麼輸出的結果應該為ha world.但實際上輸出的僅是hello.這說明sb指向的還是原來的對象,而形參s指向的才是建立的對象,這也就驗證了java中的對象傳遞也是值傳遞。 不同點在于: 接口中所有的方法隐含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。 類可以實作很多個接口,但是隻能繼承一個抽象類 類如果要實作一個接口,它必須要實作接口聲明的所有方法。但是,類可以不實作抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。 抽象類可以在不提供接口方法實作的情況下實作接口。 Java 接口中聲明的變量預設都是 final 的。抽象類可以包含非 final 的變量。 Java 接口中的成員函數預設是 public 的。抽象類的成員函數可以是 private,protected 或者是 public 。 接口是絕對抽象的,不可以被執行個體化(java 8已支援在接口中實作預設的方法)。抽象類也不可以被執行個體化,但是,如果它包含 main 方法的話是可以被調用的。 構造方法是不能被子類重寫的,但是構造方法可以重載,也就是說一個類可以有多個構造方法。 Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法傳回與參數 最接近的長整數,參數加 1/2 後求其 floor. tring 的長度是不可變的; StringBuffer的長度是可變的,如果你對字元串中的内容經常進行操作,特别是内容要修改時,那麼使用 StringBuffer,如果最後需要 >String,那麼使用 StringBuffer 的 toString() 方法;線程安全; StringBuilder 是從 JDK 5 開始,為StringBuffer該類補充了一個單個線程使用的等價類;通常應該優先使用 StringBuilder 類,因>為它支援所有相同的操作,但由于它不執行同步,是以速度更快。 使用字元串的時候要特别小心,如果對一個字元串要經常改變的話,就一定不要用String,否則會建立許多無用的對象出來. 來看一下比較 這個時候s有多個字元串進行拼接,按理來說會有多個對象産生,但是jvm會對此進行一個優化,也就是說隻建立了一個對象,此時它的執行速度要比StringBuffer拼接快.再看下面這個: 上面這種情況,就會多建立出來三個對象,造成了記憶體空間的浪費.
100) ? false:true" x-data="topBtn" @click="scrolltoTop" x-cloak>