@
目錄
- 第一章 認識 HelloWorld
- 1.命名
- 1. 命名規則
- 2. 命名規範
- 1.命名
- 第二章 常量
- 第三章 變量和資料類型
- 3.1 變量概述
- 3.2 資料類型
- 3.3 變量的定義
- 3.4 注意事項
- 基本資料類型
- 引用資料類型
- 第四章 資料類型轉換
- 4.1 自動轉換
- 4.2 強制類型轉換
- 4.3 Ascall編碼表
- 第五章 運算符
- 5.1 算數運算符
- 5.2 指派運算符
- 5.3 比較運算符
- 5.4 邏輯運算符
- 5.5 三元運算符
- 第六章 方法入門
- 6.1 矩形列印
- 6.2 方法的定義格式與三種調用格式
- 6.3 方法有參調用,與無參調用
- 6.4 有傳回值與無傳回值
- 1. 比較兩個數字
- 2. 前100項和
- 3. 列印指定次數的内容
- 4.注意事項
- 第七章 Jshell腳本工具
- 第八章 流程控制
- 8.1 順序結構
- 8.2 單if語句
- 8.3 标準的if-else語句
- 8.4 多分支語句
- 題目:使用三元運算符和标準的if-else語句分别實作:取兩個數字當中的最大值
- 8.5 開關語句
- 8.6 for循環
- 8.7 while循環
- 8.8 do-while循環
- 題目:求出1-100之間的偶數和。
- 8.9 三種循環的差別
- 8.10 break關鍵字的用法
- 8.11 continue關鍵字
- 8.12 死循環
- 8.13 嵌套循環體
- 第九章 方法重載
- 9.1知識點
- 1.比較兩個資料是否相等。
- 2. 判斷哪些是正确的重載
- 3. 實作重載的pri
- 9.1知識點
- 第十章 數組
- 10.1 定義與動态初始化
- 10.2 靜态初始化
- 10.3 靜态動态省略格式
- 10.4 靜态動态初始化取值
- 靜态初始化取值
- 動态初始化取值
- 10.5 記憶體劃分
- 記憶體主要劃分5個部分
- 隻有一個數組的記憶體圖
- 有兩個數組的記憶體圖
- 兩個引用指向同一個數組的記憶體圖
- 10.6 數組索引越界異常
- 10.7 空指針異常
- 10.8 擷取數組的長度
- 10.9 數組的周遊輸出
- 求數組中的最大值
- 數組元素的反轉
- 10.10 數組作為方法參數
- 10.11 數組作為方法傳回值
javac 檔案名.java 編譯
java 檔案名 運作
idea常用快捷鍵

注釋方法與C語言相同
// 第一行的第三個單詞必須和所在的檔案名稱完全一樣,大小寫也要一樣
//public class 後面代表定義一個類的名稱,類是Java當中所有源代碼的基本組織機關。
public class HelloWorld {
// 第二行是萬年不變的固定寫法,代表main方法
// 這一行代表程式執行的起點
public static void main(String[] args){
// 第三行代表列印輸出語句(其實就是螢幕顯示)
System.out.println("Hello,World!");
}
}
1.1 硬性要求
- 辨別符可以包含英文26個字母(區分大小寫)、0-9數字、$(美元符号) 和 _(下劃線)
- 辨別符不能以數字開頭
- 辨別符不能是關鍵字
2.1 軟性建議
- 類名規範:首字母大寫,後面每個單詞首字母大寫(大駝峰式)。HelloWorld
- 變量名規範:首字母小寫,後面每個單詞首字母大寫(小駝峰式)helloWorld
- 方法名規範:同變量名
常量:在程式運作期間,固定不變的量
常量的分類:
- 字元串常量:凡是用雙引号引起來的部分,叫做字元串常量,例如:“abc”、“Hello”、“123”
- 整數常量:直接寫上的數字,沒有小數點,例如:100、200、0、-250
- 浮點數常量:直接寫上的數字,有小數點。例如:2.5、-3.14、0.0
- 字元常量:凡是用單引号引起來的單個字元,就做字元常量。例如:‘A’、'b'、'9'、'中'
- 布爾常量:隻有量中取值。true、false.
- 空常量:null.代表沒有任何資料
public class test {
public static void main(String[] args) {
// 字元串常量
System.out.println("ABC");
System.out.println("");
System.out.println("XYZ");
// 整數常量
System.out.println(30);
System.out.println(-500);
// 浮點數常量(小數)
System.out.println(1.14);
System.out.println(-2.5);
//字元常量
System.out.println('A');
System.out.println('6');
//System.out.println('')//兩個單引号中間必須僅有一個字元,沒有不行。
//System.out.println('AB');//兩個單引号中間必須僅有一個字元,兩個不行。
//布爾常量
System.out.println(true);
System.out.println(false);
//空常量,空常量不能直接用來列印輸出。
//System.out.println(null);
}
}
-
變量:常量是固定不變的資料,那麼在程式中可以變化的量稱為變量。
數學中,可以使用字母代替數字運算,例如x=1+5或者6=x+5。
程式中,可以使用字母儲存數字的方式進行運算,提高計算能力,可以解決更多的問題。别不x儲存5,x也可以儲存6,這樣x儲存的資料是可以改變的,也就是我們所講解的變量。
Java中要求一個變量每次隻能儲存一個資料,必須要明确儲存的資料類型。
/*
變量:程式運作期間,内容可以發生改變的量。
建立一個變量并且使用的格式:
資料類型 變量名稱; // 建立了一個變量
變量名稱 = 資料值; // 指派,将右邊的資料值,指派交給左邊的變量
一步到位的格式:
資料類型 變量名稱 = 資料值; // 在建立一個變量的同時,立刻放入指定的資料值
*/
public class Demo02Variable {
public static void main(String[] args) {
// 建立一個變量
// 格式:資料類型 變量名稱;
int num1;
// 向變量當中存入一個資料
// 格式:變量名稱 = 資料值;
num1 = 10;
// 當列印輸出變量名稱的時候,顯示出來的是變量的内容
System.out.println(num1); // 10
// 改變變量當中本來的數字,變成新的數字
num1 = 20;
System.out.println(num1); // 20
// 使用一步到位的格式來定義變量
// 格式:資料類型 變量名稱 = 資料值;
int num2 = 25;
System.out.println(num2); // 25
num2 = 35;
System.out.println(num2); // 35
System.out.println("===============");
byte num3 = 30; // 注意:右側數值的範圍不能超過左側資料類型的取值範圍
System.out.println(num3); // 30
// byte num4 = 400; // 右側超出了byte資料範圍,錯誤!
short num5 = 50;
System.out.println(num5); // 50
long num6 = 3000000000L;
System.out.println(num6); // 3000000000
float num7 = 2.5F;
System.out.println(num7); // 2.5
double num8 = 1.2;
System.out.println(num8); // 1.2
char zifu1 = 'A';
System.out.println(zifu1); // A
zifu1 = '中';
System.out.println(zifu1); // 中
boolean var1 = true;
System.out.println(var1); // true
var1 = false;
System.out.println(var1); // false
// 将一個變量的資料内容,指派交給另一個變量
// 右側的變量名稱var1已經存在,裡面裝的是false布爾值
// 将右側變量裡面的false值,向左交給var2變量進行存儲
boolean var2 = var1;
System.out.println(var2); // false
}
}
/*
使用變量的時候,有一些注意事項:
1. 如果建立多個變量,那麼變量之間的名稱不可以重複。
2. 對于float和long類型來說,字母字尾F和L不要丢掉。
3. 如果使用byte或者short類型的變量,那麼右側的資料值不能超過左側類型的範圍。
4. 沒有進行指派的變量,不能直接使用;一定要指派之後,才能使用。
5. 變量使用不能超過作用域的範圍。
【作用域】:從定義變量的一行開始,一直到直接所屬的大括号結束為止。
6. 可以通過一個語句來建立多個變量,但是一般情況不推薦這麼寫。
*/
public class Demo03VariableNotice {
public static void main(String[] args) {
int num1 = 10; // 建立了一個新的變量,名叫num1
// int num1 = 20; // 又建立了另一個新的變量,名字也叫num1,錯誤!
int num2 = 20;
int num3;
num3 = 30;
int num4; // 定義了一個變量,但是沒有進行指派
// System.out.println(num4); // 直接使用列印輸出就是錯誤的!
// System.out.println(num5); // 在建立變量之前,不能使用這個變量
int num5 = 500;
System.out.println(num5); // 500
{
int num6 = 60;
System.out.println(num6); // 60
}
// int num6;
// System.out.println(num6); // 已經超出了大括号的範圍,超出了作用域,變量不能再使用了
// 同時建立了三個全都是int類型的變量
int a, b, c;
// 各自分别指派
a = 10;
b = 20;
c = 30;
System.out.println(a); // 10
System.out.println(b); // 20
System.out.println(c); // 30
// 同時建立三個int變量,并且同時各自指派
int x = 100, y = 200, z = 300;
System.out.println(x); // 100
System.out.println(y); // 200
System.out.println(z); // 300
}
}
- 整數型 byte short int long
- 浮點型 float double
- 字元型 char
- 布爾型 boolean
字元串、數組、類、接口、Lambda
注意事項:
- 字元串不是基本類型,而是引用類型。
- 浮點型可能隻是一個近似值,并非精确的值。
- 資料範圍與位元組數不一定相關,例如float資料範圍比long更加廣泛,但是float是4位元組,long是8位元組。
-
浮點數當中預設類型是double。如果一定要使用float類型,需要加上一個字尾F。
如果是整數,預設為int類型,如果一定要使用long類型,需要加上一個字尾L。推薦使用大寫字母字尾。
Java基礎學習 ->(個人學習記錄筆記)
/*
當資料類型不一樣時,将會發生資料類型轉換。
自動類型裝換(隐式)
1. 特點:代碼不需要進行特殊處理,自動完成。
2. 規則:資料範圍從小到大。
強制類型轉換(顯式)
*/
public class Demo01DataType{
public static void main(String[] srgs){
System.out.println(1024);//這就是一個整數,預設就是int類型
System.out.println(3.14);//這就是一個浮點數,預設是就是double類型
// 左邊是long類型,右邊是預設的int類型,左右不一樣
// 一個等号代表指派,将右側的int常量,交給左側的long變量進行存儲
// int --> long,符合了資料範圍從小到大的要求
// 這一行代碼發生了自動類型轉換。
long num1 = 100;
System.out.println(num1); //100
// 左邊是double類型,右邊是float類型,左右不一樣
// float-->double,符合了資料範圍從小到大的規則
// 也發生了自動類型轉換
double num2 = 2.5F;
System.out.println(num2);//2.5
// 左邊是float類型,右邊是long類型,左右不一樣
// long-->float,範圍是float更大一些,符合了資料範圍從小到大的規則
//也發生了自動類型轉換
float num3 = 30L;
}
}
/*
強制類型轉換
1. 特點:代碼需要進行特殊的格式處理,不能自動完成。
2. 格式:範圍小的類型 範圍小的變量名 = (範圍小的類型) 原本範圍大的資料;
注意事項:
1. 強制類型轉換一般不推薦使用,因為有可能發生精度損失、資料溢出。
2. byte/short/char這三種類型都可以發生數學運算,例如加法“+”.
3. byte/short/char這三種類型在運算的時候,都會被首先提升成為int類型,然後再計算。
4. boolean類型不能發生資料類型轉換
*/
public class Demo02DataType {
public static void main(String[] args) {
// 左邊是int類型,右邊是long類型,不一樣
// long --> int,不是從小到大
// 不能發生自動類型轉換!
// 格式:範圍小的類型 範圍小的變量名 = (範圍小的類型) 原本範圍大的資料;
int num = (int) 100L;
System.out.println(num);
// long強制轉換成為int類型 資料溢出
int num2 = (int) 6000000000L;
System.out.println(num2); // 1705032704
// double --> int,強制類型轉換
int num3 = (int) 3.99;
System.out.println(num3); // 3,這并不是四舍五入,所有的小數位都會被舍棄掉
char zifu1 = 'A'; // 這是一個字元型變量,裡面是大寫字母A
System.out.println(zifu1 + 1); // 66,也就是大寫字母A被當做65進行處理
// 計算機的底層會用一個數字(二進制)來代表字元A,就是65
// 一旦char類型進行了數學運算,那麼字元就會按照一定的規則翻譯成為一個數字
byte num4 = 40; // 注意!右側的數值大小不能超過左側的類型範圍
byte num5 = 50;
// byte + byte --> int + int --> int
int result1 = num4 + num5;
System.out.println(result1); // 90
short num6 = 60;
// byte + short --> int + int --> int
// int強制轉換為short:注意必須保證邏輯上真實大小本來就沒有超過short範圍,否則會發生資料溢出
short result2 = (short) (num4 + num6);
System.out.println(result2); // 100
}
}
/*
數字和字元的對照關系表(編碼表):
ASCII碼表:American Standard Code for Information Interchange,美國資訊交換标準代碼。
Unicode碼表:萬國碼。也是數字和符号的對照關系,開頭0-127部分和ASCII完全一樣,但是從128開始包含有更多字元。
48 - '0'
65 - 'A'
97 - 'a'
*/
public class Demo03DataTypeChar {
public static void main(String[] args) {
char zifu1 = '1';
System.out.println(zifu1 + 0); // 49
char zifu2 = 'A'; // 其實底層儲存的是65數字
char zifu3 = 'c';
// 左側是int類型,右邊是char類型,
// char --> int,确實是從小到大
// 發生了自動類型轉換
int num = zifu3;
System.out.println(num); // 99
char zifu4 = '中'; // 正确寫法
System.out.println(zifu4 + 0); // 20013
}
}
/*
運算符:進行特定操作的符号。例如:+
表達式:用運算符連起來的式子叫做表達式。例如:20 + 5。又例如:a + b
四則運算:
加:+
減:-
乘:*
除:/
取模(取餘數):%
首先計算得到表達式的結果,然後再列印輸出這個結果。
複習一下國小一年級的除法公式:
被除數 / 除數 = 商 ... 餘數
對于一個整數的表達式來說,除法用的是整除,整數除以整數,結果仍然是整數。隻看商,不看餘數。
隻有對于整數的除法來說,取模運算符才有餘數的意義。
注意事項:
1. 一旦運算當中有不同類型的資料,那麼結果将會是資料類型範圍大的那種。
*/
public class Demo04Operator {
public static void main(String[] args) {
// 兩個常量之間可以進行數學運算
System.out.println(20 + 30);
// 兩個變量之間也可以進行數學運算
int a = 20;
int b = 30;
System.out.println(a - b); // -10
// 變量和常量之間可以混合使用
System.out.println(a * 10); // 200
int x = 10;
int y = 3;
int result1 = x / y;
System.out.println(result1); // 3
int result2 = x % y;
System.out.println(result2); // 餘數,模,1
// int + double --> double + double --> double
double result3 = x + 2.5;
System.out.println(result3); // 12.5
}
}
/*
四則運算當中的加号“+”有常見的三種用法:
1. 對于數值來說,那就是加法。
2. 對于字元char類型來說,在計算之前,char會被提升成為int,然後再計算。
char類型字元,和int類型數字,之間的對照關系表:ASCII、Unicode
3. 對于字元串String(首字母大寫,并不是關鍵字)來說,加号代表字元串連接配接操作。
任何資料類型和字元串進行連接配接的時候,結果都會變成字元串
*/
public class Demo05Plus {
public static void main(String[] args) {
// 字元串類型的變量基本使用
// 資料類型 變量名稱 = 資料值;
String str1 = "Hello";
System.out.println(str1); // Hello
System.out.println("Hello" + "World"); // HelloWorld
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 20); // Java20
// 優先級問題
// String + int + int
// String + int
// String
System.out.println(str2 + 20 + 30); // Java2030
System.out.println(str2 + (20 + 30)); // Java50
}
}
/*
自增運算符:++
自減運算符:--
基本含義:讓一個變量漲一個數字1,或者讓一個變量降一個數字1
使用格式:寫在變量名稱之前,或者寫在變量名稱之後。例如:++num,也可以num++
使用方式:
1. 單獨使用:不和其他任何操作混合,自己獨立成為一個步驟。
2. 混合使用:和其他操作混合,例如與指派混合,或者與列印操作混合,等。
使用差別:
1. 在單獨使用的時候,前++和後++沒有任何差別。也就是:++num;和num++;是完全一樣的。
2. 在混合的時候,有【重大差別】
A. 如果是【前++】,那麼變量【立刻馬上+1】,然後拿着結果進行使用。 【先加後用】
B. 如果是【後++】,那麼首先使用變量本來的數值,【然後再讓變量+1】。 【先用後加】
注意事項:
隻有變量才能使用自增、自減運算符。常量不可發生改變,是以不能用。
*/
public class Demo06Operator {
public static void main(String[] args) {
int num1 = 10;
System.out.println(num1); // 10
++num1; // 單獨使用,前++
System.out.println(num1); // 11
num1++; // 單獨使用,後++
System.out.println(num1); // 12
System.out.println("=================");
// 與列印操作混合的時候
int num2 = 20;
// 混合使用,先++,變量立刻馬上變成21,然後列印結果21
System.out.println(++num2); // 21
System.out.println(num2); // 21
System.out.println("=================");
int num3 = 30;
// 混合使用,後++,首先使用變量本來的30,然後再讓變量+1得到31
System.out.println(num3++); // 30
System.out.println(num3); // 31
System.out.println("=================");
int num4 = 40;
// 和指派操作混合
int result1 = --num4; // 混合使用,前--,變量立刻馬上-1變成39,然後将結果39交給result1變量
System.out.println(result1); // 39
System.out.println(num4); // 39
System.out.println("=================");
int num5 = 50;
// 混合使用,後--,首先把本來的數字50交給result2,然後我自己再-1變成49
int result2 = num5--;
System.out.println(result2); // 50
System.out.println(num5); // 49
System.out.println("=================");
int x = 10;
int y = 20;
// 11 + 20 = 31
int result3 = ++x + y--;
System.out.println(result3); // 31
System.out.println(x); // 11
System.out.println(y); // 19
// 30++; // 錯誤寫法!常量不可以使用++或者--
}
}
/*
指派運算符分為:
基本指派運算符:就是一個等号“=”,代表将右側的資料交給左側的變量。
int a = 30;
複合指派運算符:
+= a += 3 相當于 a = a + 3
-= b -= 4 相當于 b = b - 4
*= c *= 5 相當于 c = c * 5
/= d /= 6 相當于 d = d / 6
%= e %= 7 相當于 e = e % 7
注意事項:
1. 隻有變量才能使用指派運算符,常量不能進行指派。
2. 複合指派運算符其中隐含了一個強制類型轉換。
*/
public class Demo07Operator {
public static void main(String[] args) {
int a = 10;
// 按照公式進行翻譯:a = a + 5
// a = 10 + 5;
// a = 15;
// a本來是10,現在重新指派得到15
a += 5;
System.out.println(a); // 15
int x = 10;
// x = x % 3;
// x = 10 % 3;
// x = 1;
// x本來是10,現在重新指派得到1
x %= 3;
System.out.println(x); // 1
// 50 = 30; // 常量不能進行指派,不能寫在指派運算符的左邊。錯誤寫法!
byte num = 30;
// num = num + 5;
// num = byte + int
// num = int + int
// num = int
// num = (byte) int
num += 5;
System.out.println(num); // 35
}
}
/*
比較運算符:
大于: >
小于: <
大于等于: >=
小于等于: <=
相等: == 【兩個等号連寫才是相等,一個等号代表的是指派】
不相等: !=
注意事項:
1. 比較運算符的結果一定是一個boolean值,成立就是true,不成立就是false
2. 如果進行多次判斷,不能連着寫。
數學當中的寫法,例如:1 < x < 3
程式當中【不允許】這種寫法。
*/
public class Demo08Operator {
public static void main(String[] args) {
System.out.println(10 > 5); // true
int num1 = 10;
int num2 = 12;
System.out.println(num1 < num2); // true
System.out.println(num2 >= 100); // false
System.out.println(num2 <= 100); // true
System.out.println(num2 <= 12); // true
System.out.println("===============");
System.out.println(10 == 10); // true
System.out.println(20 != 25); // true
System.out.println(20 != 20); // false
int x = 2;
// System.out.println(1 < x < 3); // 錯誤寫法!編譯報錯!不能連着寫。
}
}
/*
與(并且) && 全都是true,才是true;否則就是false
或(或者) || 至少一個是true,就是true;全都是false,才是false
非(取反) ! 本來是true,變成false;本來是false,變成true
與“&&”,或“||”,具有短路效果:如果根據左邊已經可以判斷得到最終結果,那麼右邊的代碼将不再執行,進而節省一定的性能。
注意事項:
1. 邏輯運算符隻能用于boolean值。
2. 與、或需要左右各自有一個boolean值,但是取反隻要有唯一的一個boolean值即可。
3. 與、或兩種運算符,如果有多個條件,可以連續寫。
兩個條件:條件A && 條件B
多個條件:條件A && 條件B && 條件C
TIPS:
對于1 < x < 3的情況,應該拆成兩個部分,然後使用與運算符連接配接起來:
int x = 2;
1 < x && x < 3
*/
public class Demo09Logic {
public static void main(String[] args) {
System.out.println(true && false); // false
// true && true --> true
System.out.println(3 < 4 && 10 > 5); // true
System.out.println("============");
System.out.println(true || false); // true
System.out.println(true || true); // true
System.out.println(false || false); // false
System.out.println("============");
System.out.println(true); // true
System.out.println(!true); // false
System.out.println("============");
int a = 10;
// false && ...
System.out.println(3 > 4 && ++a < 100); // false
System.out.println(a); // 10
System.out.println("============");
int b = 20;
// true || ...
System.out.println(3 < 4 || ++b < 100); // true
System.out.println(b); // 20
}
}
/*
一進制運算符:隻需要一個資料就可以進行操作的運算符。例如:取反!、自增++、自減--
二進制運算符:需要兩個資料才可以進行操作的運算符。例如:加法+、指派=
三元運算符:需要三個資料才可以進行操作的運算符。
格式:
資料類型 變量名稱 = 條件判斷 ? 表達式A : 表達式B;
流程:
首先判斷條件是否成立:
如果成立為true,那麼将表達式A的值指派給左側的變量;
如果不成立為false,那麼将表達式B的值指派給左側的變量;
二者選其一。
注意事項:
1. 必須同時保證表達式A和表達式B都符合左側資料類型的要求。
2. 三元運算符的結果必須被使用。
*/
public class Demo10Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 資料類型 變量名稱 = 條件判斷 ? 表達式A : 表達式B;
// 判斷a > b是否成立,如果成立将a的值指派給max;如果不成立将b的值指派給max。二者選其一
int max = a > b ? a : b; // 最大值的變量
System.out.println("最大值:" + max); // 20
// int result = 3 > 4 ? 2.5 : 10; // 錯誤寫法!
System.out.println(a > b ? a : b); // 正确寫法!
// a > b ? a : b; // 錯誤寫法!
}
}
/*
定義一個方法的格式:
public static void 方法名稱() {
方法體
}
方法名稱的命名規則和變量一樣,使用小駝峰。
方法體:也就是大括号當中可以包含任意條語句。
注意事項:
1. 方法定義的先後順序無所謂。
2. 方法的定義不能産生嵌套包含關系。
3. 方法定義好了之後,不會執行的。如果要想執行,一定要進行方法的【調用】。
如何調用方法,格式:
方法名稱();
*/
public class Demo11Method {
public static void main(String[] args) {
farmer(); // 調用農民的方法
seller(); // 調用小商販的方法
cook(); // 調用廚子的方法
me(); // 調用我自己的方法
}
// 廚子
public static void cook() {
System.out.println("洗菜");
System.out.println("切菜");
System.out.println("炒菜");
System.out.println("裝盤");
}
// 我
public static void me() {
System.out.println("吃");
}
// 小商販
public static void seller() {
System.out.println("運輸到農貿市場");
System.out.println("擡高價格");
System.out.println("吆喝");
System.out.println("賣給廚子");
}
// 農民伯伯
public static void farmer() {
System.out.println("播種");
System.out.println("澆水");
System.out.println("施肥");
System.out.println("除蟲");
System.out.println("收割");
System.out.println("賣給小商販");
}
}
/*
複習一下此前學習的方法基礎入門知識。
定義格式:
public static void 方法名稱() {
方法體
}
調用格式:
方法名稱();
注意事項:
1. 方法定義的先後順序無所謂。
2. 方法定義必須是挨着的,不能在一個方法的内部定義另外一個方法。
3. 方法定義之後,自己不會執行的;如果希望執行,一定要進行方法的調用。
*/
public class Demo01Method {
public static void main(String[] args) {
printMethod();
}
public static void printMethod() {
for (int j = 0; j < 5; j++) {
for (int i = 0; i < 20; i++) {
System.out.print("*");
}
System.out.println();
}
}
}
/*
方法其實就是若幹語句的功能集合。
方法好比是一個工廠。
蒙牛工廠 原料:奶牛、飼料、水
産出物:奶制品
鋼鐵工廠 原料:鐵礦石、煤炭
産出物:鋼鐵建材
參數(原料):就是進入方法的資料。
傳回值(産出物):就是從方法中出來的資料。
定義方法的完整格式:
修飾符 傳回值類型 方法名稱(參數類型 參數名稱, ...) {
方法體
return 傳回值;
}
修飾符:現階段的固定寫法,public static
傳回值類型:也就是方法最終産生的資料結果是什麼類型
方法名稱:方法的名字,規則和變量一樣,小駝峰
參數類型:進入方法的資料是什麼類型
參數名稱:進入方法的資料對應的變量名稱
PS:參數如果有多個,使用逗号進行分隔
方法體:方法需要做的事情,若幹行代碼
return:兩個作用,第一停止目前方法,第二将後面的傳回值還給調用處
傳回值:也就是方法執行後最終産生的資料結果
注意:return後面的“傳回值”,必須和方法名稱前面的“傳回值類型”,保持對應。
定義一個兩個int數字相加的方法。三要素:
傳回值類型:int
方法名稱:sum
參數清單:int a, int b
方法的三種調用格式。
1. 單獨調用:方法名稱(參數);
2. 列印調用:System.out.println(方法名稱(參數));
3. 指派調用:資料類型 變量名稱 = 方法名稱(參數);
注意:此前學習的方法,傳回值類型固定寫為void,這種方法隻能夠單獨調用,不能進行列印調用或者指派調用。
*/
public class Demo02MethodDefine {
public static void main(String[] args) {
// 單獨調用
sum(10, 20);
System.out.println("===========");
// 列印調用
System.out.println(sum(10, 20)); // 30
System.out.println("===========");
// 指派調用
int number = sum(15, 25);
number += 100;
System.out.println("變量的值:" + number); // 140
}
public static int sum(int a, int b) {
System.out.println("方法執行啦!");
int result = a + b;
return result;
}
/*
有參數:小括号當中有内容,當一個方法需要一些資料條件,才能完成任務的時候,就是有參數。
例如兩個數字相加,必須知道兩個數字是各自多少,才能相加。
無參數:小括号當中留白。一個方法不需要任何資料條件,自己就能獨立完成任務,就是無參數。
例如定義一個方法,列印固定10次HelloWorld。
*/
public class Demo03MethodParam {
public static void main(String[] args) {
method1(10, 20);
System.out.println("==============");
method2();
}
// 兩個數字相乘,做乘法,必須知道兩個數字各自是多少,否則無法進行計算
// 有參數
public static void method1(int a, int b) {
int result = a * b;
System.out.println("結果是:" + result);
}
// 例如列印輸出固定10次文本字元串
public static void method2() {
for (int i = 0; i < 10; i++) {
System.out.println("Hello, World!" + i);
}
}
}
/*
題目要求:定義一個方法,用來【求出】兩個數字之和。(你幫我算,算完之後把結果告訴我。)
題目變形:定義一個方法,用來【列印】兩個數字之和。(你來計算,算完之後你自己負責顯示結果,不用告訴我。)
注意事項:
對于有傳回值的方法,可以使用單獨調用、列印調用或者指派調用。
但是對于無傳回值的方法,隻能使用單獨調用,不能使用列印調用或者指派調用。
*/
public class Demo04MethodReturn {
public static void main(String[] args) {
// 我是main方法,我來調用你。
// 我調用你,你來幫我計算一下,算完了之後,把結果告訴我的num變量
int num = getSum(10, 20);
System.out.println("傳回值是:" + num);
System.out.println("==============");
printSum(100, 200);
System.out.println("==============");
System.out.println(getSum(2, 3)); // 正确寫法
getSum(3, 5); // 正确寫法,但是傳回值沒有用到
System.out.println("==============");
// 對于void沒有傳回值的方法,隻能單獨,不能列印或者指派
// System.out.println(printSum(2, 3)); // 錯誤寫法!
// System.out.println(void);
// int num2 = printSum(10, 20); // 錯誤寫法!
// int num3 = void;
// void num4 = void;
}
// 我是一個方法,我負責兩個數字相加。
// 我有傳回值int,誰調用我,我就把計算結果告訴誰
public static int getSum(int a, int b) {
int result = a + b;
return result;
}
// 我是一個方法,我負責兩個數字相加。
// 我沒有傳回值,不會把結果告訴任何人,而是我自己進行列印輸出。
public static void printSum(int a, int b) {
int result = a + b;
System.out.println("結果是:" + result);
}
}
/*
題目要求:
定義一個方法,用來判斷兩個數字是否相同。
*/
public class Demo01MethodSame {
public static void main(String[] args) {
System.out.println(isSame(10, 20)); // false
System.out.println(isSame(20, 20)); // true
}
/*
三要素:
傳回值類型:boolean
方法名稱:isSame
參數清單:int a, int b
*/
public static boolean isSame(int a, int b) {
/*boolean same;
if (a == b) {
same = true;
} else {
same = false;
}*/
// boolean same = a == b ? true : false;
// boolean same = a == b;
return a == b;
}
}
/*
題目要求:
定義一個方法,用來求出1-100之間所有數字的和值。
*/
public class Demo02MethodSum {
public static void main(String[] args) {
System.out.println("結果是:" + getSum());
}
/*
三要素
傳回值:有傳回值,計算結果是一個int數字
方法名稱:getSum
參數清單:資料範圍已經确定,是固定的,是以不需要告訴我任何條件,不需要參數
*/
public static int getSum() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
/*
題目要求:
定義一個方法,用來列印指定次數的HelloWorld。
*/
public class Demo03MethodPrint {
public static void main(String[] args) {
printCount(10);
}
/*
三要素
傳回值類型:隻是進行一大堆列印操作而已,沒有計算,也沒有結果要告訴調用處
方法名稱:printCount
參數清單:到底要列印多少次?必須告訴我,否則我不知道多少次,沒法列印。次數:int
*/
public static void printCount(int num) {
for (int i = 0; i < num; i++) {
System.out.println("Hello, World!" + (i + 1));
}
}
}
/*
使用方法的時候,注意事項:
1. 方法應該定義在類當中,但是不能在方法當中再定義方法。不能嵌套。
2. 方法定義的前後順序無所謂。
3. 方法定義之後不會執行,如果希望執行,一定要調用:單獨調用、列印調用、指派調用。
4. 如果方法有傳回值,那麼必須寫上“return 傳回值;”,不能沒有。
5. return後面的傳回值資料,必須和方法的傳回值類型,對應起來。
6. 對于一個void沒有傳回值的方法,不能寫return後面的傳回值,隻能寫return自己。
7. 對于void方法當中最後一行的return可以省略不寫。
8. 一個方法當中可以有多個return語句,但是必須保證同時隻有一個會被執行到,兩個return不能連寫。
*/
public class Demo04MethodNotice {
public static int method1() {
return 10;
}
public static void method2() {
// return 10; // 錯誤的寫法!方法沒有傳回值,return後面就不能寫傳回值。
return; // 沒有傳回值,隻是結束方法的執行而已。
}
public static void method3() {
System.out.println("AAA");
System.out.println("BBB");
// return; // 最後一行的return可以省略不寫。
}
public static int getMax(int a, int b) {
/*int max;
if (a > b) {
max = a;
} else {
max = b;
}
return max;*/
if (a > b) {
return a;
} else {
return b;
}
}
}
C:\Users\22509>jshell
| 歡迎使用 JShell -- 版本 15.0.1
| 要大緻了解該版本, 請鍵入: /help intro
jshell> /help intro
|
| intro
| =====
|
| 使用 jshell 工具可以執行 Java 代碼,進而立即擷取結果。
| 您可以輸入 Java 定義(變量、方法、類等等),例如:int x = 8
| 或 Java 表達式,例如:x + x
| 或 Java 語句或導入。
| 這些小塊的 Java 代碼稱為“片段”。
|
| 這些 jshell 工具指令還可以讓您了解和
| 控制您正在執行的操作,例如:/list
|
| 有關指令的清單,請執行:/help
jshell> System.out.p
print( printf( println(
jshell> System.out.println("hello,world");
hello,world
jshell> int a = 10;
a ==> 10
jshell> int b = 20;
b ==> 20
jshell> int result = a*b;
result ==> 200
jshell> /exit
| 再見
/*
對于byte/short/char三種類型來說,如果右側指派的數值沒有超過範圍,
那麼javac編譯器将會自動隐含地為我們補上一個(byte)(short)(char)。
1. 如果沒有超過左側的範圍,編譯器補上強轉。
2. 如果右側超過了左側範圍,那麼直接編譯器報錯。
*/
public class Demo12Notice {
public static void main(String[] args) {
// 右側确實是一個int數字,但是沒有超過左側的範圍,就是正确的。
// int --> byte,不是自動類型轉換
byte num1 = /*(byte)*/ 30; // 右側沒有超過左側的範圍
System.out.println(num1); // 30
// byte num2 = 128; // 右側超過了左側的範圍
// int --> char,沒有超過範圍
// 編譯器将會自動補上一個隐含的(char)
char zifu = /*(char)*/ 65;
System.out.println(zifu); // A
}
}
/*
在給變量進行指派的時候,如果右側的表達式當中全都是常量,沒有任何變量,
那麼編譯器javac将會直接将若幹個常量表達式計算得到結果。
short result = 5 + 8; // 等号右邊全都是常量,沒有任何變量參與運算
編譯之後,得到的.class位元組碼檔案當中相當于【直接就是】:
short result = 13;
右側的常量結果數值,沒有超過左側範圍,是以正确。
這稱為“編譯器的常量優化”。
但是注意:一旦表達式當中有變量參與,那麼就不能進行這種優化了。
*/
public class Demo13Notice {
public static void main(String[] args) {
short num1 = 10; // 正确寫法,右側沒有超過左側的範圍,
short a = 5;
short b = 8;
// short + short --> int + int --> int
// short result = a + b; // 錯誤寫法!左側需要是int類型
// 右側不用變量,而是采用常量,而且隻有兩個常量,沒有别人
short result = 5 + 8;
System.out.println(result);
short result2 = 5 + a + 8; // 18 報錯 不再常量優化
}
}
// 順序結構
public class Demo01Sequence {
public static void main(String[] args) {
System.out.println("今天天氣不錯");
System.out.println("挺風和日麗的");
System.out.println("我們下午沒課");
System.out.println("這的确挺爽的");
}
}
// 單if語句
public class Demo02If {
public static void main(String[] args) {
System.out.println("今天天氣不錯,正在壓馬路……突然發現一個快樂的地方:網吧");
int age = 19;
if (age >= 18) {
System.out.println("進入網吧,開始high!");
System.out.println("遇到了一群豬隊友,開始罵街。");
System.out.println("感覺不爽,結賬走人。");
}
System.out.println("回家吃飯");
}
}
// 标準的if-else語句
public class Demo03IfElse {
public static void main(String[] args) {
int num = 666;
if (num % 2 == 0) { // 如果除以2能夠餘數為0,說明是偶數
System.out.println("偶數");
} else {
System.out.println("奇數");
}
}
}
public class Demo05IfElsePractise {
public static void main(String[] args) {
int score = 120;
if (score >= 90 && score <= 100) {
System.out.println("優秀");
} else if (score >= 80 && score < 90) {
System.out.println("好");
} else if (score >= 70 && score < 80) {
System.out.println("良");
} else if (score >= 60 && score < 70) {
System.out.println("及格");
} else if (score >= 0 && score < 60) {
System.out.println("不及格");
} else { // 單獨處理邊界之外的不合理情況
System.out.println("資料錯誤");
}
}
}
// 題目:使用三元運算符和标準的if-else語句分别實作:取兩個數字當中的最大值
public class Demo06Max {
public static void main(String[] args) {
int a = 105;
int b = 20;
// 首先使用三元運算符
// int max = a > b ? a : b;
// 使用今天的if語句
int max;
if (a > b) {
max = a;
} else {
max = b;
}
System.out.println("最大值:" + max);
}
}
public class Demo07Switch {
public static void main(String[] args) {
int num = 10;
switch (num) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("資料不合理");
break; // 最後一個break語句可以省略,但是強烈推薦不要省略
}
}
}
/*
switch語句使用的注意事項:
1. 多個case後面的數值不可以重複。
2. switch後面小括号當中隻能是下列資料類型:
基本資料類型:byte/short/char/int
引用資料類型:String字元串、enum枚舉
3. switch語句格式可以很靈活:前後順序可以颠倒,而且break語句還可以省略。
“比對哪一個case就從哪一個位置向下執行,直到遇到了break或者整體結束為止。”
*/
public class Demo08SwitchNotice {
public static void main(String[] args) {
int num = 2;
switch (num) {
case 1:
System.out.println("你好");
break;
case 2:
System.out.println("我好");
// break;
case 3:
System.out.println("大家好");
break;
default:
System.out.println("他好,我也好。");
break;
} // switch
}
}
/*
循環結構的基本組成部分,一般可以分成四部分:
1. 初始化語句:在循環開始最初執行,而且隻做唯一一次。
2. 條件判斷:如果成立,則循環繼續;如果不成立,則循環退出。
3. 循環體:重複要做的事情内容,若幹行語句。
4. 步進語句:每次循環之後都要進行的掃尾工作,每次循環結束之後都要執行一次。
*/
public class Demo09For {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
System.out.println("我錯啦!原諒我吧!" + i);
}
System.out.println("程式停止");
}
}
/*
while循環有一個标準格式,還有一個擴充格式。
标準格式:
while (條件判斷) {
循環體
}
擴充格式:
初始化語句;
while (條件判斷) {
循環體;
步進語句;
}
*/
public class Demo10While {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("我錯啦!" + i);
}
System.out.println("=================");
int i = 1; // 1. 初始化語句
while (i <= 10) { // 2. 條件判斷
System.out.println("我錯啦!" + i); // 3. 循環體
i++; // 4. 步進語句
}
}
}
/*
do-while循環的标準格式:
do {
循環體
} while (條件判斷);
擴充格式:
初始化語句
do {
循環體
步進語句
} while (條件判斷);
*/
public class Demo11DoWhile {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("原諒你啦!起來吧!地上怪涼!" + i);
}
System.out.println("===============");
int i = 1; // 1. 初始化語句
do {
System.out.println("原諒你啦!起來吧!地上怪涼!" + i); // 3. 循環體
i++; // 4. 步進語句
} while (i <= 10); // 2. 條件判斷
}
}
/*
題目:求出1-100之間的偶數和。
思路:
1. 既然範圍已經确定了是1到100之間,那麼我就從1、2、3……一直到100這麼多數字一個一個進行檢查。
2. 總共有100個數字,并非所有數字都能用。必須要是偶數才能用,判斷(if語句)偶數:num % 2 == 0
3. 需要一個變量,用來進行累加操作。也就好比是一個存錢罐。
*/
public class Demo12HundredSum {
public static void main(String[] args) {
int sum = 0; // 用來累加的存錢罐
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) { // 如果是偶數
sum += i;
}
}
System.out.println("結果是:" + sum);
}
}
/*
三種循環的差別。
1. 如果條件判斷從來沒有滿足過,那麼for循環和while循環将會執行0次,但是do-while循環會執行至少一次。
2. for循環的變量在小括号當中定義,隻有循環内部才可以使用。while循環和do-while循環初始化語句本來就在外面,是以出來循環之後還可以繼續使用。
*/
public class Demo13LoopDifference {
public static void main(String[] args) {
for (int i = 1; i < 0; i++) {
System.out.println("Hello");
}
// System.out.println(i); // 這一行是錯誤寫法!因為變量i定義在for循環小括号内,隻有for循環自己才能用。
System.out.println("================");
int i = 1;
do {
System.out.println("World");
i++;
} while (i < 0);
// 現在已經超出了do-while循環的範圍,我們仍然可以使用變量i
System.out.println(i); // 2
}
}
/*
break關鍵字的用法有常見的兩種:
1. 可以用在switch語句當中,一旦執行,整個switch語句立刻結束。
2. 還可以用在循環語句當中,一旦執行,整個循環語句立刻結束。打斷循環。
關于循環的選擇,有一個小建議:
凡是次數确定的場景多用for循環;否則多用while循環。
*/
public class Demo14Break {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
// 如果希望從第4次開始,後續全都不要了,就要打斷循環
if (i == 4) { // 如果目前是第4次
break; // 那麼就打斷整個循環
}
System.out.println("Hello" + i);
}
}
}
/*
另一種循環控制語句是continue關鍵字。
一旦執行,立刻跳過目前次循環剩餘内容,馬上開始下一次循環。
*/
public class Demo15Continue {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 4) { // 如果目前是第4層
continue; // 那麼跳過目前次循環,馬上開始下一次(第5層)
}
System.out.println(i + "層到了。");
}
}
}
/*
永遠停不下來的循環,叫做死循環。
死循環的标準格式:
while (true) {
循環體
}
*/
public class Demo16DeadLoop {
public static void main(String[] args) {
while (true) {
System.out.println("I Love Java!");
}
// System.out.println("Hello");
}
}
public class Demo17LoopHourAndMinute {
public static void main(String[] args) {
for (int hour = 0; hour < 24; hour++) { // 外層控制小時
for (int minute = 0; minute < 60; minute++) { // 内層控制小時之内的分鐘
System.out.println(hour + "點" + minute + "分");
}
}
}
}
/*
對于功能類似的方法來說,因為參數清單不一樣,卻需要記住那麼多不同的方法名稱,太麻煩。
方法的重載(Overload):多個方法的名稱一樣,但是參數清單不一樣。
好處:隻需要記住唯一一個方法名稱,就可以實作類似的多個功能。
方法重載與下列因素相關:
1. 參數個數不同
2. 參數類型不同
3. 參數的多類型順序不同
方法重載與下列因素無關:
1. 與參數的名稱無關
2. 與方法的傳回值類型無關
*/
public class Demo01MethodOverload {
public static void main(String[] args) {
/*System.out.println(sumTwo(10, 20)); // 30
System.out.println(sumThree(10, 20, 30)); // 60
System.out.println(sumFour(10, 20, 30, 40)); // 100*/
System.out.println(sum(10, 20)); // 兩個參數的方法
System.out.println(sum(10, 20, 30)); // 三個參數的方法
System.out.println(sum(10, 20, 30, 40)); // 四個參數的方法
// System.out.println(sum(10, 20, 30, 40, 50)); // 找不到任何方法來比對,是以錯誤!
sum(10, 20);
}
public static int sum(int a, double b) {
return (int) (a + b);
}
public static int sum(double a, int b) {
return (int) (a + b);
}
public static int sum(int a, int b) {
System.out.println("有2個參數的方法執行!");
return a + b;
}
// 錯誤寫法!與方法的傳回值類型無關
// public static double sum(int a, int b) {
// return a + b + 0.0;
// }
// 錯誤寫法!與參數的名稱無關
// public static int sum(int x, int y) {
// return x + y;
// }
public static int sum(double a, double b) {
return (int) (a + b);
}
public static int sum(int a, int b, int c) {
System.out.println("有3個參數的方法執行!");
return a + b + c;
}
public static int sum(int a, int b, int c, int d) {
System.out.println("有4個參數的方法執行!");
return a + b + c + d;
}
}
/*
題目要求:
比較兩個資料是否相等。
參數類型分别為兩個byte類型,兩個short類型,兩個int類型,兩個long類型,
并在main方法中進行測試。
*/
public class Demo02MethodOverloadSame {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
System.out.println(isSame(a, b));
System.out.println(isSame((short) 20, (short) 20));
System.out.println(isSame(11, 12));
System.out.println(isSame(10L, 10L));
}
public static boolean isSame(byte a, byte b) {
System.out.println("兩個byte參數的方法執行!");
boolean same;
if (a == b) {
same = true;
} else {
same = false;
}
return same;
}
public static boolean isSame(short a, short b) {
System.out.println("兩個short參數的方法執行!");
boolean same = a == b ? true : false;
return same;
}
public static boolean isSame(int a, int b) {
System.out.println("兩個int參數的方法執行!");
return a == b;
}
public static boolean isSame(long a, long b) {
System.out.println("兩個long參數的方法執行!");
if (a == b) {
return true;
} else {
return false;
}
}
}
public static void open(){} // 正确重載
public static void open(int a){} // 正确重載
static void open(int a,int b){} // 代碼錯誤:和第8行沖突
public static void open(double a,int b){} // 正确重載
public static void open(int a,double b){} // 代碼錯誤:和第6行沖突
public void open(int i,double d){} // 代碼錯誤:和第5行沖突
public static void OPEN(){} // 代碼正确不會報錯,但是并不是有效重載
public static void open(int i,int j){} // 代碼錯誤:和第3行沖突
// byte short int long float double char boolean
// String
// 在調用輸出語句的時候,println方法其實就是進行了多種資料類型的重載形式。
public class Demo04OverloadPrint {
public static void main(String[] args) {
myPrint(100); // int
myPrint("Hello"); // String
}
public static void myPrint(byte num) {
System.out.println(num);
}
public static void myPrint(short num) {
System.out.println(num);
}
public static void myPrint(int num) {
System.out.println(num);
}
public static void myPrint(long num) {
System.out.println(num);
}
public static void myPrint(float num) {
System.out.println(num);
}
public static void myPrint(double num) {
System.out.println(num);
}
public static void myPrint(char zifu) {
System.out.println(zifu);
}
public static void myPrint(boolean is) {
System.out.println(is);
}
public static void myPrint(String str) {
System.out.println(str);
}
}
/*
數組的概念:是一種容器,可以同時存放多個資料值。
數組的特點:
1. 數組是一種引用資料類型
2. 數組當中的多個資料,類型必須統一
3. 數組的長度在程式運作期間不可改變
數組的初始化:在記憶體當中建立一個數組,并且向其中賦予一些預設值。
兩種常見的初始化方式:
1. 動态初始化(指定長度)
2. 靜态初始化(指定内容)
動态初始化數組的格式:
資料類型[] 數組名稱 = new 資料類型[數組長度];
解析含義:
左側資料類型:也就是數組當中儲存的資料,全都是統一的什麼類型
左側的中括号:代表我是一個數組
左側數組名稱:給數組取一個名字
右側的new:代表建立數組的動作
右側資料類型:必須和左邊的資料類型保持一緻
右側中括号的長度:也就是數組當中,到底可以儲存多少個資料,是一個int數字
*/
public class Demo01Array {
public static void main(String[] args) {
// 建立一個數組,裡面可以存放300個int資料
// 格式:資料類型[] 數組名稱 = new 資料類型[數組長度];
int[] arrayA = new int[300];
// 建立一個數組,能存放10個double類型的資料
double[] arrayB = new double[10];
// 建立一個數組,能存放5個字元串
String[] arrayC = new String[5];
}
}
/*
動态初始化(指定長度):在建立數組的時候,直接指定數組當中的資料元素個數。
靜态初始化(指定内容):在建立數組的時候,不直接指定資料個數多少,而是直接将具體的資料内容進行指定。
靜态初始化基本格式:
資料類型[] 數組名稱 = new 資料類型[] { 元素1, 元素2, ... };
注意事項:
雖然靜态初始化沒有直接告訴長度,但是根據大括号裡面的元素具體内容,也可以自動推算出來長度。
*/
public class Demo02Array {
public static void main(String[] args) {
// 直接建立一個數組,裡面裝的全都是int數字,具體為:5、15、25
int[] arrayA = new int[] { 5, 15, 25, 40 };
// 建立一個數組,用來裝字元串:"Hello"、"World"、"Java"
String[] arrayB = new String[] { "Hello", "World", "Java" };
}
}
/*
使用靜态初始化數組的時候,格式還可以省略一下。
标準格式:
資料類型[] 數組名稱 = new 資料類型[] { 元素1, 元素2, ... };
省略格式:
資料類型[] 數組名稱 = { 元素1, 元素2, ... };
注意事項:
1. 靜态初始化沒有直接指定長度,但是仍然會自動推算得到長度。
2. 靜态初始化标準格式可以拆分成為兩個步驟。
3. 動态初始化也可以拆分成為兩個步驟。
4. 靜态初始化一旦使用省略格式,就不能拆分成為兩個步驟了。
使用建議:
如果不确定數組當中的具體内容,用動态初始化;否則,已經确定了具體的内容,用靜态初始化。
*/
public class Demo03Array {
public static void main(String[] args) {
// 省略格式的靜态初始化
int[] arrayA = { 10, 20, 30 };
// 靜态初始化的标準格式,可以拆分成為兩個步驟
int[] arrayB;
arrayB = new int[] { 11, 21, 31 };
// 動态初始化也可以拆分成為兩個步驟
int[] arrayC;
arrayC = new int[5];
// 靜态初始化的省略格式,不能拆分成為兩個步驟。
// int[] arrayD;
// arrayD = { 10, 20, 30 };
}
}
/*
直接列印數組名稱,得到的是數組對應的:記憶體位址哈希值。
二進制:01
十進制:0123456789
16進制:0123456789abcdef
通路數組元素的格式:數組名稱[索引值]
索引值:就是一個int數字,代表數組當中元素的編号。
【注意】索引值從0開始,一直到“數組的長度-1”為止。
*/
public class Demo04ArrayUse {
public static void main(String[] args) {
// 靜态初始化的省略格式
int[] array = { 10, 20, 30 };
System.out.println(array); // [I@75412c2f
// 直接列印數組當中的元素
System.out.println(array[0]); // 10
System.out.println(array[1]); // 20
System.out.println(array[2]); // 30
System.out.println("=============");
// 也可以将數組當中的某一個單個元素,指派交給變量
int num = array[1];
System.out.println(num); // 20
}
}
/*
使用動态初始化數組的時候,其中的元素将會自動擁有一個預設值。規則如下:
如果是整數類型,那麼預設為0;
如果是浮點類型,那麼預設為0.0;
如果是字元類型,那麼預設為'\u0000';
如果是布爾類型,那麼預設為false;
如果是引用類型,那麼預設為null。
注意事項:
靜态初始化其實也有預設值的過程,隻不過系統自動馬上将預設值替換成為了大括号當中的具體數值。
*/
public class Demo05ArrayUse {
public static void main(String[] args) {
// 動态初始化一個數組
int[] array = new int[3];
System.out.println(array); // 記憶體位址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
System.out.println("=================");
// 将資料123指派交給數組array當中的1号元素
array[1] = 123;
System.out.println(array[0]); // 0
System.out.println(array[1]); // 123
System.out.println(array[2]); // 0
}
}
public class Demo01ArrayOne {
public static void main(String[] args) {
int[] array = new int[3]; // 動态初始化
System.out.println(array); // 位址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
System.out.println("==============");
// 改變數組當中元素的内容
array[1] = 10;
array[2] = 20;
System.out.println(array); // 位址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 10
System.out.println(array[2]); // 20
}
}
public class Demo02ArrayTwo {
public static void main(String[] args) {
int[] arrayA = new int[3];
System.out.println(arrayA); // 位址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 位址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("==============");
int[] arrayB = new int[3];
System.out.println(arrayB); // 位址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 0
System.out.println(arrayB[2]); // 0
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 位址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
}
public class Demo03ArraySame {
public static void main(String[] args) {
int[] arrayA = new int[3];
System.out.println(arrayA); // 位址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 0
System.out.println(arrayA[2]); // 0
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); // 位址值
System.out.println(arrayA[0]); // 0
System.out.println(arrayA[1]); // 10
System.out.println(arrayA[2]); // 20
System.out.println("==============");
// 将arrayA數組的位址值,指派給arrayB數組
int[] arrayB = arrayA;
System.out.println(arrayB); // 位址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 10
System.out.println(arrayB[2]); // 20
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); // 位址值
System.out.println(arrayB[0]); // 0
System.out.println(arrayB[1]); // 100
System.out.println(arrayB[2]); // 200
}
}
/*
數組的索引編号從0開始,一直到“數組的長度-1”為止。
如果通路數組元素的時候,索引編号并不存在,那麼将會發生
數組索引越界異常
ArrayIndexOutOfBoundsException
原因:索引編号寫錯了。
解決:修改成為存在的正确索引編号。
*/
public class Demo01ArrayIndex {
public static void main(String[] args) {
int[] array = { 15, 25, 35 };
System.out.println(array[0]); //15
System.out.println(array[1]); // 25
System.out.println(array[2]); // 35
// 錯誤寫法
// 并不存在3号元素,是以發生異常
System.out.println(array[3]);
}
}
/*
所有的引用類型變量,都可以指派為一個null值。但是代表其中什麼都沒有。
數組必須進行new初始化才能使用其中的元素。
如果隻是指派了一個null,沒有進行new建立,
那麼将會發生:
空指針異常 NullPointerException
原因:忘了new
解決:補上new
*/
public class Demo02ArrayNull {
public static void main(String[] args) {
int[] array = null;
// array = new int[3];
System.out.println(array[0]);
}
}
/*
如何擷取數組的長度,格式:
數組名稱.length
這将會得到一個int數字,代表數組的長度。
數組一旦建立,程式運作期間,長度不可改變。
*/
public class Demo03ArrayLength {
public static void main(String[] args) {
int[] arrayA = new int[3];
int[] arrayB = {10, 20, 30, 3, 5, 4, 6, 7, 8, 8, 65, 4, 44, 6, 10, 3, 5, 4, 6, 7, 8, 8, 65, 4};
int len = arrayB.length;
System.out.println("arrayB數組的長度是:" + len);
System.out.println("=============");
int[] arrayC = new int[3];
System.out.println(arrayC.length); // 3
arrayC = new int[5];
System.out.println(arrayC.length); // 5
}
}
/*
周遊數組,說的就是對數組當中的每一個元素進行逐一、挨個兒處理。預設的處理方式就是列印輸出。
*/
public class Demo04Array {
public static void main(String[] args) {
int[] array = { 15, 25, 30, 40, 50, 60, 75 };
// 首先使用原始方式
System.out.println(array[0]); // 15
System.out.println(array[1]); // 25
System.out.println(array[2]); // 30
System.out.println(array[3]); // 40
System.out.println(array[4]); // 50
System.out.println(array[5]); // 50
System.out.println("=================");
// 使用循環,次數其實就是數組的長度。
for (int i = 0; i < 6; i++) {
System.out.println(array[i]);
}
System.out.println("=================");
// int len = array.length; // 長度
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
public class Demo05ArrayMax {
public static void main(String[] args) {
int[] array = { 5, 15, 30, 20, 10000, 30, 35 };
int max = array[0]; // 比武擂台
for (int i = 1; i < array.length; i++) {
// 如果目前元素,比max更大,則換人
if (array[i] > max) {
max = array[i];
}
}
// 誰最後最厲害,就能在max當中留下誰的戰鬥力
System.out.println("最大值:" + max);
}
}
public class Demo06ArrayMin {
public static void main(String[] args) {
int[] array = { 5, 15, 30, 20, 10000, -20, 30, 35 };
int min = array[0]; // 比武擂台
for (int i = 1; i < array.length; i++) {
// 如果目前元素,比min更小,則換人
if (array[i] < min) {
min = array[i];
}
}
System.out.println("最小值:" + min);
}
}
/*
數組元素的反轉:
本來的樣子:[1, 2, 3, 4]
之後的樣子:[4, 3, 2, 1]
要求不能使用新數組,就用原來的唯一一個數組。
*/
public class Demo07ArrayReverse {
public static void main(String[] args) {
int[] array = { 10, 20, 30, 40, 50 };
// 周遊列印數組本來的樣子
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println("============");
/*
初始化語句:int min = 0, max = array.length - 1
條件判斷:min < max
步進表達式:min++, max--
循環體:用第三個變量倒手
*/
for (int min = 0, max = array.length - 1; min < max; min++, max--) {
int temp = array[min];
array[min] = array[max];
array[max] = temp;
}
// 再次列印周遊輸出數組後來的樣子
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
/*
數組可以作為方法的參數。
當調用方法的時候,向方法的小括号進行傳參,傳遞進去的其實是數組的位址值。
*/
public class Demo01ArrayParam {
public static void main(String[] args) {
int[] array = { 10, 20, 30, 40, 50 };
System.out.println(array); // 位址值
printArray(array); // 傳遞進去的就是array當中儲存的位址值
System.out.println("==========AAA==========");
printArray(array);
System.out.println("==========BBB==========");
printArray(array);
}
/*
三要素
傳回值類型:隻是進行列印而已,不需要進行計算,也沒有結果,用void
方法名稱:printArray
參數清單:必須給我數組,我才能列印其中的元素。int[] array
*/
public static void printArray(int[] array) {
System.out.println("printArray方法收到的參數是:");
System.out.println(array); // 位址值
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
/*
一個方法可以有0、1、多個參數;但是隻能有0或者1個傳回值,不能有多個傳回值。
如果希望一個方法當中産生了多個結果資料進行傳回,怎麼辦?
解決方案:使用一個數組作為傳回值類型即可。
任何資料類型都能作為方法的參數類型,或者傳回值類型。
數組作為方法的參數,傳遞進去的其實是數組的位址值。
數組作為方法的傳回值,傳回的其實也是數組的位址值。
*/
public class Demo02ArrayReturn {
public static void main(String[] args) {
int[] result = calculate(10, 20, 30);
System.out.println("main方法接收到的傳回值數組是:");
System.out.println(result); // 位址值
System.out.println("總和:" + result[0]);
System.out.println("平均數:" + result[1]);
}
public static int[] calculate(int a, int b, int c) {
int sum = a + b + c; // 總和
int avg = sum / 3; // 平均數
// 兩個結果都希望進行傳回
// 需要一個數組,也就是一個塑膠兜,數組可以儲存多個結果
/*
int[] array = new int[2];
array[0] = sum; // 總和
array[1] = avg; // 平均數
*/
int[] array = { sum, avg };
System.out.println("calculate方法内部數組是:");
System.out.println(array); // 位址值
return array;
}
}