Java基礎知識詳細介紹01

2024年2月6日 21点热度 0人点赞

0、Java工具包術語

術語名稱

縮寫

解釋

Java Development Kit

JDK

編寫 Java 程序的程序員使用的軟件

Java Runtime Environment

JRE

運行 Java 程序的用戶使用的軟件

Server JRE

在服務器上運行 Java 程序的軟件

Standard Edition

SE

用於桌面或簡單服務器應用的 Java 平臺

Enterprise Edition

EE

用於復雜服務器應用的 Java 平臺

Micro Edition

ME

用於手機和其他小型設備的 Java 平臺

Java FX

用於圖形化用戶界面的一個替代工具包,在 Oracle 的 Java SE 發佈版本中提供

OpenJDK

Java SE的一個免費幵源實現,不包含瀏覽器集成或 Java FX

Java 2

J2

一個過時的術語,用於描述1998年〜2006年之間的 Java 版本

Software Development Kit

SDK

一個過時的術語,用於描述1998年~2006年之間的 JDK

Update

u

Oracle的術語,表示 bug 修正版本

NetBeans

Oracle 的集成開發環境

1、Java程序簡單規范

1)Java 區分大小寫,即對大小寫敏感;

2)類名隻能是下劃線和字母開頭,其後可以是下劃線、字母和數字;

3)類名命名規范需符合駝峰標識法;

2、三種註釋方式

1)// ,行註釋;

2)/* */,多行註釋;

3)/** */,多行註釋,會生成 javadoc 文檔;

3、基礎數據類型

1)java 中整型范圍與平臺機器無關;

2)c 中整型與機器有關,16位和32位整型范圍是不一樣的;

3.1、整型(有4種)

類型

存儲

取值范圍

byte

1個字節(8位)

short

2個字節(16位)

int

4個字節(32位)

long

8個字節(64位)

1)long 類型需加後綴 L 或 l,小於 int 類型最大值時可以不使用後綴,超過 int 類型最大值時必須加上後綴 L 或 l;

int 類型最大值:2147483647;

2)十六進制需加前綴 0x 或 0X;

3)八進制需加前綴 0;

3)二進制需加前綴 0b 或 0B;

4)數字之間可以加下劃線,讓人易懂,編譯器編譯的時候會自動去掉下劃線;

下劃線不能加在數字最前或最後;

3.2、浮點型(有2種)

類型

存儲

取值范圍

float

4個字節

(小數點有效位數是6~7位)

double

8個字節

(小數點有效位數是15位)

1)float 類型數值需加後綴 F 或 f,該類型很少使用,不加後綴默認是 double 類型;

2)double 類型數值可以加後綴 D 或 d;

3)數字之間可以加下劃線,讓人易懂,編譯器編譯的時候會自動去掉下劃線;

下劃線不能加在數字最前或最後;

4)可以十六進制表示浮點型,0x1.0p-3,p表示指數 2,3 表示次方;

0x1.0p-3 表示0x1 * 2的負3次方

0x1.0p3 表示0x1 * 2的3次方

0xap-3 表示0xa * 2的3次方

5)三個常量

正無窮大,Double.POSITIVE_INFINITY / Float.POSITIVE_INFINITY

負無窮大,Double.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY

不是數字 NaN(Not-a-Number),Double.NaN / Float.NaN

isInfinite(a) / isFinite(a) / Double.isNaN(0.0/0)

3.3、char類型(最好不要使用)

1)用單引號括起來;

2)可以使用十六進制表示

3)\u 是轉義字符;

3.4、boolean類型

1)兩種可選值true / false;

4、變量

4.1、變量命名規范

1)由字母和數字組成,字母包括一些26個字母之外的字符;

2)如何判斷 Unicode 字符是 java 中的字母,使用如下方法:

Character.isJavaIdentifierStart('@')

Character.isJavaIdentifierPart('@')

3)不要在代碼中使用 $ 符號來聲明變量名稱,盡管是可以的;

4)變量名稱大小寫敏感;

4.2、變量初始化

1)變量需要初始化才能使用;

4.3、常量

1)使用 final 關鍵字修飾常量,final 表示變量隻能賦值一次,賦值後不能再被修改了,也就是常量了;

2)常量名稱一般大寫;

3)類常量,使用 static final 關鍵字修飾;

類常量需定義在類中,不能定義在方法內;

5、運算符

1)算術運算符:加( ) 、減(-)、乘(*)、除(/)、求餘(% 也叫取模);

2)進行除(/)運算時:

兩個操作數都是整型則是整數除法;

兩個操作數有一個是浮點型時,表示浮點除法;

3)strictfp 關鍵字,表示采用最嚴格的計算;

strictfp 關鍵字修飾在方法上時,表示方法內的計算都是采用最嚴格的計算;

strictfp 關鍵字修飾在類上時,表示該類中的方法都是采用最嚴格的計算;

5.1、數學函數與常量

1)java.lang.Math 類

2)java.lang.StrictMath 類

5.2、數值類型之間的轉換

1)實心箭頭表示無信息丟失的轉換;

2)虛線箭頭表示可能會有精度損失的轉換;

3)兩個數值進行二元操作,會先自動轉換為同一類型再計算;

5.3、強制類型轉換

1)強制類型轉換,會將小數部分截斷將浮點值轉換為整型;

2)對浮點數進行四舍五入,得到最接近的整型;

3)對浮點型數據進行加減乘除計算,小數點前面的 0 可以不寫;

5.4、結合賦值和運算

5.5、自增、自減

1)前綴形式: n / --n,先計算再使用;

2)後綴形式:n / n--,先使用再計算;

3)不建議在運算中使用自增、自減運算,容易混淆;

5.6、關系和 boolean 運算符

== / != / > / >= / < / <= / &&(短路與) / ||(短路或)

三目運算符;

5.7、位運算符

1)可以把整型用二進制來表示,能夠很清楚的看懂位運算;

2)& 運算符:兩個整數進行 &(與)運算,需對應的二進制位都是 1 計算的位值才為 1,其他情況都是 0;

也可用作與運算,類似 &&(短路與),隻不過 & 運算符兩邊都會計算;

3)| 運算符:兩個整數進行 |(或)運算,需對應的二進制位有一個是 1 計算的位值才為 1,都是 0 位值才是 0;

也可用作或運算,類似 ||(短路或),隻不過 | 運算符兩邊都會計算;

4)^ 運算符:異或運算,對應的二進制位值相同則為 0,不同則為 1;

5)整型轉二進制的方法,Integer.toBinaryString(13)

6)介紹 ~ 非運算之前,先了解原碼、反碼、補碼

int 類型是32位,表示二進制時有32位;

long 類型是 64 位,表示二進制時有 64 位;

> 二進制前面的 0 不顯示,左邊第一位是符號位,1表示負數,0表示正數;

> 正數 5 對應的:

原碼:00000000 00000000 00000000 00000101

反碼:00000000 00000000 00000000 00000101(和原碼一樣)

補碼:00000000 00000000 00000000 00000101(和原碼一樣)

> 負數 -5 對應的:

原碼:10000000 00000000 00000000 00000101

反碼:11111111 11111111 11111111 11111010(除符號位外各位在原碼基礎上取反)

補碼:11111111 11111111 11111111 11111011(反碼 1)

> 計算機內部是使用補碼來存儲和表示值的;

> 計算機硬件隻有加數器,正數和負數、負數和負數相加時使用補碼二進制實現加減計算;

7)~ 運算符,非運算,原位取反;

非運算計算過程:

1)正數 3 的補碼:00000000 00000000 00000000 00000011

2)非運算原位取反:11111111 11111111 11111111 11111100(補碼)

3)補碼對應多少整型數值呢?自解析:

補碼轉反碼:11111111 11111111 11111111 11111011(補碼-1)

反碼轉原碼:10000000 00000000 00000000 00000100(符號位不變)

我們發現原碼對應的是整型數值 -4;

8)<< 運算符,位左移,右邊補0

> 正數左移,2 << 3 = 16(相當於在2的基礎上擴大了2的3次方倍,即2*8=16)

正數左移,2 << 3 = 16(相當於在2的基礎上擴大了2的3次方倍,即2*8=16):

2 的補碼:00000000 00000000 00000000 00000010(與原碼一致)

左移 3 位:00000000 00000000 00000000 00010000

> 負數左移,-2 << 3 = -16(相當於在-2的基礎上擴大了2的3次方倍,即-2*8=16

負數左移,-2 << 3 = -16:

-2的原碼:10000000 00000000 00000000 00000010

-2的反碼:11111111 11111111 11111111 11111101

-2的補碼:11111111 11111111 11111111 11111110

左移 3 位的補碼:11111111 11111111 11111111 11110000

對應反碼:11111111 11111111 11111111 11101111

對應原碼:10000000 00000000 00000000 00010000

> 移動位數需要先進行 32 位取模,即求餘(long 類型需要 64 位取模);

9)>> 運算符,位右移;

> 正數右移,125 >> 3 = 15,左邊補 0;

> 負數右移,-125 >> 3 = -16,左邊補 1;

10)>>> 運算符,無符號位右移,正負數都是左邊補 0;

正數右移,125 >> 3 = 15,左邊補 0

負數右移,-125 >> 3 = -16,左邊補 0

5.8、括號與運算符優先級

1)不使用括號時,是按照優先級來計算的;

2)同一級別的運算符是按出現的順序從左至右進行計算的,右結合運算符除外;

3)右結合運算符是先計算右邊的;

6、Math 類和 StrictMath 類

6.1、random() 方法

1)隨機返回 [0, 1) 之間的 double 類型的值;

6.2、floor() 方法

1)Math.floor(1.2) 向下舍取整,保留一位小數;

6.3、floorDiv() 方法

1)求商,Math.floorDiv(13, 3) 求商,返回 int 或 long 型,下舍取整;

6.4、floorMod() 方法

1)求餘,Math.floorMod(17, 6),求餘;

6.5、其他方法

public static void main(String[] args) {
    int abs = Math.abs(-10);
    System.out.println("Math.abs(-10) 絕對值="   abs);
    int addExact = Math.addExact(20, -3);
    System.out.println("Math.addExact(20, -3) 兩數相加="   addExact);
    double ceil1 = Math.ceil(-1.4);
    double ceil2 = Math.ceil(-1.5);
    double ceil3 = Math.ceil(1.5);
    double ceil4 = Math.ceil(1.4);
    System.out.println("Math.ceil(-1.4) 返回大於或等於指定浮點數中,最小的整數對應的浮點數="   ceil1);
    System.out.println("Math.ceil(-1.5) 返回大於或等於指定浮點數中,最小的整數對應的浮點數="   ceil2);
    System.out.println("Math.ceil(1.5) 返回大於或等於指定浮點數中,最小的整數對應的浮點數="   ceil3);
    System.out.println("Math.ceil(1.4) 返回大於或等於指定浮點數中,最小的整數對應的浮點數="   ceil4);
    double floor1 = Math.floor(-1.4);
    double floor2 = Math.floor(-1.5);
    double floor3 = Math.floor(1.5);
    double floor4 = Math.floor(1.4);
    System.out.println("Math.floor(-1.4) 返回小於或等於指定浮點數中,最大的整數對應的浮點數="   floor1);
    System.out.println("Math.floor(-1.5) 返回小於或等於指定浮點數中,最大的整數對應的浮點數="   floor2);
    System.out.println("Math.floor(1.5) 返回小於或等於指定浮點數中,最大的整數對應的浮點數="   floor3);
    System.out.println("Math.floor(1.4) 返回小於或等於指定浮點數中,最大的整數對應的浮點數="   floor4);
    int floorDiv1 = Math.floorDiv(17, 5);
    int floorDiv2 = Math.floorDiv(-17, 5);
    System.out.println("Math.floorDiv(17, 5) 返回小於或等於代數商中,最大的整數="   floorDiv1);
    System.out.println("Math.floorDiv(-17, 5) 返回小於或等於代數商中,最大的整數="   floorDiv2);
    int floorMod1 = Math.floorMod(17, 5);
    int floorMod2 = Math.floorMod(-17, 5);
    System.out.println("Math.floorMod(17, 5) 取模公式[x - (floorDiv(x, y) * y)],結果="   floorMod1);
    System.out.println("Math.floorMod(-17, 5) 取模公式[x - (floorDiv(x, y) * y)],結果="   floorMod2);
    int incrementExact1 = Math.incrementExact(17);
    int incrementExact2 = Math.incrementExact(-17);
    System.out.println("Math.incrementExact(17) 返回指定參數加 1="   incrementExact1);
    System.out.println("Math.incrementExact(-17) 返回指定參數加 1="   incrementExact2);
    int max1 = Math.max(18, 17);
    int max2 = Math.max(-18, 17);
    int max3 = Math.max(-18, -17);
    System.out.println("Math.max(18, 17) 取最大值="   max1);
    System.out.println("Math.max(-18, 17) 取最大值="   max2);
    System.out.println("Math.max(-18, -17) 取最大值="   max3);
    int multiplyExact1 = Math.multiplyExact(3, 5);
    int multiplyExact2 = Math.multiplyExact(3, -5);
    int multiplyExact3 = Math.multiplyExact(-3, -5);
    System.out.println("Math.multiplyExact(3, 5) 兩個指定參數相乘="   multiplyExact1);
    System.out.println("Math.multiplyExact(3, -5) 兩個指定參數相乘="   multiplyExact2);
    System.out.println("Math.multiplyExact(-3, -5) 兩個指定參數相乘="   multiplyExact3);
    double pow1 = Math.pow(3, 2);
    double pow2 = Math.pow(-3, 2);
    System.out.println("Math.pow(3, 2) a的b次方="   pow1);
    System.out.println("Math.pow(-3, 2) a的b次方="   pow2);
    double random1 = Math.random();
    System.out.println("Math.random() 返回[0, 1)之間的隨機數="   random1);
    long round1 = Math.round(1.4);
    long round2 = Math.round(1.5);
    long round3 = Math.round(-1.4);
    long round4 = Math.round(-1.5);
    long round5 = Math.round(-1.6);
    System.out.println("Math.round(1.4) 返回最接近指定參數的整數="   round1);
    System.out.println("Math.round(1.5) 返回最接近指定參數的整數="   round2);
    System.out.println("Math.round(-1.4) 返回最接近指定參數的整數="   round3);
    System.out.println("Math.round(-1.5) 返回最接近指定參數的整數(負數時註意小數點後的5)="   round4);
    System.out.println("Math.round(-1.6) 返回最接近指定參數的整數="   round5);
}

7、控制流程

7.1、塊作用域

7.2、循環

7.3、多重選擇 swithc/case

1)case 標簽可以是如下:

char / byte / int / short 常量表達式;

枚舉常量;

字符串字面量;

7.4、中斷流程,跳出循環

1)帶標簽 break;

2)這種標簽可以放置在任何地方,可以被任何流程控制塊使用;

8、數組

8.1、聲明數組

8.2、數組拷貝

1)Arrays.copyOf 方法是拷貝數組元素到新的數組中;

8.3、數組排序

1)Arrays.sort() 排序方法采用的是快速排序算法,該方法適用於數值類型的數組;

8.4、java.util.Arrays 類

1)Arrays.toString(arr) 數組轉字符串;

2)Arrays.copyOf 數組拷貝;

3)Arrays.sort() 數組排序;

4)Arrays.binarySearch(a, 12),使用二分查找算法,在數組中查找指定元素,查到則返回下標,沒查到則返回負值;

5)Arrays.fill(a, 2) 填充數組中所有元素為指定值;

8.5、多維數組

8.6、不規則數組