Java基本語法

来源:https://www.cnblogs.com/mengd/archive/2020/07/05/13251862.html
-Advertisement-
Play Games

一、關鍵字&標識符 關鍵字:被Java語言賦予了特殊含義,用做專門用途的字元串(單詞) 標識符:凡是自己可以起名字的地方都叫標識符 1. 命名的規範(一定要遵守,不遵守就會報編譯的錯誤) 由26個英文字母大小寫,0-9 ,_或 $ 組成 數字不可以開頭。 不可以使用關鍵字和保留字,但能包含關鍵字和保 ...


一、關鍵字&標識符

關鍵字:被Java語言賦予了特殊含義,用做專門用途的字元串(單詞)
標識符:凡是自己可以起名字的地方都叫標識符

1. 命名的規範(一定要遵守,不遵守就會報編譯的錯誤)

  • 由26個英文字母大小寫,0-9 ,_或 $ 組成
  • 數字不可以開頭。
  • 不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
  • Java中嚴格區分大小寫,長度無限制。
  • 標識符不能包含空格。

2. Java中的名稱命名規範:(不遵守,也不會出現編譯的錯誤)

  • 包名:多單片語成時所有字母都小寫:xxxyyyzzz
  • 類名、介面名:多單片語成時,所有單詞的首字母大寫:XxxYyyZzz
  • 變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz
  • 常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ

3. 註釋:用於說明代碼的用途和作用,方便讀寫和維護

  • HTML註釋:
  • Java註釋:
  • //單行註釋
  • /* 多行註釋 */
  • /** 文檔註釋 */

二、變數

變數是java程式中最基本的存儲單元,可以存儲一個數據
java中變數按照數據類型來分類:基本數據類型 vs 引用數據類型(數組 類 介面)

1. 基本數據類型

  • 整型:byte(8 bit) short int(預設類型) long
  • 浮點型:float double (預設類型) float類型的數據: 必須在小數末尾添加上"F"或"f"
  • 字元型:char(‘ ’)(1字元=2位元組)
  • 布爾類型: boolean(只能取值為true 或false,不能取null)
  • 補充:按照在類中存在的位置的不同:成員變數 vs 局部變數

2. 局部變數

  • 局部變數必須編寫在方法體中
  • 局部變數只能在當前方法體中被訪問
  • 局部變數在使用之前,必須被賦值

3. 成員變數

  • 全局變數只能編寫所有方法體之外
  • 全局變數可以在任何方法體中被訪問
  • 全局變數在使用之前如果沒有賦值,系統將自動賦予預設值
  • 全局變數的操作,會應用其他引用了該變數的代碼

4. 基本數據類型的預設值

  • 整數: 0
  • 小數: 0.0
  • 字元: 空格 或 0
  • 布爾: false

三、變數的運算

1. 自動類型轉換

容量小的數據類型自動轉換為容量大的數據類型,

此時的容量大小指的是數的範圍的大小

byte、char、short、--->int --->long --->float --->double

short s = 12;
int i = s + 2;
註意:byte short char之間做運算,結果為int型!

2. 強制類型轉換

將取值範圍大/精度高的數據類型 轉為 取值範圍小/精度低的數據類型

  • 是①的逆過程。使用“()”實現強轉
  • 強制類型轉換可能精度損失
double d1 = 12.9;
int t1 = (int)d1;//截斷操作
System.out.println(t1);

3. 練習

char c = 'a';
int num = 10;
string str = "hello";
System.out.println(c + num + str); //107hello
System.out.println(c + str + num); //ahello10
System.out.println(c + (num + str)); //a10hello
System.out.println((c + num) + str); // 107hello
System.out.println(str + num + c); // helloa10

四、運算符

運算符是一種特殊的符號,用以表示數據的運算、賦值和比較等

1. 算術運算符

+ - + - * / % ++ -- +

  1. /: int i = 12; i = i / 5;
  2. %:最後的符號只跟被模數相同
  3. 前++:先+1,後運算 後++:先運算,後+1
  4. +:String字元串與其他數據類型只能做連接運算,且結果為String類型。sysout('' + '\t' + ''); vs sysout("" + '\t' + '')

2. 賦值運算符

= += -= *= /= %=

int i= 12;
i  = i * 5;
i *= 5;//與上一行代碼同樣的意思
//【特別地】
short s = 10;
s = s + 5;//報編譯的異常
s = (short)(s + 5);
s += 5;//s = s + 5,但是結果不會改變s的數據類型。

int m = 2;
int n = 3;
n *= m++;
Sysout(m);// 3
Sysout(n);// 6

int n = 10;
n += (n++) + (++n); //32

變數A++ 與 ++變數A的區別

  • 變數A++ / ++變數A: 變數A+1,將結果賦給變數A
  • 變數A-- / --變數A: 變數A-1,將結果賦給變數A
  • 變數A=變數B++/--:先將變數B的值賦給變數A,然後執行變數自增或自減1 ,先賦值,後自增/自減
  • 變數A=++/--變數B:先執行變數B自增或自減1,然後將變數B的值賦給變數A ,先自增/自減,後賦值

3. 比較運算符

== > < >= <= instanceof

【註意】區分== 與 = 區別。
進行比較運算操作以後,返回一個boolean類型的值
4>=3 表達的是4 > 3或者 4 = 3.結果是true。

if(i > 1 && i < 10){ }
不能寫為:if(1 < i < 10){}

4. 邏輯運算符(運算符的兩端是boolean值)

& && | || ^ !

【註意】區分 & 與 && 的區別,以及 | 與 || 的區別我們使用的時候,選擇&& , ||

| || ,& &&區別

  • &:分別比較前後兩個條件,當前後兩個條件都為true時,整體為true,否則為false.
  • &&[短路與]:當前後兩個條件都為true時,整體為true,否則為false. 如果第一個為false時,將不再判斷之後的條件,將直接返回false
  • |:分別判斷前後兩個條件,至少有一個為true時,整體為true,否則為false.
  • ||[短路或]:當前後兩個條件至少有一個為true時,整體為true,否則為false. 如果第一個條件為true時,將不再判斷之後的條件,直接返回true.

5. 位運算符(兩端是數值類型的數據)

<< >> >>> & | ^ ~

  • << 在一定範圍內,每向左移動一位相當於 * 2

【例子】1.如何交換m = 12和n = 5的值
2.將60轉換為十六進位輸出。

m = m + n;
n = m - n;
m = m - n;
// 好處不用定義變數,但有局限性,只能用數值類型

6. 三元運算符:(條件表達式)? 表達式1 : 表達式2

  1. 既然是運算符,一定會返回一個結果,並且結果的數據類型與表達式1,2的類型一致
  2. 表達式1與表達式2 的數據類型一致
  3. 使用三元運算符的,一定可以轉換為if-else。反之不一定成立

五、流程式控制制

1. 分支結構

1. 條件判斷

三種格式

①if(條件表達式){   }

②if(條件表達式){
    //執行的語句1;
  }else{
    //執行的語句2;
  }

③if(條件表達式1){
    //執行的語句1;
  }else if(條件表達式2){
    //執行的語句2;
  }else if( 條件表達式3){
    //執行的語句3;
  }...
  }else{
    //執行的語句;
  }

註意:

  • 一旦滿足某個條件表達式,則進入其執行語句塊執行,執行完畢,跳出當前的條件判斷結構,不會執行其以下的條件結構語句
  • 如果諸多個條件表達式之間為“互斥”關係,多個結構可以上下調換順序
  • 如果諸多個條件表達式之間為“包含”關係,要求條件表達式範圍小的寫在範圍大的上面

2. 選擇結構

switch(變數){
    case 值1:
        
    break;
	case 值2:
        
	break;
	...
	default:

	break;
}

註意:

  • 變數可以為如下的數據類型:byte short int char 枚舉 String
  • case後只能填寫變數的值,不能寫範圍
  • default是可以省略的。並且其位置也是靈活的,但是通常將其放在case語句之後
  • 一旦滿足某個case語句,則進入執行其操作。直至遇到break或者程式終止
  • 若要判斷的語句的條件滿足switch變數的數據類型,且值不多的情況下,建議選擇switch-case,除此之外,選擇if-else.

2. 迴圈結構

1. 三種格式

①初始化條件
②迴圈條件 boolean類型
③迭代部分
④迴圈體

for(①;②;③){
    ④
}
①
while(②){
    ④
    ③
}

①
do{
    ④
    ③
}while(②);

// 遍歷100以內的偶數
for(int i = 1; i<100; i++){
	if(i % 2 == 0){
		System.out.println(i);
    }
}


註意:

  • 不同的迴圈結構之間可以相互轉換
  • while和do-while的區別:do-while程式至少會執行一次

2. 嵌套迴圈

迴圈結構還可以聲明迴圈。讓內層迴圈結構整體充當外層迴圈的迴圈體。
若外層迴圈執行m次,內層迴圈執行n次,整個程式執行m*n次

//題目
******
******
******
for(int i = 0;i < 3;i++){
    for(int j = 0;j < 6;j++){
        System.out.print("*");
    }
    System.out.println();
}
//說明:外層迴圈控制行數,內層迴圈控制列數

3. 無限迴圈結構

for(;;){
   ...
   if(  ){
    break;
   }
   ...
}
//或者
while(true){
   ...
   if(  ){
    break;
   }
   ...
}

往往我們在無限迴圈結構內部提供迴圈的終止條件,使用break關鍵字。否則,此迴圈將無限制的執行下去,形成死迴圈,死迴圈是我們要避免的

4. break & continue

  • break:

    使用switch-case結構或者迴圈結構中

    在迴圈結構中,一旦執行到break,就跳出當前迴圈。

  • continue:使用在迴圈結構中

    • 一旦執行到continue,就跳出當次迴圈。
for(int i = 1;i <= 10;i++){
    if(i % 4 == 0){
        //break; //123
        continue;  //123567910
    }

    System.out.print(i);
}

在嵌套迴圈中,使用帶標簽的break和continue

label:for(int i = 1;i < 5;i++){
    for(int j = 1;j <= 10;j++){
        if(j % 4 == 0){
            //break;
            //continue;
            //break label;
            continue label;
        }
        System.out.print(j);
    }
    System.out.println();
}

六、例題

1. 最大公約數和最小公倍數

/*
題目:輸入兩個正整數,求最大公約數和最小公倍數
比如:12和20的最大公約數是4,最小公倍數是60
*/
Scanner scan = new Scanner(System.in);
System.out.println("請輸入第一個正整數:");
int m = scan.nextInt();
System.out.println("請輸入第二個正整數:");
int n = scan.nextInt();
// 獲取這兩個數中的最小值
int min = (m <= n) ? m : n;
for(int i = min; i > 0; i--){
    if(m % i == 0 && n % i == 0 ){
        System.out.println("最大公約數為:"+i);
        break;
    }
}

// 獲取這兩個數中的最大值
int max = (m <= n) ? n : m;
for(int i = max; i <= n*m; i++){
    if(i % m == 0 && i % n == 0 ){
        System.out.println("最小公倍數為:"+i);
        break;
    }
}

2. 質數

//100以內的質數的輸出
boolean isFlag = true;

for(int i = 2; i <= 100; i++){
	for(int j = 2; j < i; j++){
        if(i % j == 0){
            isFlag = False;
            break;
        }
	}
    if(isFlag == ture){
		System.out.println(i);
    }
    isFlag = true;
}


// 優化
 
boolean isFlag = true;

for(int i = 2; i <= 100; i++){
    // j < i的開方
	for(int j = 2; j <= Math.sqrt(i); j++){
        if(i % j == 0){
            isFlag = False;
            break;
        }
	}
    if(isFlag == ture){
		System.out.println(i);
    }
    isFlag = true;
}


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

-Advertisement-
Play Games
更多相關文章
  • 我的LeetCode:https://leetcode-cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 題目 字元串有三種編輯操作:插入一個字元、刪除一個字元或者替換 ...
  • 問題來源: 在寫二叉樹序列化與反序列化時發現序列化函數為char* Serialize1(TreeNode *root) 其函數返回類型為char*,但是我在實現的過程中為了更方便的操作添加字元串使用的是C++中string類型的變數,這就導致我最後得到的結果res是string類型,若是要返回需要 ...
  • C#與python的迭代器比較: 迭代器 C# Python 一個對象可迭代,需要實現IEnumerable(表示對象可數),IEnumerable就是要實現一個IEnumerator(迭代對象)。 這樣的說法曾經一度讓我很迷,如果返回一個已實現的類似於數組array、列表list類型的IEnume ...
  • 前言 Spring Boot 框架是目前非常流行的微服務框架,我們很多情況下使用它來提供 Rest API。而對於 Rest API 來說很重要的一部分內容就是文檔,Swagger 為我們提供了一套通過代碼和註解自動生成文檔的方法,這一點對於保證 API 文檔的及時性將有很大的幫助。本文將使用 Sw ...
  • from docx import Document word=Document(r' ') tale=word.tables[0] #第一種刪除單元格的方法 table.cell(0,0).text="" #第二種刪除單元格的方法 paragraph=table.cell(0,1).paragrap ...
  • 我個人對python的學習沒有那麼系統,一開始想改造引用的類庫,發現自己被一些語法問題卡頓,效率就低了。 於是就很想看看C#與python的比較,感覺這樣切語言適應起來會舒服些,我就自己寫吧。 買了一本書《深入理解Python特性》,嗯我總覺得那些像字典一樣的書實在難以提升我的學習興趣,這本書就很有 ...
  • 不知怎麼回事 ,今天寫小程式上傳圖片 之前是沒問題的,今天突然出現很多回車空格問題 那怎麼辦呢,處理唄 //去掉空格 str = str.replace(/\ +/g,""); console.log(str); //"{'retmsg':'success', //'trans_date':'201 ...
  • 接下來演示一遍如何通過寶塔面板安裝子楓後臺管理系統 在寶塔找到子楓後臺管理系統 軟體商店->一鍵部署->一鍵部署 點擊一鍵部署 填寫上功能變數名稱,設置好基本配置,然後點擊提交,進入安裝 點擊上圖鏈接打開系統安裝界面 進入子楓後臺系統安裝界面 到此 安裝成功 這是會彈出登錄頁面,輸入剛纔的賬號密碼登錄 高顏 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...