1. 程式人生 > 實用技巧 >知識點筆記一

知識點筆記一

1.java特新和優勢

  • 簡單性
  • 面向物件
  • 可移植性(一次編譯,到處執行)
  • 高效能
  • 分散式
  • 動態性 (反射)
  • 多執行緒
  • 安全性
  • 健壯性

2.java的三大版本

Java2平臺包括標準版(J2SE)、企業版(J2EE)和微縮版(J2ME)三個版本:

Standard Edition(標準版) J2SE 包含那些構成Java語言核心的類。
比如:資料庫連線、介面定義、輸入/輸出、網路程式設計

Enterprise Edition(企業版) J2EE 包含J2SE 中的類,並且還包含用於開發企業級應用的類。 比如servlet、JSP、XML、事務控制
Micro Edition(微縮版) J2ME 包含J2SE中一部分類,用於消費類電子產品的軟體開發。 比如:呼機、智慧卡、手機、PDA、機頂盒
他們的範圍是:


J2SE包含於J2EE中,J2ME包含了J2SE的核心類,但新添加了一些專有類應用場合,API的覆蓋範圍各不相同

3.什麼是JVM?什麼是JDK? 什麼是JRE?

Jvm:

JVM是Java Virtual Machine(Java虛擬機器)的縮寫,它是整個Java實現跨平臺的最核心的部分,所有的java程式會首 先被編譯為.class的類檔案,這種類檔案可以在虛擬機器上執行,也就是說class並不直接與機器的作業系統相對應,而 是經過虛擬機器間接與作業系統互動,由虛擬機器將程式解釋給本地系統執行。JVM是Java平臺的基礎,和實際的機器一 樣,它也有自己的指令集,並且在執行時操作不同的記憶體區域。 JVM通過抽象作業系統和CPU結構,提供了一種與平 臺無關的程式碼執行方法,即與特殊的實現方法、主機硬體、主機作業系統無關。JVM的主要工作是解釋自己的指令集 (即位元組碼)到CPU的指令集或對應的系統呼叫,保護使用者免被惡意程式騷擾。 JVM對上層的Java原始檔是不關心 的,它關注的只是由原始檔生成的類檔案(.class檔案)。

JRE:

JRE是java runtime environment(java執行環境)的縮寫。光有JVM還不能讓class檔案執行,因為在解釋class的時候 JVM需要呼叫解釋所需要的類庫lib。在JDK的安裝目錄裡你可以找到jre目錄,裡面有兩個資料夾bin和lib,在這裡可以 認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和lib和起來就稱為jre。所以,在你寫完java程式編譯 成.class之後,你可以把這個.class檔案和jre一起打包發給朋友,這樣你的朋友就可以執行你寫程式了(jre裡有運 行.class的java.exe)。JRE是Sun公司釋出的一個更大的系統,它裡面就有一個JVM。JRE就與具體的CPU結構和操作 系統有關,是執行Java程式必不可少的(除非用其他一些編譯環境編譯成.exe可執行檔案……),JRE的地位就象一臺 PC機一樣,我們寫好的Win32應用程式需要作業系統幫我們執行,同樣的,我們編寫的Java程式也必須要JRE才能運 行。

JDK:

JDK是java development kit(java開發工具包)的縮寫。每個學java的人都會先在機器上裝一個JDK,那 讓我們看一 下JDK的安裝目錄。在目錄下面有六個資料夾、一個src類庫原始碼壓縮包、和其他幾個宣告檔案。其中,真正在執行 java時起作用的是以下四個資料夾:bin、include、lib、jre。現在我們可以看出這樣一個關係,JDK包含JRE,而JRE 包含JVM。

bin: 最主要的是編譯器(javac.exe)

include: java和JVM互動用的標頭檔案

lib:類庫

jre: java執行環境

總的來說JDK是用於java程式的開發,而jre則是隻能執行class而沒有編譯的功能。eclipse、idea等其他IDE有自己的編 譯器而不是用JDK bin目錄中自帶的,所以在安裝時你會發現他們只要求你選jre路徑就ok了。

JDK,JRE,JVM三者關係概括如下:

jdk是JAVA程式開發時用的開發工具包,其內部也有JRE執行環境JRE。JRE是JAVA程式執行時需要的執行環境,就是說 如果你光是執行JAVA程式而不是去搞開發的話,只安裝JRE就能執行已經存在的JAVA程式了。JDk、JRE內部都包含 JAVA虛擬機器JVM,JAVA虛擬機器內部包含許多應用程式的類的直譯器和類載入器等等。

4.java註釋型別

共有單行註釋、多行註釋、文件註釋3種註釋型別。

單行註釋:

//單行註釋,只能註釋一行程式碼

多行註釋:

/*
System.out.println("a");
System.out.println("b");
System.out.println("c");
*/

文字註釋:

/**
* @author 作者
* @descripted 描述
* @version 版本
* @param 變數
*/

5.八種基本資料型別及其位元組數

浮點型:float:有限 離散 舍入誤差 大約 接近但不等於

最好完全避免使用浮點數進行比較 用BigDecimal類比較

字元型:char

所有的字元本質還是數字,由於Unicode編碼採用無符號編碼,可以儲存65536個字元(0x0000~0xffff)所以java中的字元幾乎可以處理所有國家的語言文字

6.基本資料型別的型別轉換規則

基本型別轉換分為自動轉換和強制轉換。

自動轉換規則: 低階-->高階

容量小的資料型別 可以自動轉換成容量大的資料型別,也可以說低階自動向高階轉換。這兒的容量指的不是位元組 數,而是指型別表述的範圍。

強制轉換規則: 高階-->低階

(1)賦值運算子“=”右邊的轉換,先自動轉換成表示式中級別最高的資料型別,再進行運算。

(2)賦值運算子“=”兩側的轉換,若左邊級別>右邊級別,會自動轉換;若左邊級別 == 右邊級別,不用轉換;若左 邊級別 < 右邊級別, 需強制轉換。

(3)可以將整型常量直接賦值給byte, short, char等型別變數,而不需要進行強制型別轉換,前提是不超出其表述 範圍,否則必須進行 強制轉換

注意:

1.boolean型的值不能被轉換為其他資料型別

2.不能把物件型別轉化為不相干的型別

2.轉換的時候可能存在記憶體溢位,還有精度問題

7.i++和++i的異同之處

共同點:

1、i++和++i都是變數自增1,都等價於i=i+1

2、如果i++,++i是一條單獨的語句,兩者沒有任何區別

3、i++和++i的使用僅僅針對變數。 5++和++5會報錯,因為5不是變數。

不同點:

i++:先運算後增加1

++i:先增加1後運算

8.&和&& , |和|| 的區別和聯絡

&和&&的聯絡(共同點):

&和&&都可以用作邏輯與運算子,但是要看使用時的具體條件來決定。

&和&&的區別(不同點):

1、& 稱為邏輯與運算子,&& 稱為短路與運算子,也可叫邏輯與運算子

​ 對於&:無論任何情況,&兩邊的運算元或表示式都會參與計算。

​ 對於&&:當&&左邊的運算元為false或左邊表示式結果為false時,&&右邊的運算元或表示式將不參與計算,此時最 終結果都為false。

​ 綜上所述,如果邏輯與運算的第一個運算元是false或第一個表示式的結果為false時,對於第二個運算元或表示式是 否進行運算,對最終的結果沒有影響,結果肯定是false。推介平時多使用&&,因為它效率更高些。

2、 &還可以用作位運算子。當&兩邊運算元或兩邊表示式的結果不是boolean型別時,&用於按位與運算子的操作。

|和||的區別和聯絡與&和&&的區別和聯絡類似

9.Java生成Doc文件

1.通過命令列 javadoc -encoding UTF-8 -charset UTF-8 java檔案

2.idea中提供了很好的 JavaDoc 生成功能 https://zhuanlan.zhihu.com/p/113429876

10.if和switch的異同之處

相同之處:

都是分支語句,多超過一種的情況進行判斷處理。

不同之處:

switch更適合用於多分支情況,就是有很多種情況需要判斷處理,判斷條件型別單一,只有一個入口,在分支執行完 後(如果沒有break跳出),不加判斷地執行下去; 而if—elseif---else多分枝主要適用於分支較少的分支結構,判斷類 型不是單一,只要一個分支被執行後,後邊的分支不再執行。

switch為等值判斷(不允許比如>= <=),而if為等值和區間都可以,if的使用範圍大。

11.while和do-while迴圈的區別

while先判斷後執行,第一次判斷為false , 迴圈體一次都不執行。

do while先執行 後判斷,最少執行1次。

如果while迴圈第一次判斷為true, 則兩種迴圈沒有區別。

12.break和continue的作用

break: 結束當前迴圈並退出當前迴圈體。break還可以退出switch語句

continue: 迴圈體中後續的語句不執行,但是迴圈沒有結束,繼續進行迴圈條件的判斷(for迴圈還會i++)。

continue只是結束本次迴圈。