內容介紹
- 3.8 布爾型別變數
- 3.9 字串型別變數
- 3.10 變數的作用域
- 3.11 變數的命名規則
- 3.12 常量
- 3.13 型別轉換
- 3.14 數值提升
- 3.15 int 和 String 之間的相互轉換
- 3.16 小結
- 4 運算子
- 4.1 算術運算子
- 4.2 關系運算子
- 4.3 邏輯運算子
- 4.4 位運算子
- 4.5 移位運算
- 4.6 條件運算子
- 4.7 運算子的優先級
- 4.8 運算子總結
- 5 注釋
- 5.1 基本規則
- 5.2 注釋規范
??今天我們接著上一篇文章講解基本Java語法
3.8 布爾型別變數
基本語法格式:
boolean 變數名 = 初始值;
代碼示例:
boolean value = true;
System.out.println(value);
🐾注意事項:
boolean 型別的變數只有兩種取值, true 表示真, false 表示假.Java 的 boolean 型別和 int 不能相互轉換, 不存在 1 表示 true, 0 表示 false 這樣的用法.- boolean 型別有些 JVM 的實作是占 1 個位元組, 有些是占 1 個位元位, 這個沒有明確規定(型別大小不確定)
錯誤示范:
boolean value = true;
System.out.println(value + 1);
// 代碼編譯會出現如下錯誤
Test.java:4: 錯誤: 二元運算子 ‘+’ 的運算元型別錯誤
System.out.println(value + 1);
^
第一個型別: boolean
第二個型別: int
1 個錯誤
3.9 字串型別變數
🔑跟C語言不同,Java是有單獨的字串型別的,
基本語法格式:
String 變數名 = “初始值”;
代碼示例:
String name = "zhangsan";
System.out.println(name);
注意事項:
- Java 使用 雙引號 + 若干字符 的方式表示字串字面值.
- 和上面的型別不同,
String 不是基本型別, 而是參考型別.- 字串中的一些特定的不太方便直接表示的字符需要進行轉義.(比如\和"")
💫舉個栗子:
public class TestDemo {
public static void main(String[] args) {
// 創建一個字串 My name is "張三"
String name = "My name is \"張三\"";
System.out.println(name);
}
}
這里不加\程式就會出問題,此時張三及后面的內容不會被認為是字串name的內容,

Java中常見轉義字符介紹:
| 轉義字符 | 作用 |
|---|---|
| \n | 換行 |
| \t | 水平制表符 |
\' | 單引號 |
\" | 雙引號 |
\\ | 反斜杠 |
注意:字串的 + 操作, 表示字串拼接:

還可以用字串和整數進行拼接:
public class TestDemo {
public static void main(String[] args) {
String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);
}
}
結果:

總結:
當一個 + 運算式中存在字串的時候, 都是執行字串拼接行為,因此我們可以很方便的使用 System.out.println 同時列印多個字串或數字,
再舉個栗子:
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a = " + a + ",b = " + b);
System.out.println(a + b + "hello");
}
}

我們可以看到第二個輸出是先進行加法在進行字串拼接的,這是因為
運算式是從左向右執行的,當優先進行加法計算時編譯器只會將加號當做算術符號,當優先進行字串拼接時編譯器會將后面的加號都視作用來拼接的“+”,
3.10 變數的作用域
變數的作用域也就是該變數能生效的范圍, 一般是變數定義所在的代碼塊 (大括號)
🔑舉個栗子:
public class TestDemo {
public static void main(String[] args) {
{
int x = 10;
System.out.println(x); // 編譯通過;
}
System.out.println(x); // 編譯失敗, 找不到變數 x
}
}
3.11 變數的命名規則
硬性指標:
- 一個變數名只能包含數字, 字母, 下劃線,$
- 數字不能開頭.
- 變數名是大小寫敏感的. 即 num 和 Num 是兩個不同的變數.
注意:雖然語法上也允許使用中文/美元符($)命名變數, 但是不推薦這樣做
軟性指標:
- 變數命名要具有描述性, 見名知意(比如身高用length,體重用weight).
- 變數名不宜使用拼音(但是不絕對).
- 變數名的詞性推薦使用名詞.
- 變數命名推薦 小駝峰命名法, 當一個變數名由多個單詞構成的時候, 除了第一個單詞之外, 其他單詞首字母都大寫(maxNum,studentName),
3.12 常量
常量主要有以下兩種體現形式:
1. 字面值常量
10 // int 字面值常量(十進制)
010 // int 字面值常量(八進制) 由數字 0 開頭. 010 也就是十進制的 8
0x10 // int 字面值常量(十六進制) 由數字 0x 開頭. 0x10 也就是十進制的 16
10L // long 字面值常量. 也可以寫作 10l (小寫的L)
1.0 // double 字面值常量. 也可以寫作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科學計數法表示. 相當于 1.5 * 10^2
1.0f // float 字面值常量, 也可以寫作 1.0F
true // boolen 字面值常量, 同樣的還有 false
‘a’ // char 字面值常量, 單引號中只能有一個字符
“abc” // String 字面值常量, 雙引號中可以有多個字符.
2. final 關鍵字修飾的常量
final int a = 10; //類似C語言中的const
a = 20; // 編譯出錯. 提示 無法為最終變數a分配值
注意:常量不能在程式運行程序中發生修改.
3.13 型別轉換
Java 作為一個強型別編程語言, 當不同型別之間的變數相互賦值的時候, 會有教嚴格的校驗,
我們來看幾個代碼場景:
1 . int 和 long/double 相互賦值
int a = 10;
long b = 20;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過.
int a = 10;
double b = 1.0;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過.
總結: 不同數字型別的變數之間賦值, 表示范圍更小的型別能隱式轉換成范圍較大的型別, 反之則不行.
2 . int 和 boolean 相互賦值
int a = 10;
boolean b = true;
b = a; // 編譯出錯, 提示不兼容的型別
a = b; // 編譯出錯, 提示不兼容的型別
注意: int 和 boolean 是毫不相干的兩種型別, 不能相互賦值.
3 . int字面值常量 給 byte 賦值
byte a = 100; // 編譯通過
byte b = 256; // 編譯報錯, 提示 從int轉換到byte可能會有損失
注意: byte 表示的資料范圍是 -128 -> +127, 256 已經超過范圍, 而 100 還在范圍之內.
使用字面值常量賦值的時候, Java 會自動進行一些檢查校驗, 判定賦值是否合理
4 . 使用強制型別轉換
int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b = false;
b = (boolean)a; // 編譯出錯, 提示不兼容的型別.
結論: 使用 (型別) 的方式可以將 double 型別強制轉成 int, 但是:
- 強制型別轉換可能會導致精度丟失. 如剛才的例子中, 賦值之后, 10.5 就變成 10 了, 小數點后面的部分被忽略,
- 強制型別轉換不是一定能成功, 互不相干的型別之間無法強轉(比如int型別和boolean型別),
????型別轉換小結:
- 不同數字型別的變數之間賦值, 表示范圍更小的型別能隱式轉換成范圍較大的型別.
- 如果需要把范圍大的型別賦值給范圍小的, 需要強制型別轉換, 但是可能精度丟失.
- 將一個字面值常量進行賦值的時候, Java 會自動針對數字范圍進行檢查.
3.14 數值提升
int 和 long 混合運算
int a = 10;
long b = 20;
int c = a + b; // 編譯出錯, 提示將 long 轉成 int 會丟失精度
long d = a + b; // 編譯通過.
總結: 當 int 和 long 混合運算的時候, int 會提升成 long, 得到的結果仍然是 long 型別, 需要使用 long 型別的變數來接收結果. 如果非要用 int 來接收結果, 就需要使用強制型別轉換(類似C語言的算術提升).
byte 和 byte 的運算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 編譯報錯
Test.java:5: 錯誤: 不兼容的型別: 從int轉換到byte可能會有損失
總結: byte 和 byte 都是相同型別, 但是出現編譯報錯. 原因是, 雖然 a 和 b 都是 byte, 但是計算 a + b 會先將 a 和 b 都提升成 int, 再進行計算, 得到的結果也是 int, 這是賦給 c, 就會出現上述錯誤.
由于計算機的 CPU 通常是按照 4 個位元組為單位從記憶體中讀寫資料. 為了硬體上實作方便, 諸如 byte 和 short 這種低于4 個位元組的型別, 會先提升成 int, 再參與計算(類似于C語言的隱式提升).
正確寫法:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);
????數值提升小結:
- 不同型別的資料混合運算, 范圍小的會提升成范圍大的.
- 對于 short, byte 這種比 4 個位元組小的型別, 會先提升成 4 個位元組的 int , 再運算.
3.15 int 和 String 之間的相互轉換
int 轉成 String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);
String 轉成 int
String str = "100";
int num = Integer.parseInt(str);
3.16 小結
本節主要介紹Java的8大基本資料型別及相關內容:
數值型:
整形:byte short int long
浮點型:float double
字符型:
char
布爾型:
boolean
4 運算子
4.1 算術運算子
- 基本四則運算子 + - * / %
這里的除法需要特別注意下
a) int / int 結果還是 int, 若想得到小數需要使用 double 來計算,
int a = 1;
int b = 2;
System.out.println(a / b);
// 結果為 0
b) 0 不能作為除數
int a = 1;
int b = 0;
System.out.println(a / b)
// 運行結果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)
c) % 表示取余, 不僅僅可以對 int 求模, 也能對 double 來求模(C語言%只能對int求模!!!)
System.out.println(11.5 % 2.0);
// 運行結果
1.5
- 增量賦值運算子 += -= *= /= %=
注意:復合運算子在Java中會自動進行強制型別轉換
??舉個栗子:
public class TestDemo {
public static void main(String[] args) {
short s = 10;
s += 9;
System.out.println(s);
}
}
s+9結果為整形,如果不進行強制型別轉換就會報錯,而+=運算子在這里就自動進行了強制型別轉換,所以程式能正常執行,
- 自增/自減運算子
++ --(這里跟C語言一樣)
4.2 關系運算子
關系運算子主要有六個:
==!=<><=>=
注意: 關系運算子的運算式回傳值都是 boolean 型別.(這里要跟C語言區別開來)
4.3 邏輯運算子
邏輯運算子主要有三個:
&&||!
注意: 邏輯運算子的運算元(運算元往往是關系運算子的結果)和回傳值都是 boolean
這里我主要介紹一下邏輯運算的短路求值的規則:
&& 和 || 遵守短路求值的規則:
System.out.println(10 > 20 && 10 / 0 == 0); // 列印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 列印 true
我們都知道, 計算 10 / 0 會導致程式拋出例外. 但是上面的代碼卻能正常運行, 說明 10 / 0 并沒有真正被求值.
結論:
- 對于 && , 如果
左側運算式值為 false, 則運算式的整體的值一定是 false, 無需計算右側運算式.- 對于 ||, 如果
左側運算式值為 true, 則運算式的整體的值一定是 true, 無需計算右側運算式.
4.4 位運算子
Java 中對資料的操作的最小單位不是位元組, 而是二進制位.(和C語言一樣)
位運算子主要有四個:
&|~^
注意: 當 & 和 | 的運算元為整數(int, short, long, byte) 的時候, 表示按位運算, 當運算元為 boolean 的時候, 表示邏輯運算.
4.5 移位運算
移位運算子有三個:
<<>>>>>
都是按照二進制位來運算
其中
>>>是無符號右移:無論要進行移位的是有符號數還是無符號數都是最右側位不要, 最左側補 0,
🔑舉個栗子:
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 運行結果(注意, 是按十六進制列印的)
7fffffff
小結:
- 左移 1 位, 相當于原數字
*2. 左移 N 位, 相當于原數字*2 的N次方.- 右移 1 位, 相當于原數字 / 2. 右移 N 位, 相當于原數字 / 2 的N次方.
- 由于計算機計算移位效率高于計算乘除, 當某個代碼正好乘除 2 的N次方的時候可以用移位運算代替.
- 移動負數位或者移位位數過大都沒有意義
4.6 條件運算子
條件運算子只有一個:
運算式1 ? 運算式2 : 運算式3
當 運算式1 的值為 true 時, 整個運算式的值為 運算式2 的值; 當 運算式1 的值為 false 時, 整個運算式的值為 運算式3 的值.
這也是 Java 中唯一的一個 三目運算子, 是條件判斷陳述句的簡化寫法.
💫栗子:
// 求兩個整數的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
4.7 運算子的優先級
運算子之間是有優先級的. 具體的規則我們不必記憶. 在可能存在歧義的代碼中加上括號即可,
4.8 運算子總結
- % 操作再 Java 中也能針對 double 來計算.
- 需要區分清楚 前置自增 和 后置自增之間的區別.
- 由于
Java 是強型別語言, 因此對于型別檢查較嚴格, 因此像 && 之類的運算運算元必須是 boolean.- 要區分清楚 & 和 | 什么時候是表示按位運算, 什么時候表示邏輯運算.
整體來看, Java 的運算子的基本規則和 C 語言基本一致
5 注釋
5.1 基本規則
Java中的注釋主要分為以下三種
單行注釋:// 注釋內容(用的最多)
多行注釋:/* 注釋內容*/(不推薦)
檔案注釋: /** 檔案注釋 */(常見于方法和類之上描述方法和類的作用),可用來自動生成檔案
5.2 注釋規范
- 內容準確: 注釋內容要和代碼一致, 匹配, 并在代碼修改時及時更新.
- 篇幅合理: 注釋既不應該太精簡, 也不應該長篇大論.
- 使用中文: 一般中國公司都要求使用中文寫注釋, 外企另當別論.
- 積極向上: 注釋中不要包含負能量.
作者水平有限,若文章有任何問題歡迎私聊或留言,希望和大家一起學習進步!!!
創作不易,再次希望大家👍支持下,謝謝大家🙏
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335545.html
標籤:java
