【後端開發】01-Java基礎語法

来源:https://www.cnblogs.com/timemiser/archive/2023/10/04/17742094.html
-Advertisement-
Play Games

Java基礎語法 目錄1. 概述1.1. 語言特性1.2. 開發平臺1.3. 開發環境1.4. 開發步驟1.5. 註釋2. 變數與運算符2.1. 關鍵字/保留字2.2. 標識符2.3. 變數2.4. 常用數據類型2.4.1. 基本數據類型(8種)2.4.2. 引用數據類型2.4.3. 數據類型轉換2 ...


Java基礎語法

目錄

1. 概述

Java是SUN公司於1995年開發的一門高級程式設計語言

1.1. 語言特性

優點

  • 跨平臺——核心特點,JVM
  • 面向對象
  • 健壯性
  • 安全性
  • 簡單性
  • 高性能——即時編譯,JIT

缺點

  • 語法複雜、嚴謹
  • 架構比較重,適用於大型網站開發
  • 並非適用於所有領域

1.2. 開發平臺

  • Java SE(J2SE)——桌面級應用
  • Java EE(J2EE)——伺服器端應用
  • Java ME(J2ME)——移動終端應用

1.3. 開發環境

image-20230419223851452
  • JDK:Java程式開發工具包,包含JRE和開發人員使用的工具
  • JRE:Java程式運行時環境,包含JVM和運行時所需的核心類庫

JDK = JRE + 開發工具集

JRE = JVM + Java SE標準類庫

1.4. 開發步驟

image-20230420135240236
  1. 編碼:編寫Java代碼,並保存到.java格式的源文件中

  2. 編譯:使用javac.exe對源代碼進行編譯,生成一個或多個位元組碼文件.class(每個對應一個Java類,文件名與類名相同)

    javac <src_name>.java
    
  3. 執行:使用java.exe運行位元組碼文件

    java <class_name>
    

註意

  • 一個源文件可以聲明多個類,但最多有一個使用public關鍵字且該類名必須與源文件名相同

1.5. 註釋

  • 單行註釋://及該行中其後的內容

    // 這是單行註釋
    
  • 多行註釋:/**/之間的所有內容

    /*
        這是多行註釋
        ...
        註釋不參與編譯
    */
    
  • 文檔註釋(Java特有):/***/之間的所有內容

    /**
        這是文檔註釋
        
        @author vinchell
        @version 1.0.0
    */
    

說明

  • 文檔註釋可被javadoc工具解析,生成網頁文件形式的說明文檔,命令格式為

    javadoc -d <out_dir> -version -author <src_name>.java
    

2. 變數與運算符

2.1. 關鍵字/保留字

Java語言中具有專門用途的字元序列(單詞),全部由小寫字母組成

概覽(50個)

abstract assert boolean break byte
case catch char class const*
continue default do double else
enum extends final finally float
for goto* if implements import
instanceof int interface long native
new package private protected public
return strictfp short static super
switch synchronized this throw throws
transient try void volatile while

2.2. 標識符

Java中變數、方法、類等要素命名時使用的字元序列

命名規則

  • 由大小寫英文字母a-zA-Z、數字0-9、下劃線_、美元符$組成
  • 以字母、下劃線、美元符開頭,不能以數字開頭
  • 不能使用關鍵字和保留字,但可以包含關鍵字和保留字
  • 嚴格區分大小寫,無長度限制

命名規範

  • 包名:所有字母都使用小寫
  • 類名、介面名(大駝峰):所有單詞的首字母使用大寫
  • 變數名、方法名(小駝峰):除第一個外,所有單詞的首字母使用大寫
  • 常量名:所有字母都是用大寫,單詞之間用下劃線連接

2.3. 變數

變數是記憶體中的一個存儲區域,該區域的數據可以在同一類型範圍內不斷變化

  • 三要素:數據類型、變數名、存儲的值

說明

  • 變數只在其作用域內有效
  • 同一作用域內變數不能重名

聲明語法

// 聲明
type varName;

// 聲明和初始化
type varName = value;

2.4. 常用數據類型

2.4.1. 基本數據類型(8種)

  • 整形(4種)

    類型 長度 表數範圍
    byte 1位元組 -128~127
    short 2位元組 -32768~32767
    int(預設) 4位元組 -231~231-1 (約21億)
    long 8位元組 -263~263-1

    說明

    • Java預設的整數類型為int
    • long類型的字面量(值)末尾需加上lL
  • 浮點型(2種)

    類型 長度 表數範圍
    float 4位元組 -3.403×1038~3.403×1038 (小數點後7位)
    double 8位元組 -1.798×10308~1.798×10308 (小數點後15~16位)

    說明

    • 浮點型字面量的兩種表示形式:十進位數、科學計數法表示
    • Java預設的浮點數類型為double
    • float類型的字面量(值)末尾需加上fF
  • 字元型(char,2位元組)

    • 字元型字面量的四種表示形式:單引號('')括起來的單個字元、Unicode碼('\uxxxx')、轉義字元、ASCII碼
  • 布爾型(boolean,4位元組

    • 字面量只有truefalse
    • Java中0和非0數不能轉換為true和false

2.4.2. 引用數據類型

類(class)、數組(array)、介面(interface)、枚舉(enum)、註解(annotation)、記錄(record)

常用引用數據類型

  • 字元串(String)

    字元串是指記憶體中連續分佈的零個或多個字元

    說明

    • 字元串字面量是由雙引號("")括起來的零個或多個字元
    • 字元串與基本數據類型只能進行連接(+)運算,結果為字元串
  • 數組(Array)

    數組是多個類型相同的數據按照一定順序排列的集合

    說明

    • 數組的元素可以是任何一種數據類型
    • 數組在記憶體中占據連續的存儲空間,且長度確定
    • 數組名引用存儲空間的首地址,下標(索引)指定元素的相對地址

2.4.3. 數據類型轉換

隱式轉換

  • 規則:表數範圍小的類型轉換為表數範圍大的類型(非存儲空間大小
  • 順序:byte、short、char --> int --> long --> float --> double
  • 特例:算術運算中byte、short、char類型自動轉換為int類型(避免溢出)

顯式轉換

  • 規則:表數範圍大的類型轉換為表數範圍小的類型(可能造成精度損失)

  • 語法

    type varName = (type) value;
    

2.5. 運算符

2.5.1. 算術運算符(7個)

+-*/%++--

說明

  • %餘數的符號與被模數相同
  • ++--不改變變數的數據類型
  • 前置++--先運算再取值;後置++(--)先取值再運算

2.5.2. 關係運算符(6個)

>>=<<===!=instanceof

說明

  • 關係運算符的結果都是boolean類型
  • ==!=適用於基本數據類型和引用數據類型

2.5.3. 邏輯運算符(6個)

&|!^&&||

說明

  • 邏輯運算符的操作數都是boolean類型,結果也是boolean類型
  • &&||為短路運算,即左操作數能確定結果時不運算右操作數

2.5.4. 位運算符(7個)

&|^~<<>>>>>

說明

  • 位運算符的運算過程基於補碼進行
  • 無符號右移運算符>>>移位後左側的空位補0(無論正負)

2.5.5. 賦值運算符(12個)

=+=-=*=/=%=&=|=^=>>=<<=>>>=

說明

  • =兩側數據類型不一致時,需要隱式或顯示類型轉換
  • +=-=*=/=%=不改變變數的數據類型

2.5.6. 條件運算符(1個)

?:

語法

condExpr?trueExpr:falseExpr

說明

  • 如果運算後賦值給變數,則trueExpr和falseExpr的類型應相同或能自動轉換
  • 條件表達式可以改為if-else結構;反之,不成立
  • 條件表達式的執行效率略高於if-else結構

2.5.7. 優先順序

優先順序 運算符 結合性
1 ()[]. 從左到右
2 ++--~+(正)-(負) 從右到左
3 */% 從左到右
4 +(加)-(減) 從左到右
5 <<>>>>> 從左到右
6 <<=>=>instanceof 從左到右
7 ==!= 從左到右
8 & 從左到右
9 ^ 從左到右
10 ` `
11 && 從左到右
12 `
13 ?: 從右到左
14 =+=-=*=/=%=&=、` =<<=>>=>>>=`

3. 流程式控制制

流程式控制制就是用來控製程序中各語句的執行順序,從而將其組合成能完成一定功能的邏輯模塊

  • 三種流程結構:順序結構、分支結構、迴圈結構

3.1. 順序結構

程式從上到下逐行執行,沒有任何判斷和跳轉

3.2. 分支結構

程式根據條件選擇性地執行某段代碼

3.2.1. if-else

單分支結構

  • 語法格式

    if (condExpr) {
        statements
    }
    
  • 執行流程

    計算條件表達式condExpr:值為true,則執行語句statements;否則,不執行

  • 流程圖

    image-20230829204942877

雙分支結構

  • 語法格式

    if (condExpr) {
        statements1
    } else {
        statements2
    }
    
  • 執行流程

    計算條件表達式condExpr:值為true,則執行語句statements1;否則,執行語句statements2

  • 流程圖

    image-20230829205210250

多分支結構

  • 語法格式

    if (condExpr1) {
        statements1
    }
    else if (condExpr2) {
        statements2
    }
    ...
    else {
        statementsN+1
    }
    
  • 執行流程

    1. 計算條件表達式condExpr1:值為true,則執行語句statements1;否則,執行下一步
    2. 計算條件表達式condExpr2:值為true,則執行語句statements2;否則,執行下一步
    3. ……
    4. 計算條件表達式condExprN:值為true,則執行語句statementsN;否則,執行下一步
    5. 執行語句statementsN+1
  • 流程圖

    image-20230829210118691
  • 說明

    • 多分支結構中,else分支可以有0個或1個,else if分支可以有任意個

3.2.2. switch-case結構

  • 語法結構

    switch (expr) {
        case const1: statements1;
        case const2: statements2;
        ...
        default: statementsN+1;
    }
    
  • 執行流程

    1. 根據表達式expr的值,依次匹配各個case後的常量
    2. 如果表達式的值等於constM,則從語句statementsM向下執行,直到遇到break或結構結束
  • 流程圖

    image-20230829212213525
  • 說明

    • 表達式expr只能是byte、short、char、int、String或枚舉類型
    • case分支必須是常量且互不相同,不能是變數、表達式
    • default分支可以有0個或1個,case分支可以有任意個
    • default分支可以在任意位置

3.2.3. 分支嵌套

分支嵌套是指一個分支結構的某個(些)分支中包含另一個(些)分支結構

3.3. 迴圈結構

程式根據迴圈條件重覆性地執行某段代碼

  • 迴圈四要素:迴圈初始化、迴圈條件、迴圈體、迴圈控制

3.3.1. for迴圈

  • 語法結構

    for (loopInit; loopCond; loopCtrl) {
        loopBody
    }
    
  • 執行流程

    1. 執行迴圈初始化
    2. 判斷迴圈條件是否滿足:滿足則執行下一步;否則,跳出迴圈
    3. 執行迴圈體
    4. 執行迴圈控制語句,並跳回步驟2
  • 流程圖

    image-20230829224536470
  • 說明

    • loopInit可以初始化多個變數,中間適用,分隔
    • loopCtrl可以更新多個變數,中間使用,分隔

3.3.2. while迴圈

  • 語法結構

    loopInit
    while (loopCond) {
        loopBody
        loopCtrl
    }
    
  • 執行流程

    1. 執行迴圈初始化
    2. 判斷迴圈條件是否滿足:滿足則執行下一步;否則,跳出迴圈
    3. 執行迴圈體和迴圈控制,並跳回步驟2
  • 流程圖

    image-20230830104747124

3.3.3. do-while迴圈

  • 語法結構

    loopInit
    do {
        loopBody
        loopCtrl
    } while (loopCond);
    
  • 執行流程

    1. 執行迴圈初始化
    2. 執行迴圈體和迴圈控制
    3. 判斷迴圈條件是否滿足:滿足則跳回步驟2;否則,跳出迴圈
  • 流程圖

    image-20230830113000003

3.3.4. 迴圈嵌套

迴圈嵌套是指一個迴圈結構A的迴圈體中包含另一個迴圈結構B,習慣上將迴圈結構A稱為外層迴圈,迴圈結構B稱為內層迴圈

3.4. 關鍵字breakcontinue

3.4.1. break

結束當前迴圈或switch結構,即跳出迴圈或switch結構

語法格式

// 無標簽:結束最近的迴圈或switch結構
break;

// 有標簽:結束標簽指定的迴圈或switch結構
break label;

3.4.2. continue

結束本次迴圈,開始下一次迴圈

語法格式

// 無標簽:結束最近迴圈結構的本次迴圈,開始下一次迴圈
continue;

// 有標簽:結束標簽指定迴圈結構的本次迴圈,開始下一次迴圈
continue label;

4. 數組

數組是多個類型相同的數據按照一定順序排列的集合

說明

  • 數組的元素可以是任何一種數據類型
  • 數組在記憶體中占據連續的存儲空間且長度不可更改
  • 數組占用空間的大小取決於其長度和元素類型
  • 數組中的元素在記憶體中是依次緊密排列的,即有序的
  • 數組名引用存儲空間的首地址,下標(索引)指定元素的相對地址

4.1. 一維數組

4.1.1. 聲明和初始化

// 靜態初始化
type[] arrName = new type[]{value0, value1...};  // 推薦
type arrName[] = new type[]{value0, value1...};
type[] arrName = {value0, value1...};  // 類型推斷

// 動態初始化
type[] arrName = new type[nElem];  // 推薦
type arrName[] = new type[nElem];

說明

  • 數組變數和數組元素的初始化操作同時進行,稱為靜態初始化;數組變數和數組元素的初始化操作分開進行,則稱為動態初始化
  • 靜態初始化的數組長度由靜態數組的個數決定;動態初始化則需要指定數組元素的個數

4.1.2. 元素訪問

arrName[index]

說明

  • 數組的長度為arrName.length
  • 數組元素的下標範圍為0~length-1

4.2. 二維數組

4.2.1. 聲明和初始化

// 靜態初始化
type[][] arrName = new type[][]{{value0, value1...}, {value0, value1...}...};  // 推薦
type arrName[][] = new type[][]{{value0, value1...}, {value0, value1...}...};
type[] arrName[] = new type[][]{{value0, value1...}, {value0, value1...}...};
type[][] arrName = {{value0, value1...}, {value0, value1...}...};  // 類型推斷

// 動態初始化
type[][] arrName = new type[nElem1][nElem2];  // 推薦
type arrName[][] = new type[nElem1][nElem2];
type[] arrName[] = new type[nElem1][nElem2];
type[][] arrName = new type[nElem1][]; // 預設最後一維

4.2.2. 元素訪問

// 訪問外層元素
arrName[index1]
    
// 訪問內層元素
arrName[index1][index2]

4.3. 預設值

元素類型 初始值
byte、short、int 0
long 0l
float 0.0f
double 0.0
char 0或'\u0000'
boolean false
引用類型 null

4.4. 說明

  • 高維數組本質上是低維數組的嵌套,即高維數組的元素是低維數組的引用
  • 各維度數組元素的長度可以相同,也可以不同
  • 當前維度數組的長度為arrName.length,其數組元素的長度為arrName[index].length
  • 維度不同、元素類型的數組視為不同的引用類型,不能相互轉換

5. 常用API

5.1. 輸入輸出

5.1.1. 輸入

  1. 導包java.util.Scanner

    import java.util.Scanner;
    
  2. 實例化Scanner

    Scanner scanner = new Scanner(System.in);
    
  3. 調用nextXxx方法

    xxx input = scanner.nextXxx();
    
  4. 關閉資源

    scanner.close();
    

5.1.2. 輸出

// 控制台輸出並換行
System.out.println(output);

// 控制台輸出不換行
System.out.print(output);

5.2. 常用類

5.2.1. java.lang.Math

類別 方法 說明
數學函數 static double sqrt(double a) 返回a的平方根
隨機數 static double random() 返回[0.0, 1.0)範圍內的隨機數

5.2.2. java.lang.System

類別 方法 說明
時間日期 static long currentTimeMillis() 返回當前時間戳

5.2.3. java.util.Arrays

類別 方法 說明
拼接 static String toString(type[] a) 返回由數組元素組成的字元串(用[]括起,元素間由,+ 分隔)
排序 static void sort(type[] a) 將數組a的元素按照升序排序
排序 static void sort(type[] a, int fromIndex, int toIndex) 將數組a指定範圍[fromIndex, toIndex)內的元素按照升序排序
查找 static int binarySearch(type[] a, type key) 返回key在有序數組a中的第一次出現的下標,不存在則返回負數
查找 static int binarySearch(type[] a, int fromIndex, int toIndex, type key) 返回key在有序數組a指定範圍[fromIndex, toIndex)內的第一次出現的下標,不存在則返回負數
複製 static type[] copyOf(type[] original, int newLength) 複製數組original到長度為newLength的新數組中並返回
複製 static type[] copyOfRange(type[] original, int from, int to) 複製數組original指定範圍[from, to)內的元素到長度為newLength的新數組中並返回
比較 static boolean equals(type[] a, type[] b) 比較數組a、b的元素是否相同
比較 static boolean equals(type[] a, int aFromIndex, int aToIndex, type[] b, int bFromIndex, int bToIndex) 比較數組a、b指定範圍[aFromIndex, aToIndex)、[bFromIndex, bToIndex)內的元素是否相同
填充 static void fill(type[] a, type val) 用val填充數組a
填充 static void fill(type[] a, int fromIndex, int toIndex, type val) 用val填充數組a的指定範圍[fromIndex, toIndex)

6. 擴展

6.1. Java虛擬機的記憶體劃分

image-20230909114315133

區功能變數名稱稱 作用
虛擬機棧 存儲正在執行方法的局部變數表(基本數據類型、對象引用)等
存儲對象
方法區 存儲已被JVM載入的類信息、常量、靜態變數、即時編譯器編譯後的代碼等
本地方法棧 本地(native)方法執行期間的記憶體區域
程式計數器 存放每一個線程下一條要執行指令的地址

7. 參考資料

  1. 尚矽谷Java零基礎全套視頻教程(宋紅康2023版,java入門自學必備)_嗶哩嗶哩_bilibili

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在這,您將學習瞭解 Spring Boot Starter Parent, 它是 Spring Boot 提供的父級 Pom 文件,旨在提供自動版本依賴管理,幫助我們輕鬆快速地進行 Spring Boot 開發。 什麼是 Spring Boot Starter Parent ? 通過 Spring ...
  • 用Rust手把手編寫一個wmproxy(代理,內網穿透等), HTTP及TCP內網穿透原理及運行篇 項目 ++wmproxy++ gite: https://gitee.com/tickbh/wmproxy github: https://github.com/tickbh/wmproxy 內網、公 ...
  • Dart 3.0在語法層面共發佈了3個高級特性,第一個特性Record記錄我們在前面已經學習和探究。今天我們來學習第二個高級類型Pattern模式,由於內容較多,共分2篇文章進行介紹,本文首先介紹模式的概覽和用法,包括匹配、解構、在變數申明、賦值、迴圈、表達式等應用場景…… ...
  • 背包問題-01背包 首先我們要明白什麼是01背包,在下述例題中,由於每個物體只有兩種可能的狀態(取與不取),對應二進位中的 \(0\) 和 \(1\),這類問題便被稱為\(\text{「0-1 背包問題」}\)。 題目描述 有 \(N\) 件物品和一個容量為 \(M\) 的背包。第 \(i\) 件物 ...
  • 1.JVM體繫結構 JVM的位置 JVM體繫結構 2.類載入器 雙親委派機制 package java.lang; /** * 測試自定義java.lang.String類能否運行成功 * 體會雙親委派機制 * * 類載入器逐級向上檢查:app->ext->boot * 發現boot類載入器中也有S ...
  • 平行坐標系是一種統計圖表,它包含多個垂直平行的坐標軸,每個軸表示一個欄位,並用刻度標明範圍。通過在每個軸上找到數據點的落點,並將它們連接起來形成折線,可以很容易地展示多維數據。隨著數據增多,折線會堆疊,分析者可以從中發現數據的特性和規律,比如發現數據之間的聚類關係。 儘管平行坐標系與折線圖錶面上看起 ...
  • 這些練習題是在神經網路與深度學習課程上老師提供的,原因是有些同學沒學過python,作為簡單的練手習題。題目都很簡單,加上python本身也比較簡單,有些題目的作答可以一行代碼實現(雖然可讀性就下降了)。 ...
  • Bus 簡介 Spring Cloud Bus 是 Spring Cloud 體系內的消息匯流排,支持 RabbitMQ 和 Kafka 兩種消息中間件。所謂消息匯流排,簡單理解就是一個消息中心,眾多微服務實例都可以連接到匯流排上,實例可以往消息中心發送或接收信息,例如:實例 A 發送一條消息到匯流排上,總 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...