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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...