環境
并非所有的計算機都可以開發java程式,java程式的開發與運作需要專門的環境。
因為java語言的程式是運作在java所專有的系統中。
- 要運作java程式我們需要在作業系統(windows,MACOS,Linux)安裝jre(Java Runtime Environment,簡稱JRE)。
- 要編譯(開發)java程式,我們就需要安裝JDK(Java Development Kit)。
jre和JDK都是一個軟體,jre這個軟體可以運作java編譯後的程式。JDK中包含了JRE,JDK中不止有JRE還有java程式的編譯軟體。我們作為java程式員,隻要安裝JDK即可。
[1]安裝JDK
關鍵的步驟:
安裝完成之後,會在安裝的目錄中産生一個檔案夾:
java目錄中有一個JDK和JRE,檢視JDK的目錄下的内容:
[2]配置環境變量
我們要使用java -version檢視目前的JDK的版本。
打開指令視窗:
①在運作中輸入CMD,回車。
②按鍵盤上的win鍵+R鍵。
所有的指令視窗預設都是在C槽,
我們需要連接配接幾個簡單dos指令。
- 盤符切換 : 進入任何和一個盤符, 都是使用盤符名稱:比如 😄 :
- 進入某一個目錄: cd 目錄名稱
我們要執行java指令,就要進入jdk的bin目錄。
因為指令本身也是一段程式,所有要運作這個指令,必須能找到這個指令,是以我們要進入JDK的bin目錄才能執行java的指令。
我們不可能每次執行java程式都要進入這個bin目錄,是以要配置環境變量,環境變量的作用就是讓作業系統可以在任何位置都能找到java的指令。
配置環境變量開始:
建立使用者變量或者系統變量
修改PATH變量
建立編輯環境變量
測試運作環境和編譯環境的版本:
關注我:私信“資料”擷取Java進階架構資料、大廠面試試題、視訊
java語言的介紹
- java語言是所有的面向對象語言的帶頭大哥。
- java語言是目前位置跨平台做的最好的一門語言。
java語言的運作
第一個java程式:
在任何位置建立一個記事本檔案,字尾修改為.java
我這裡的命名是Hello.java
在其中編寫如下内容:
public class Hello{ public static void main(String []args){
System.out.println(“Hello Java!”);
}
}
儲存檔案之後,在檔案所在的目錄進行編譯。使用指令javac 檔案名,運作位元組碼檔案 :java Hello
關注我:私信“資料”擷取Java進階架構資料、大廠面試試題、視訊
第一個java程式的幾個問題:
- 源檔案的字尾必須是.java
- 源檔案的名字最好是英文,所有的單詞的首字母最好大寫。
- 程式中的類名和檔案名必須完全一緻
- java語言是嚴格區分大小寫的,是以該大寫的字母一定要大寫。
- 所有的标點符号必須是英文狀态輸入。
- 每一句程式結束了必須使用“;”結尾。
java程式的運作過程
java程式三步走:
①編寫源程式。 所謂源程式就是我們編寫的.java檔案。裡面的内容是程式員看得懂。
②編譯遠端。 使用javac指令将源程式編譯成位元組碼檔案(.class檔案)。java程式是運作在JVM上的,JVM隻認識位元組碼檔案。
③執行java位元組碼檔案。 使用java指令執行java位元組碼檔案。
JVM
JVM本身是一個軟體,在jre中就有JVM。
這台電腦使用的JVM是:
java語言一個非常重要的特性就是跨平台。
所謂跨平台,就是我們在任何一個作業系統中将java源程式編譯成位元組碼檔案,然後這個位元組碼檔案可以在任何其他的作業系統中正常運作。
java語言如何跨平台:
java語言跨平台就是通過JVM實作,java程式是運作在JVM上的,和作業系統本身是沒關系。JVM就像一個花盆,java程式就好像花盆中的一顆植物。這棵植物隻關心花盆,不關心花盆在哪裡。
不同的作業系統上有不同的JVM。這個寫JVM對java程式的解釋是一樣的。
是以Oracle為每一個不同的作業系統都提供了專門的JVM。 我們現在所說的JVM隻是一個規範(标準)。
目前市面上最流行的JVM就是HotSpot。就是全是的java的解釋器就隻有HotSpot。這就是它規範的原因。
開發工具
java程式的開發工具:
常見的開發工具:記事本、eclipse(免費的)、IDEA(可以試用一個月)、NetBeans…
關注我:私信“資料”擷取Java進階架構資料、大廠面試試題、視訊
java文法文法基礎
Hello程式的說明
我們的第一個java程式:
public class Hello { public static void main(String[] args) {
System.out.println(“Hello Java!”);
}
}
java程式的最小阻止單元是"類" (class)。
在java檔案中(.java結尾)編寫java類。
在Hello.java檔案中的寫法:
public class Hello是固定寫法。這裡Hello稱之為類名,類名必須和檔案名完全一緻。public和class 是固定的關鍵字。類中的程式要寫在一對{}
上面類中的:
public static void main(String[] args) {
System.out.println(“Hello Java!”);
}
稱之為主函數,主函數的簽名:public static void main(String[] args)固定寫法!!!。
主函數中要執行的程式要寫在一對{}中。 我們目前寫的就是在控制台輸出“Hello Java”。
基本結構:
類和主函數之間,主函數和要執行的程式之間都是有縮進的。這個縮進是一個制表符。任何一個結構的開始的{都是在語句的後面,結束的"}"都是在下面的。
資料類型
為什麼要有資料類型?
我們認知周邊的事物就是分類識别,同樣計算機要處理資料,也是分類處理資料,所有就有了資料類型。
java中的資料類型:
java中的8中基本資料類型:
- byte 位元組型。 在記憶體中占8個bit。 表示範圍是 -128 ~127
- shrot 短整型。 在内中占2個位元組。16個bit。 -32768 ~ 32767
- int 整形。 在記憶體中占4個位元組。 32個bit。-2147483648 ~ 2147483647
- long 長整型。在記憶體中占8個位元組。64個bit。-9223372036854775808 ~ 9223372036854775806
- float 浮點型。在記憶體中占4個位元組。32個bit。1.4E-45 ~ 3.4028235E38
- double雙精度型。在記憶體中占8個位元組。64個bit。4.9E-324 ~ 1.7976931348623157E308
- char字元型。表示"一個"字元。在記憶體中占2個位元組。16個bit。 0~ 65535
- boolean布爾型。表示true或者false。在記憶體中理論上占一個bit位。 在java中boolean的值隻有true和false。
特殊的引用類型:String 表示字元串。多個字元:“Hello”。
變量
變量是存儲資料的最小單元。
java語言是強資料類類型,申明變量的時候必須注名變量要存儲的資料類型。申請之後,變量的類型不能随意改變。
申請變量的文法:
資料類型 變量名;
給變量指派依然是使用指派運算符=:
變量名 = 變量的值 ; //申請的同時指派
資料類型 變量名 = 變量的值;
使用變量的時候,直接使用變量的名稱即可。
案例:
public class Demo1 { public static void main(String [] args){ // 申請變量
int age; // 給變量指派(不同資料類型,指派方式不一樣)
age = 18; // 整形直接寫數字即可。
// 申請的同時指派
double score = 86.9; // double類型的直接寫數字即可。
// 使用變量輸出這兩個變量值
System.out.println(age);
System.out.println(score);
}
}
不同類型的變量的指派方式:
// 不同類型的變量的指派方式
// byte類型, 數字,注意範圍不要超過byte的範圍
byte b = 127; // short,數字,主要範圍不要超過short範圍
short s = 32000; // int類型 數字,主要範圍不要超過int範圍
int i = 65432656; // long類型,數字,注意如果數字超過了int的範圍,則需要使用"L/l"表示目前數字是長整型
long l = 2111111111111110L; // 字元型 單個字元,必須使用單引号包裹
char ch = ‘男’; // 浮點型 如果指派是小數,必須有字尾"F/f"。
float f = 12.0F; // 雙精度型 數字,直接寫。 可以在後面使用"D/d"。
double d = 12.5; // boolean類型。 在java中boolean隻有true或者false。
boolean flag = true;
// 非基本類型的String 類型的名字是String,指派要使用雙引号
String name = “旗木卡卡西”;
命名規則和規範
類名,變量名的命名規則:(絕對不能觸犯)
- 不能以數字開頭
- 不能有特殊符号
- 不能是java的關鍵字或者保留字元。
類名,變量名的命名規範:
- 所有類名 單詞的首字母必須大寫 Demo
- 所有的變量名 第一個單詞全部小寫,其餘單詞的首字母必須大寫 firsrName
- 如果是縮寫,類名則全部大寫,變量名則全部小寫
- 言簡意赅。
- 盡量使用英文單詞,如果是拼音,不允許使用拼音和英文的混合。千萬不要使用拼音縮寫。更不要使用中文。
資料類型轉換
所謂資料類型轉換,就是各種不同的資料類型之間的轉換。
問題:不同的資料類型在記憶體中的所占的bit位是不一樣的。那麼數字 10 在記憶體中占多少bit位?
理論上數字10隻需要4個bit位(1010)。但是數字10有不同的類型:
byte b = 10; short s = 10; int i = 10; long l = 10; float f = 10; double d = 10;
上面的定義在記憶體中的情況:
任何一個類型在無論數值多大,在記憶體中占的位置大小是固定的。
我們将任何一個byte類型的資料直接指派給int類型,是否行得通?
byte x = ???;int i = x;
其實就是任何小的類型到大的類型都是自動轉換的。
還有一個特殊的情況就是: char可以自動轉換為int。
看圖記憶:
幾個問題:
給長整型指派:
當我們寫任何整形數字的時候,如果沒有任何修飾(字尾)。 這個數字預設是int類型。
如果是将這個數字指派給byte或者short,則預設會轉換為對應的類型,當然範圍必須在對應的類型的範圍内。
byte x = 10;short s = 100;
但是如果将整形數字指派給長整型變量,這個數字則預設就是整形的。如果超過了整形的範圍,就會報錯,必須使用"L"标明是長整型。
long l = 21111111110L;
給float指派:
float f = 12.5;
所有的小數在預設情況下都是double。 是以當給float的變量指派小數的時候,必須使用"F"字尾。
小的類型到大的類型是自動轉換的,那麼大類型能否轉換小類型。
計算機認為将int轉換為short的時候,空間放不下,可能會丢失資料。 我們知道不會丢失,是以我們可以強制轉換。
文法:[目标類型就是我們要轉換成的類型,源資料就是原始的資料]
目标類型 變量名 = (目标類型)源資料。
int x = 10; // 強制類型轉換
short s2 = (short)x;
上面的案例中是沒有資料丢失的。
double d = 12.5;// 強制類型轉換int a = (int)d;
System.out.println(a);
上面的強制類型轉換會導緻小數部分直接被丢棄。
基本類型和字元串之間的轉換
任何類型轉換為字元串 都可以使用 : xxxx + “”
字元串轉換為其他類型:
[1]字元串轉換為整形
前提是字元串必須是整數形式的字元串,比如: “128”,“369”。
操作文法:
String age = “20”;// 使用Integer.parseInt(str) 将字元串轉換為數字int age_ = Integer.parseInt(age);
System.out.println(age_);
如果字元串格式不争取,則會報錯:
[2]轉換為Float或者Double或者Short或者byte或者…
String str = “10”;
byte b1 = Byte.parseByte(str);
short s3 = Short.parseShort(str);
long ll = Long.parseLong(str);
float f1 = Float.parseFloat(str);
double d1 = Double.parseDouble(str);// 取出字元串中的某一個字元, 其中0就索引。char ch = str.charAt(0);String bstr = “false”;
boolean flag = Boolean.parseBoolean(bstr);
語句
控制台的輸出語句,純粹的為了友善我們學習,在實際工作中,幾乎沒啥用。
固定的文法:
System.out.print();// 輸出不換行System.out.println();// 輸出且換行
// 直接輸出一個字元串,并且換行System.out.println(“今天天氣不太好!”);
System.out.println(“的确不太好”);// 輸出字元串,但是不換行System.out.print(“這是第一行,”);
System.out.print(“還是第一行”);
System.out.println();// 輸出一個空的換行// 可以輸出任何類型的資料System.out.println(‘帥’);
System.out.println(15);
System.out.println(15L);
System.out.println(12.5);
System.out.println(true);// 可以在()中使用“+”連接配接任何類型和字元串System.out.println(“小明的名字是:” + “小明”);
System.out.println(“小明的成績是:” + 89);// 如果是兩個數字,”+“可能會出現數學運算System.out.println(5+6);// 任何變量都不需要雙引号,可以直接輸出或者使用"+"連接配接String name = “旗木卡卡西”;int age = 28;
System.out.println(name + “的年齡是” + age);int x = 3;int y = 4;int temp = x ;
x = y;
y = temp;
System.out.println("x = " + x);
System.out.println("y = " + y);
在輸出語句中還有一些特殊的符号
在字元串中可以使用\n表示換行。 可以使用\t表示一個制表符。可以使用\表示一個\
看案例:
// \n表示換行
System.out.println(“你好!\n 今天天氣不錯!”);
System.out.println(“張三\t李四\t王五”);
System.out.println(“我的程式在C:\code下”); // 輸出一個成績表
System.out.println(“姓名 國文 數學 英語”);
System.out.println(“張三 80 89 85”);
System.out.println(“張三豐 80 89 85”);
System.out.println(“卡卡西 80 89 85”);
System.out.println(“-------------------”);
System.out.println(“姓名\t國文\t數學\t英語”);
System.out.println(“張三\t80\t89\t85”);
System.out.println(“張三豐\t80\t89\t85”);
System.out.println(“卡卡西\t80\t89\t85”);
java基礎文法
運算符
[1]算數運算符
+,-,*,/,% ,++,–
和之前學習的JS中的使用完全一緻。
但是在強資料類型的語言中,一個表達式的最終的結果取決于這個表達式中類型最大的操作數。
案例:
int x = 5,y = 2; double z = x / y;
System.out.println("z = " + z);// 2.0
得到的z是2.0而不是2.5。 就是因為x和y都是int類型。是以結果會強制轉換為int類型。
案例:
int a = 5;
double b = 20.0 / 5;
應用問題:總共有168條資料。計劃每頁放20條資料,請計算總共需要多少頁?
//總共有168條資料。計劃每頁放20條資料,請計算總共需要多少頁?
int total = 168; int size = 20; //int maxPageNum = total % size == 0 ? total / size:(total / size + 1);
int maxPageNum = (int)Math.ceil(total * 1.0 / size);//ceil() 方法執行的是向上取整計算,它傳回的是大于或等于函數參數,并且與之最接近的整數。
System.out.println(“最大頁碼是:” + maxPageNum);
總結:
下面的情況: 後面的表達式中有double類型的操作,前面的變量是int類型,無法接收。
int m = 10 + 2 / 5 * ( 1.2 * 5);
解決方案:
①将對應的double類型的操作數強制轉換為int
int m = 10 + 2 / 5 * ( (int)1.2 * 5);
②将整個表達式的結果強制轉換為int
int m = (int)(10 + 2 / 5 * ( 1.2 * 5));
[2]關系運算符
,>=,<,<=,==,!=
java中沒有=和!
任何一個表達式中如果出現了比較運算符,則整個表達式的結果肯定是一個布爾值。
[3]邏輯運算符
!,&&,||***問題:&和&&有什麼差別?
&&和|| 有短路作用 。 在java中&和|也可以做邏輯運算,但是沒有短路作用。
案例:
int x = 3,y = 4;
boolean flag = x > 3 && (y = 5) > 4;
System.out.println(flag);
System.out.println("x = " + x);
System.out.println("y = " + y);
當我們使用"&&"的時候,最終的結果中flag = false,x = 3,y = 4。
當我們将“&&”修改為“&”的時候,flag = false, x = 3, y = 5;
[4]指派運算符
=,+=,-=,*=,/=,%=
[5]三目運算
當表達式1的結果為true的時候,整個表達式的結果是表達式2的結果否則是表達式3的結果
表達式1?表達式2:表達式3;
應用:找出兩個數中較大的一個數。
int m = 5,n = 7;int max = m > n ? m : n;
System.out.println(max);
流程控制
分支流程
[1]if系列
if(表達式){if語句;}
if(表達式){if語句}else{else語句}
if(表達式){if語句}else if(表達式){elseif語句}…[else]
上面的分支語句的文法中所有的表達式都必須是布爾類型的。
在JS中if(表達式)會自動轉換布爾值。但是在java中不行的。
[2]switch
switch(表達式){ case value1:
statement1; break;// 可選
case value2:
statement2: break;
… default:
statement;
}
在JDK1.7之前switch中的表達式隻能是int或者char類型或者枚舉。不能是任何其他類型。
在JDK1.7之後,新增了String。
循環流程
[1]while(){}
要注意的是:()中的表達式必須是布爾值。
java中的while往往使用來做不知道循環次數的循環,或者死循環。
問題:錄入學身的成績,并且計算平均分。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); int score = 0; int sum = 0; int count = 1; while(true){
System.out.println(“請錄入第”+count+“位同學的成績(輸入-1表示結束):”);
score = sc.nextInt(); if(score == -1){ break;
}
sum += score;
count++;
}
System.out.println(“總共錄入了”+count+“位同學的成績,平均分為:”+(sum / count));
}
[2]do{}while();
表達式也必須是布爾值。 和while的差別就是肯定至少會執行一次。
[3]for(;😉{}
for(;😉{}for(表達式1;表達式2;表達式3){
循環語句
}
第一次進入for循環的時候,首先執行表達式1,在判斷表達式2,如果是true執行循環語句,如果是false就退出循環。在此我向大家推薦一個架構學習交流圈。交流學習指導僞鑫:1253431195(裡面有大量的面試題及答案)裡面會分享一些資深架構師錄制的視訊錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多
當循環語句執行結束之後,執行表達式3,繼續判斷表示2的結果,根據結果進入下次循環或者退出循環。
for(int i = 0;i< 10;i++){
System.out.println(i);
}
[4]break和continue
break:跳出整個循環。
continue:結束本次循環,繼續下次循環。
控制台輸入
我們可以使用System.out.print()在控制台輸出任何内容。
我們也可以使用System.in.read()在控制台錄入任何内容。
java提供了一個專門的類,Scanner,這個Scanner可以從控制台錄入任何基本資料類型。
用法:
// ①引入Scanner包import java.util.Scanner;public class Demo{ public static void main(String[] args) { // ②建立一個Scanner對象
Scanner sc = new Scanner(System.in); // ③錄入資料
// 錄入一個字元串
System.out.println(“請輸入您的姓名:”);
String name = sc.next();// 讀取字元串
System.out.println(“請輸入您的年齡:”); int age = sc.nextInt();// 讀取控制台的整形數字
System.out.println(“姓名:”+name+“\n年齡:”+age);
}
}
注意的事情:
[1]sc.next() 按照 空字元 截斷字元串
如果輸入内容如下:
旗木 卡卡西
隻能讀取到旗木而卡卡西會進入下一個API的調用(可能會報錯)。
如果一行的輸入中一定是有空格的,則可以使用sc.nextLine();
[2]讀取控制台的數字 :
- sc.nextInt()
- sc.nextDouble()
- sc.nextFloat()
當使用這些API的時候,輸入的格式必須正确,否則就會報異常:
變量作用域
所謂變量的作用域就是這個變量從申明到結束。(這個變量可以使用的位置)
java 中變量的作用域就是從變量的申明開始,到離這個變量最近的結束的“}”結束。
public class Demo6 { // 成員變量,作用域是在整個類中。
static String name = “這是一個成員變量”; public static void main(String[] args) { // 局部變量 在main方法中使用
int x = 10; if (x > 5){ // 局部變量,隻能在if語句塊中使用。
int z = 100;
} // 變量a和y 都隻能在for循環中使用
// a在整個循環中都可以使用。
// y 每次循環都會建立一個新的。
for(int a = 0;a > 10; a --){ int y = 1000;
System.out.println(“0”);
} // 如果要在main方法中使用成員變量,則成員變量必須使用static修飾。
System.out.println(name);
}
}
雙層循環
問題1:在控制台輸出矩形
public class Demo7 { public static void main(String[] args) { public class Demo12 { public static void main(String[] args) { long a =1,b = 1; for(int x = 3; x <= 56;x ++){ // 計算下一個數
long m = a + b;
System.out.println(“第”+x+“位是”+m); // b指派給a,m指派給b
a = b;
b = m;
}
}
}
數組
變量就是在記憶體中開辟一個空間,存儲一個資料,然後給這個空間起一個别名。他們和在一起就是一個變量。
數組就是在記憶體開辟一組連續的空間,這組連續的空間的格式是一緻的。給這組連續的空間一起起一個别名。給每個空間給上編号。他們和在一起就是一個數組。
數組的幾個特點:
- 在記憶體中是連續的空間,每個空間都有對應的索引。索引都是從0開始的。
- 一個數組中的資料類型都是一緻的。
- 數組一旦初始化,長度是不能改變的。
數組的初始化和簡單使用
[1]數組的申明和初始化
在java中數組使用 []申明,文法
[]在數組名的前面或者後面都可以,但是一般寫在數組名的前面 。 數組名的命名要求和變量名的命名要求完全一緻。在此我向大家推薦一個架構學習交流圈。交流學習指導僞鑫:1253431195(裡面有大量的面試題及答案)裡面會分享一些資深架構師錄制的視訊錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多
案例:
// 申明數組int [] scores;String [] names;
數組的初始化:文法
方式1:
數組名 = new 資料類型[length]; // 這裡的length必須存在,是整形
方式2:
數組名 = new 資料類型[]{“卡卡西”,“佐助”,“鳴人”} // 直接給數組元素指派的情況下,千萬不要寫length
方式3:
// 申明數組的同時初始化資料類型 [] 數組名 = {25,68,98,54,56} // 直接使用{}給數組指派,但是這種方式隻能使用在申明的同時就初始化的情況。
案例:
// 初始化scores = new int [5]; // scores中的5個元素的預設值都是0names = new String[]{“卡卡西”,“佐助”,“小丸子”};// 不要寫長度// 申明數組的同時初始化double [] ds = {12.5,12.3,12.6};
當我們使用方式1建立了一個數組的時候,這個數組是有預設值的。
String [] names = new String[10]; // 這個數組的預設值是 null。
各種不同的資料類型的數組的預設值是:
- byte [] 預設值 0
- short [] 預設值 0
- int [] 預設值 0
- long[] 預設值 0L
- float [] 預設值 0.0F
- double [] 預設值 0.0D
- char [] 預設值\u000其實就是一個空字元
- boolean [] 預設值是 false。
- 其他類型 數組 預設值全部是 null。
[2]數組的使用
tips:在java中數組元素的索引隻能是int類型。
擷取指定索引的元素:
String name = 數組名[index];
給指定索引的元素指派:
數組名[index ] = “哈哈”;
擷取數組的元素個數
int length = 數組名.length;
tips:在java中任何使用我們使用的數組的索引超過了數組元素的索引界限時,都會抛出異常。
案例:
public class Demo14 { public static void main(String[] args) { // 申明數組
int [] scores;
String [] names; // 初始化
scores = new int [5]; // scores中的5個元素的預設值都是0
names = new String[]{“卡卡西”,“佐助”,“小丸子”};// 不要寫長度
// 申明數組的同時初始化
double [] ds = {12.5,12.3,12.6}; // 數組的簡單使用
String [] ns = new String[5];
ns[0] = “大聖”;
ns[1] = “二師兄”;
ns[2] = “小丸子”;
ns[3] = “喬峰”;
ns[4] = “虛竹”; // 擷取數組的中某一個元素
String name = ns[1];
System.out.println(“name-1:”+name);
System.out.println(“------------------”); for (int i = 0;i < ns.length; i ++){
System.out.println(ns[i]);
}
}
}
冒泡排序
排序是所有算法中最為重要的。在筆試中非常的常見。
筆試題:對如下的數組進行從大到小的排序
int[] arr = {56,86,25,47,98,25,35};
所謂排序是說在程式執行結束之後,記憶體中的數組修改為如下的樣式
int[] arr = {98,86,56,47,35,25,25};
import java.util.Arrays;
public class Demo2 {
public static void main(String[] args) { int[] arr = {56,86,25,47,98,25,35}; for(int i = 0; i < arr.length - 1;i ++){// 執行多少輪
for (int j = 0;j < arr.length - 1 - i;j ++){// 内部循環的次數是 逐個遞減
// 比較j和j+1兩個元素的大小
if(arr[j] < arr[j + 1]){ // 交換兩個元素的位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
斷點調試
找bug: 如果程式報錯了,根據錯誤提示可以查找問題所在。 如果程式沒有報錯,就必須猜測問題所在。 斷點調試查找問題。bug不是文法錯誤。
寫好程式,在需要調試的位置添加斷點:
加好斷點之後,右鍵debug啟動。啟動之後,程式會暫停在添加斷點的位
看完如果有幫助,希望可以給個 三連 ,你的鼓勵就是我不斷前進的動力。謝謝
關注我:私信“資料”擷取Java進階架構資料、大廠面試試題、視訊