一、關鍵字&識別符號
關鍵字:被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. 算術運算子
+ - + - * / % ++ -- +
- /: int i = 12; i = i / 5;
- %:最后的符號只跟被模數相同
- 前++:先+1,后運算 后++:先運算,后+1
- +: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,2的型別一致
- 運算式1與運算式2 的資料型別一致
- 使用三元運算子的,一定可以轉換為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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/150683.html
標籤:Java
