JAVA介紹
javaSE:標準版 -------------------------桌面開發
javaME:微型版-------------------------移動電子設備
javaEE:企業級應用版-------------------企業級開發(企業管理系統等)
JDK工具
jdk是java語言的軟件開發工具
bin文件夾:存放java運行的各種可執行文件
jre文件:存放java的運行環境
include文件:用於編譯本地方法的文件
lib文件:存放java的核心類庫
src.zip:改文件是java的核心源碼包,它在JDK安裝的根目錄下。
JVM、JRE和JDK區別什麼?
(1)JVM(Java Virtual Machine):java虛擬機,用於保證java的跨平臺的特性。java語言跨平臺,jvm不是跨平臺的。
(2)JRE(Java Runtime Environment):java的運行環境,包括jvm+java的核心類庫。
(3)JDK(Java Development Kit):java的開發工具,包括jre+開發工具。
環境變量path和classpath的作用是什麼?
(1)path是配置Widows可執行文件的搜索路徑,即擴展名爲.exe的程序文件所在的目錄,用於指定DOS窗口命令的路徑。
(2)classpath是配置class文件所在的目錄,用於指定類的搜索路徑,JVM就是通過他來尋找該類的class類文件的。
java註釋
單行註釋------------------------//
多行註釋-----------------------/*>>>>>>>>>>>*/
文檔註釋-----------------------/**>>>>>>>>>>*/
基本注意事項
變量定義:在整個程序執行過程中值會發生改變的量
類:具有一組相同屬性和方法的集合
變量:變量名由字母、數字,下劃線,美元符號構成的,但是不能以數字開頭。
其他規範
變量:如果變量名由一個單詞組成,首字母要小寫,如果變量名同時由多個單詞組成,首字母小寫,從第二個單詞開始,首字母大寫。
1.首字母:字母,下劃線(_)或符號(不能含有空格,不能以數字開頭)
2,其他部分:數字,字母,下劃線,符號(不能含有空格,不能以數字開頭)
3.變量名不能是Java關鍵字(即保留字)
4.除了下劃線之外,不包括任何其他特殊字符
5.變量必須先聲明再使用
6.變量可以先聲明 後 賦值
7.同一個作用域中,變量名不能重複(不能聲明多次)
屬性和方法:首字母小寫,第二個單詞開始首字母大寫。
類名:每個單詞首字母大寫
常量:全部大寫
注意:
- final 常量
- a.屬性final常量,要求聲明時就必須初始化賦值
- b.局部變量定義後,必須初始化,即賦值,才能使用(它沒有默認值)
- c.常量命名規範:全部大寫
包名:全部小寫
-
包名不能以圓點開頭或結尾
-
在Eclipse裏創建包名有兩種方式
-
注意:在不通包中引入同名的類時,需要在類前附上自己的包名
如何定義包、使用包,以及使用時應該注意哪些事項。
包是Java語言提供的一種區別類名字命名空間的機制,它是類的一種文件組織和管理方式、是一組功能相似或相關的類或接口的集合。Java
package提供了訪問權限和命名的管理機制,它是Java中很基礎卻又非常重要的一個概念。
一、包的作用
1 把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。
2 如同文件夾一樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字衝突。
3 包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類。
二、包的定義
在一個.java文件中可以一個public類和多個非public類,如果要將這些類組織在一個包當中,則在.java文件中除註釋以外的第一行使用關鍵字package即可實現。當需要調用此包中的類時,就可以使用關鍵字import進行導入。在定義包的時候,應該注意幾點:
-
爲了儘量使包名保持唯一性,包名通常採用小寫、按倒寫互聯網址的形式進行定義。如:com.hank.www表示包文件放置的文件路徑爲com/hank/www。
-
在進行命名包時,應該避免使用與系統發生衝突的名字,如java.lang、java.swing等。
三、包的使用:
- 創建類的時候,在java源碼第一行使用 package 關鍵字標誌本類所在的包。
- 如果某個類調用不同包類時,使用 import進行導入,如果使用import包名.*;表示導入包中所有的類。
- 如果本包中有某個類,而這時必須導入另外一個包相同名字的類時,使用import導入時會出現問題,爲了避免出現歧義,一般使用全類名訪問。
基本數據類型:
基本數據類型(8種):
數值型:
整形:
- byte(1字節)
- short(2字節)
- int(4字節)
- long(8字節)
浮點型:
- float(4字節)
- double(8字節)
非數值型:
- 字符型:char(2字節)
- 布爾型:boolean(佔1位)
引用數據類型:數組、接口、類
Java中的4種引用類型
從JDK1.2開始,Java中的引用類型分爲四種,分別是:
①強引用(StrongReference)
②軟引用(SoftRefernce)
③弱引用(WeakReference)
④虛引用(PhantomReference)
強引用-StrongReference
這種引用是平時開發中最常用的,例如 String strong = new String(“Strong Reference”),當一個實例對象具有強引用時,垃圾回收器不會回收該對象,當內存不足時,寧願拋出OutOfMemeryError異常也不會通過回收強引用的對象,因爲JVM認爲強引用的對象是用戶正在使用的對象,它無法分辨出到底該回收哪個,強行回收有可能導致系統嚴重錯誤。
軟引用-SoftReference
如果一個對象只有軟引用,那麼只有當內存不足時,JVM纔會去回收該對象,其他情況不會回收。軟引用可以結合ReferenceQueue來使用,當由於系統內存不足,導致軟引用的對象被回收了,JVM會把這個軟引用加入到與之相關聯的ReferenceQueue中。
當系統內存不足時,觸發gc,這個Book就會被回收,reference 將不爲null。
弱引用-WeakReference
只有弱引用的對象,當JVM觸發gc時,就會回收該對象。與軟引用不同的是,不管是否內存不足,弱引用都會被回收。弱引用可以結合ReferenceQueue來使用,當由於系統觸發gc,導致軟引用的對象被回收了,JVM會把這個弱引用加入到與之相關聯的ReferenceQueue中,不過由於垃圾收集器線程的優先級很低,所以弱引用不一定會被很快回收。下面通過一個主動觸發gc的例子來驗證此結論。
當然這不是每次都能復現,因爲我們調用System.gc()只是告訴JVM該回收垃圾了,但是它什麼時候做還是不一定的,但就我測試來看,只要多寫幾次System.gc(),復現的概率還是很高的。
虛引用-PhantomReference
如果一個對象只有虛引用在引用它,垃圾回收器是可以在任意時候對其進行回收的,虛引用主要用來跟蹤對象被垃圾回收器回收的活動,當被回收時,JVM會把這個弱引用加入到與之相關聯的ReferenceQueue中。與軟引用和弱引用不同的是,虛引用必須有一個與之關聯的ReferenceQueue,通過phantomReference.get()得到的值爲null,試想一下,如果沒有ReferenceQueue與之關聯還有什麼存在的價值呢?
類型轉換:
- 大類型到小類型轉換 強制轉換
- 小類型到大類型轉換 自動轉換
java生成文檔目錄:
方法1:
javadoc InterfaceA.java -d A
InterfaceA.java表示java的源代碼
-d 是一種格式
A 表示生成文檔的信息存放的文件夾
A文件夾可以現在盤下創建,亦可以不用,但必須保證A文件夾和你導出的java源代碼必須是在同一個盤下的同一級文件目錄下。
方法2:
在Eclipse->progect->generate->Javadoc->選中你要生成的單個JAVA源代碼->選擇destination:這裏面的輸出文件夾名字和存放的路徑不能包含漢字,否則出錯。
Java運算符優先級整理
算術運算符:+ - * / %
關係運算符:> < != == <= >=結果一定是boolean
位運算:& | ~ ^
邏輯運算符:& | ! && | |
條件運算符(三元表達式): ?:
賦值運算符:= += -= /= *=
口訣:括單算關位邏條賦
括號(1級): | ()[ ] (數組去取下標) |
---|---|
單目(2級)(從右向左): | ! + - ~ ++ – |
算術(3-5級) | * / % —>>>+ - —>>><< >> >>> |
關係(6-7級) | < <= > >= instanceof —>>> == != |
位(8-10級)(特殊的單目) | ~—>>>& —>>>^—>>>| |
邏輯(11-12級) | !(優先級高於算術運算符)—>>>&&—>>>|| |
條件運算符 | ?: |
賦值(14級)(從右向左) | = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= |
—>>>用於區別同一類裏面的優先等級 |
注意:
- 1.---->>>>用於區別同一類裏面的優先等級,每遇到一個---->>>>優先級降一級,如:單目類裏%優先級高於+
- 2.單目中有幾個特殊之處①.與括號同級②&^|優先級位於算、關之後③除①②中特殊的,其餘單目結合方向均爲從右向左賦值與普通的單目的結合方向從右向左
- 3.與C有點不一樣,Java裏好像沒有“,”和“mod”運算符,^也不能表示指數或冪運算
Java 中共有 54 種運算符,按優先級可以分爲 14 級,詳見如下(原來整理的,供爲參考):
1. 優先級 操作符 含義 關聯性 用法
2. ----------------------------------------------------------------
3. 1 [ ] 數組下標 左 array_name[expr]
4. . 成員選擇 左 object.member
5. ( ) 方法參數 左 method_name(expr_list)
6. ( ) 實例構造 左 class_name(expr_list)
7. ++ 後綴自增 左 lvalue++
8. -- 後綴自減 左 lvalue--
9.
10. 2 ++ 前綴自增 右 ++rvalue
11. -- 前綴自減 右 --lvalue
12. ~ 按位取反 右 ~expr
13. ! 邏輯非 右 !expr
14. + 一元加 右 +expr
15. - 一元減 右 -expr
16.
17. 3 ( ) 強制轉換 右 (type)expr
18. new 對象實例化 右 new type()
19. new type(expr_list)
20. new type[expr]
21.
22. 4 * 乘 左 expr * expr
23. / 除 左 expr / expr
24. % 求餘 左 expr % expr
25.
26. 5 + 加 左 expr + expr
27. - 減 左 expr - expr
28. + 字符串連接 左 strExpr + strExpr
29.
30. 6 >> 有符號右移 左 expr >> distance
31. >>> 無符號右移 左 expr >>> distance
32.
33. 7 < 小於 左 expr < expr
34. <= 小於等於 左 expr <= expr
35. > 大於 左 expr > expr
36. >= 大於等於 左 expr >= expr
37. instanceof 類型比較 左 ref instanceof refType
38. == 等於 左 expr == expr
39. != 不等於 左 expr != expr
40.
41. 8 & 整數按位與 左 integralExpr & integralExpr
42. & 布爾與 左 booleanExpr & booleanExpr
43.
44. 9 ^ 整數按位異或 左 integralExpr ^ integralExpr
45. ^ 布爾異或 左 booleanExpr ^ booleanExpr
46.
47. 10 | 整數按位或 左 integralExpr | integralExpr
48. | 布爾或 左 booleanExpr | booleanExpr
49.
50. 11 && 邏輯與 左 booleanExpr && booleanExpr
51.
52. 12 || 邏輯或 左 booleanExpr || booleanExpr
53.
54. 13 ? : 條件運算 右 booleanExpr ? expr : expr
55.
56. 14 = 賦值 右 lvalue = expr
57. *= 乘賦值 右 lvalue *= expr
58. /= 除賦值 右 lvalue /= expr
59. %= 模賦值 右 lvalue %= expr
60. += 加賦值 右 lvalue += expr
61. += 字符串連接賦值 右 lvalue += expr
62. -= 減賦值 右 lvalue -= expr
63. <<= 左移賦值 右 lvalue <<= expr
64. >>= 有符號右移賦值 右 lvalue >>= expr
65. >>>= 無符號右移賦值 右 lvalue >>>= expr
66. &= 整數按位與賦值 右 lvalue &= expr
67. &= 布爾與賦值 右 lvalue &= expr
68. |= 整數按位或賦值 右 lvalue |= expr
69. |= 布爾或賦值 右 lvalue |= expr
70. ^= 整數按位異或賦值 右 lvalue ^= expr
71. ^= 布爾異或賦值 右 lvalue ^= expr
上表說明
1、 該表中優先級按照從高到低的順序書寫,也就是優先級爲1的優先級最高,優先級14的優先級最低。
2、 結合性是指運算符結合的順序,通常都是從左到右。從右向左的運算符最典型的就是負號,例如3±4,則意義爲3加-4,符號首先和運算符右側的內容結合。
3、 instanceof作用是判斷對象是否爲某個類或接口類型,後續有詳細介紹。
4、 注意區分正負號和加減號,以及按位與和邏輯與的區別
其實在實際的開發中,不需要去記憶運算符的優先級別,也不要刻意的使用運算符的優先級別,對於不清楚優先級的地方使用小括號去進行替代,示例代碼:
int m = 12;
int n = m << 1 + 2;
int n = m << (1 + 2); //這樣更直觀
這樣書寫代碼,更方便編寫代碼,也便於代碼的閱讀和維護。
着重強調位運算符
1、“與”、“位與”(&)
按位“與”操作符,如果兩個數的二進制,相同位數都是1,則該位結果是1,否則是0.
例1 5&4
5的二進制是 0000 0000 0000 0101
4的二進制是 0000 0000 0000 0100
則結果是 0000 0000 0000 0100 轉爲十進制是4。
2、“或”、“位或”(|)
按位“或”操作符,如果兩個數的二進制,相同位數有一個是1,則該位結果是1,否則是0
例2 5 | 4
5的二進制是 0000 0000 0000 0101
4的二進制是 0000 0000 0000 0100
則結果是 0000 0000 0000 0101 轉爲十進制是5。
3、“異或、“位異或”(^)
按位“異或”操作符,如果兩個數的二進制,相同位數只有一個是1,則該位結果是1,否則是0
例3 5 ^ 4
5的二進制是 0000 0000 0000 0101
4的二進制是 0000 0000 0000 0100
則結果是 0000 0000 0000 0001 轉爲十進制是1
4、“非”、“位非”(~)也稱爲取反操作符
按位“非”操作符,屬於一元操作符,只對一個操作數進行操作,(其他按位操作符是二元操作符)。按位“非”生成與輸入位相反的值,——若輸入0,則輸出1,若輸入1,則輸出0。
結論:
比如整數爲i,那麼整數的取反結果是:-(i+1);
比如負數爲-i,那麼整數的取反結果是:i-1;
1、機器數
一個數在計算機中的二進制表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數爲0, 負數爲1.
“比如,十進制中的數 +3 ,計算機字長爲8位,轉換成二進制就是00000011。如果是 -3 ,就是 10000011 。
那麼,這裏的 00000011 和 10000011 就是機器數。”
2、真值
因爲第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 -3 而不是形式值131(10000011轉換成十進制等於131)。所以,爲區別起見,將帶符號位的機器數對應的真正數值稱爲機器數的真值。
“例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1”
3.原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進制:
“[+1]原 = 0000 0001
[-1]原 = 1000 0001”
4.反碼
反碼的表示方法是:
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
一般我們要把反碼轉換成源碼才能看懂。
5. 補碼
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
對於負數, 補碼錶示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.