碼字不易,對你有幫助 點贊/轉發/關注 支持一下作者
微信搜公衆號:不會編程的程序圓
看更多幹貨,獲取第一時間更新
思維導體
目錄
文章目錄
正文
一、 變量
1. 變量的作用域
作用域:該變量能生效的範圍, 一般是變量定義所在的代碼塊 (大括號)。
1-1.java
public class helloWorld{
public static void main(String[] args) {
{
int a = 10;//a 的作用域只在這個花括號內
}
System.out.println(a);//不能通過編譯
}
}
1-2.java
public class helloWorld{
public static void main(String[] args) {
int a = 10;
{
System.out.println(a);//編譯可以通過,因爲 a 的作用域是整個 main 方法
}
System.out.println(a);
}
}
2. 變量的命名規則
同 C 語言一樣,Java 變量的命名規則:
-
一個變量名只能包含數字, 字母, 下劃線
-
數字不能開頭
-
變量名是大小寫敏感的
注意: 雖然語法上也允許使用 /
和$
命名變量, 但是 不推薦 這樣做。
建議:
-
變量命名要具有描述性, 見名知意
-
變量名不宜使用拼音(但是不絕對)
-
變量命名推薦 小駝峯命名法, 當一個變量名由多個單詞構成的時候, 除了第一個單詞之外, 其他單詞首字母都大
寫
二、 常量
常量不能在程序運行過程中發生修改 。
常量主要有以下兩種形式:
Ⅰ:字面值常量
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 字面值常量, 雙引號中可以有多個字符.
Ⅱ: final 關鍵字修飾的常量
用 final 修飾的變量建議使用 大寫 命名。
final int A = 10;
A = 20;//不能通過編譯
用 final 修飾的變量不能再被賦值。
final int A = 10;
a = 10;//即便不改變 a 的值,也不能通過編譯
如果一個用 final 修飾的變量沒有初始化,那麼這個變量是可以被賦值的(但是隻能賦值一次)。
final int A;
A = 10;//可以通過編譯
final int A;
A = 10;
A = 11;//不能通過編譯
進制問題
問題1:將十進制 122 轉換爲 二進制
方法1:用短除法求 2 進制
方法2:寫出權重直接看
問題2:將 2 進制轉化爲 8 進制 與 16進制
比如 122 的 二進制序列爲 0111 1010 (每四位寫在一起)
轉爲 8 進制的方法十分簡單,就是先將每三位寫在一起:
001 111 010 (如果二進制數不夠可以高位補 0)
將每三位二進制數寫成 十進制形式(其實並不算是10進制形式,可以這樣理解)
010 表示的是 2
111 表示的是 7
001 表示的是 1
172 就是轉換後的 八進制數
原理:八進制每一位可以寫 0 ~ 7 總共 8 種數,表示 8 種不同情況。3 個 二進制位可以寫 000 ~ 111 總共 2 * 2 * 2 = 8 種。
所以,3 個 二進制數 與 1 個 八進制是等價的。
同理:1 個 十六進制數 與 4 個 二進制數是等價的。也可以通過上述方式進行轉換。
三、 類型轉換
int 和 long/double 相互賦值
int a = 10;
long b = 20;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過.
int a = 10;
double b = 1.0;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過
long 表示的範圍更大, 可以將 int 賦值給 long, 但是不能將 long 賦值給 int.
double 表示的範圍更大, 可以將 int 賦值給 double, 但是不能將 double 賦值給 int.
結論: 不同數字類型的變量之間賦值, 表示範圍更小的類型能隱式轉換成範圍較大的類型, 反之則不行.
使用強制類型轉換:
int a = 10;
long l = 20;
double d = 1.0;
a = (int)l;//可以通過編譯
a = (int)d;//可以通過編譯
int 與 boolean 相互賦值
int a = 10;
boolean b = true;
b = a; // 編譯出錯, 提示不兼容的類型
a = b; // 編譯出錯, 提示不兼容的類型
甚至使用強轉都不行:
int a = 10;
boolean b = true;
a = (int)b;
結論: int 和 boolean 是毫不相干的兩種類型, 不能相互賦值.
int 字面值常量賦值給 byte 類型
byte a = 100; // 編譯通過
byte b = 256; // 編譯報錯, 提示 從int轉換到byte可能會有損失
注意: byte 表示的數據範圍是 -128 -> +127, 256 已經超過範圍, 而 100 還在範圍之內.
結論: 使用字面值常量賦值的時候, Java 會自動進行一些檢查校驗, 判定賦值是否合理.
總結:
- 不同數字類型的變量之間賦值, 表示範圍更小的類型能隱式轉換成範圍較大的類型。
- 如果需要把範圍大的類型賦值給範圍小的, 需要強制類型轉換, 但是可能精度丟失。
- 將一個字面值常量進行賦值的時候, Java 會自動針對數字範圍進行檢查。
四、數值提升
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 來接收結果, 就需要使用強制類型轉換.
byte 和 byte 的運算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 編譯報錯
//Test.java:5: 錯誤: 不兼容的類型: 從int轉換到byte可能會有損失
//byte c = a + b;
// ^
結論: byte 和 byte 都是相同類型, 但是出現編譯報錯. 原因是, 雖然 a 和 b 都是 byte, 但是計算 a + b 會先將 a 和 b 都
提升成 int, 再進行計算, 得到的結果也是 int, 這是賦給 c, 就會出現上述錯誤。
由於計算機的 CPU 通常是按照 4 個字節爲單位從內存中讀寫數據. 爲了硬件上實現方便, 諸如 byte 和 short 這種低於
4 個字節的類型, 會先提升成 int, 再參與計算。
正確的寫法:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);
總結:
-
不同類型的數據混合運算, 範圍小的會提升成範圍大的.
-
對於 short, byte 這種比 4 個字節小的類型, 會先提升成 4 個字節的 int , 再運算.
五、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);
[0 基礎學 java ] 系列的代碼可以在我的 Github 倉庫查看,地址如下:
https://github.com/hairrrrr/Java_SE_EnjoyLearning
歡迎 star !(點一個 star 方便你下回查看)
本系列的教學也可以在 GitHub 觀看(GitHub 上看教學的好處是所有文章的目錄比較清晰)。
以上就是本次的內容。
如果文章有錯誤歡迎指正和補充,感謝!
最後,如果你還有什麼問題或者想知道到的,可以在評論區告訴我呦,我可以在後面的文章加上你們的真知灼見。
關注我,看更多幹貨!
我是程序圓,我們下次再見。