Java基本語法
- 1資料型別與運算子
- 1.1變數
- 1.1.1整數型變數
- 1.1.2浮點型變數
- 1.1.3字符型與布爾型別變數
- 1.1.4字串型別變數
- 1.1.5變數的作用域
- 1.1.6變數的命名規范
- 1.2基本資料型別間的轉換
- 1.2.1常量
- 1.2.2理解型別轉換
- 1.2.3理解數值提升
- 1.2.4 String 和 int 之間的相互轉換
- 1.2.5基本資料型別的轉換(重點)
- 1.3運算子
- 1.3.1算術運算子
- 1.3.2關系運算子
- 1.3.3邏輯運算子
- 1.3.4位運算子
- 1.3.5條件運算子
- 2程式流程控制
- 1.順序結構
- 2.分支結構
- 2.1.1 if 陳述句
- 2.1.2 switch 陳述句
- 3.回圈結構
- 2.3.1 while 回圈
- 2.3.2 break 和 continue
- 2.3.3 for 回圈
- 4.輸入輸出
- 2.4.1輸出到控制臺
- 2.4.2從鍵盤輸入
- Java語法知識點補充
- Java中的名稱命名規范
- Java中的關鍵字
1資料型別與運算子
1.1變數
變數型別總覽

1.1.1整數型變數
整數型別: byte、 short、 int、 long

基本語法格式:
資料型別 變數名 = 初始值;
代碼示例:
int num1 = 10;//定義一個整型變數
System.out.println(num1);
long num2 = 10L;//定義一個長整型變數,初始值可以為大寫的字母L
System.out.println(num2);//也可寫為小寫的l(不是數字1)
如果運算的結果超出了 int 的最大范圍,就會出現溢位的情況
int maxValue = Integer.MAX_VALUE;//int的最大值
System.out.println(maxValue+1);//輸出結果為:int 的最小值
int mINValue = Integer.MIN_VALUE;//int的最小值
System.out.println(minValue-1);//輸出結果為:int的最大值
注意:
1. java的整型常量默認為 int 型,宣告long型常量須后加小寫字母‘l’或大寫‘L’
2. java程式中變數通常宣告為int型,除非不足以表示較大的數,才使用long
1.1.2浮點型變數
float:單精度,尾數可以精確到7位有效數字,很多情況下,精度很難滿足需求,
double:雙精度,精度是float的兩倍,通常采用此型別,

基本語法格式:
變數型別 變數名 = 初始值;
代碼示例:
double num3 = 1.0;//定義一個雙精度變數
System.out.println(num3);
float num4 = 1.0f;//定義一個單精度變數
System.out.println(num4);
注意:
1.Java 的浮點型常量默認為double型, 宣告float型常量,須后加‘f’或‘F’,
2.小數本身是沒有一個精確的數字的,只能精確到幾位
1.1.3字符型與布爾型別變數
字符型
char 型資料用來表示通常意義上“字符”(2位元組)
Java中的所有字符都使用Unicode編碼,故一個字符可以存盤一個字
母,一個漢字,或其他書面語的一個字符,
字符型變數的三種表現形式:
字符常量是用單引號(‘ ’)括起來的單個字符,
例如:
char c1 = 'a';
char c2= '中';
char c3 = '9';
Java中還允許使用轉義字符‘\’來將其后的字符轉變為特殊字符型常量,
例如:
char c3 = ‘\n’; // '\n'表示換行符
直接使用 Unicode 值來表示字符型常量:
‘\uXXXX’,其中, XXXX代表一個十六進制整數,如: \u000a 表示 \n,
char型別是可以進行運算的,因為它都對應有Unicode碼,
布爾型
boolean 型別用來判斷邏輯條件,一般用于程式流程控制:
if條件控制陳述句;
while回圈控制陳述句;
do-while回圈控制陳述句;
for回圈控制陳述句;
注意事項:
1.boolean型別資料只允許取值true和false,無null,
2.Java中的boolean型別和int不能相互轉換,不可以使用0或非 0 的整數替代false和true,這點和C語言不同,
3.boolean型別資料有些 JVM 的實作是只占一個位元組,有些是占一個位元位,這個沒有明確規定,
Java虛擬機中沒有任何供boolean值專用的位元組碼指令, Java語言表達所操作的boolean值,在編譯之后都使用java虛擬機中的int資料型別來代替: true用1表示, false用0表示 ———《java虛擬機規范 8版》
1.1.4字串型別變數
String不是基本資料型別,屬于參考資料型別
基本語法格式:
String 變數名 = “初始值”
字串中一些特定的不太方便直接表示的字符需要進行轉義,
轉義字符示例:
//創建一個字串 My name is "超人"
String name = "My name is \"超人\"";

//使用方式與基本資料型別一致,
//例如:
String str = “abcd”;
//一個字串可以串接另一個字串,也可以直接串接其他型別的資料,
// 例如:
str = str + “xyz” ;//字串與字串
int n = 100;//字串與整數
以上代碼說明,當一個 + 運算式中存在字串的時候,都是執行字串的拼接行為,
同時列印多個字串或數字
int a = 10;
int b = 20;
System.out.println("a = "+a+"b = "+b);
1.1.5變數的作用域
也就是該變數生效的范圍,一般是變數定義所在的代碼塊(大括號)
代碼示例:
class Test{
public static void main(String[] args){
{
int x = 10;
System.out.println(x);//編譯通過
}
System.out.println(x);//編譯失敗,找不到變數x
}
}
1.1.6變數的命名規范
硬性指標:
1.一個變數名只能包含數字,字母,下劃線($可以,不推薦使用)
2.數字不能開頭
3.變數名是大小寫敏感的,num 和 Num 是兩個不同的變數
軟性指標:
1.具有描述性,見名知意
2.不宜使用拼音(不絕對)
3.詞性推薦使用名詞
4.推薦小駝峰命名法,當一個變數有多個單詞構成時,除了第一個單詞之外,其他單詞首字母都大寫
小駝峰命名示例:
int maxValue = 100;
String studentName = "超人";
1.2基本資料型別間的轉換
1.2.1常量
常量是指在運行時型別不能發生改變,并且常量在編譯時就已經確定
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;
a = 20;//編譯出錯,提示無法為最終變數a 分配值
1.2.2理解型別轉換
Java作為一個強型別的編程語言,當不同型別的變數相互賦值時會有嚴格的校驗
int 和 long / double 相互賦值
int a = 10;
long b = 20;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過.
//long 表示的范圍更大, 可以將 int 賦值給 long, 但是不能將 long 賦值給 int.
int a = 10;
double b = 1.0;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a;
//double 表示的范圍更大, 可以將 int 賦值給 double, 但是不能將 double 賦值給 int
結論: 不同數字型別的變數之間賦值, 表示范圍更小的型別能隱式轉換成范圍較大的型別, 反之則不行.
int 和 boolean 相互賦值
int a = 10;
boolean b = true;
b = a; // 編譯出錯, 提示不兼容的型別
a = b; // 編譯出錯, 提示不兼容的型別
結論: int 和 boolean 是毫不相干的兩種型別, 不能相互賦值
int 字面值常量給byte
byte a = 100; // 編譯通過
byte b = 256; // 編譯報錯, 提示 從int轉換到byte可能會有損失
//注意: byte 表示的資料范圍是 -128 -> +127, 256已經超過范圍,而100還在范圍之內
結論: 使用字面值常量賦值的時候, Java 會自動進行一些校驗,判定賦值是否合理
小結:
1. 不同數字型別的變數之間賦值, 表示范圍更小的型別能隱式轉換成范圍較大的型別.
2. 如果需要把范圍大的型別賦值給范圍小的, 需要強制型別轉換, 但是可能精度丟失.
3. 將一個字面值常量進行賦值的時候, Java 會自動針對數字范圍進行檢查.
1.2.3理解數值提升
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);
型別提升小結:
1. 不同型別的資料混合運算, 范圍小的會提升成范圍大的.
2. 對于 short, byte 這種比 4 個位元組小的型別, 會先提升成 4 個位元組的 int , 再運算
1.2.4 String 和 int 之間的相互轉換
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);
1.2.5基本資料型別的轉換(重點)
自動型別轉換:
容量小的型別自動轉換為容量大的資料型別,
資料型別按容量大小排序為:

總結:
1.有多種型別的資料混合運算時,系統首先自動將所有資料轉換成容量最大的那種資料型別,然后再進行計算,
2.byte,short,char之間不會相互轉換,他們三者在計算時首先轉換為int型別,
3.boolean型別不能與其它資料型別運算,
4.當把任何基本資料型別的值和字串(String)進行連接運算時(+), 基本資料型別的值將自動轉化為字串(String)型別,
1.3運算子
1.3.1算術運算子
算術運算子總覽:

除法中需要注意的幾點:
1.int / int 結果還是 int,需要用double來計算
int a = 1;
int b = 2;
System.out.println(a / b);
//結果為0
-
0不能作為除數
-
%表示取余,不僅可以對 int 求模,也能對double求模
System.out.println(11.5%2.0);
//運行結果
1.5
1.3.2關系運算子
關系運算子總覽:

注意:
1.關系運算子的結果都是boolean型,也就是要么是true,要么是false,
2.關系運算子“==”不能誤寫成“=” ,
1.3.3邏輯運算子
邏輯運算子主要有3個:
&& //兩個運算元都為ture,結果為ture,否則為false
|| //都為false結果為false,否則為true
! //邏輯反操作
注意:
邏輯運算子的運算結果和回傳值都是 boolean.
短路求值
&& 和 || 遵循短路求值規則,
System.out.println(10 > 20 && 10 / 0 == 0);//列印false
System.out.println(10 < 20 || 10 / 0 == 0);//列印ture
//計算 10 / 0 會導致程式拋出例外. 但是上面的代碼卻能正常運行,
// 說明 10 / 0 并沒有真正被求值.
結論:
1. 對于 && , 如果左側運算式值為 false, 則運算式的整體的值一定是 false, 無需計算右側運算式.
2. 對于 ||, 如果左側運算式值為 true, 則運算式的整體的值一定是 true, 無需計算右側運算式.
3. & 和 | 不建議使用,不支持短路求值
1.3.4位運算子
位運算子總覽:

位操作表示按二進制位計算
注意:
- 0x 前綴的數字為16進制數字,16進制可以看成二進制的簡化形式,一個16進制對應4個二進制位,
- 0xf表示16進制中的15,也就是二進制的1111
- 左移 1 位, 相當于原數字 * 2. 左移 N 位, 相當于原數字 * 2 的N次方.
- 右移 1 位, 相當于原數字 / 2. 右移 N 位, 相當于原數字 / 2 的N次方.
- 由于計算機計算移位效率高于計算乘除, 當某個代碼正好乘除 2 的N次方的時候可以用移位運算代替.
- 移動負數位或者移位位數過大都沒有意義
1.3.5條件運算子
條件運算子也叫三目運算子
語法格式:
運算式1?運算式2:運算式3
當運算式1的值為 ture 時,整個運算式的值為運算式2的值;若為 false ,整個運算式的值為運算式3的值,
//求兩個數的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
2程式流程控制
1.順序結構
順序結構,即按照代碼書寫的順序一行一行執行
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
//運行結果
aaa
bbb
ccc
2.分支結構
2.1.1 if 陳述句
基本語法形式1
if (布爾運算式){//只能是布爾運算式,不同于C語言
//條件滿足時執行的代碼
}
基本語法形式2
if(布爾運算式){
//條件滿足時執行的代碼
}else{
//條件不滿足時執行的代碼
}
基本語法形式3
if(布爾運算式){
//條件滿足時執行代碼
}else if(布爾運算式){
//條件滿足時執行代碼
}else{
//條件都不滿足時執行代碼
}
代碼示例:
//判定一個數字是奇數還是偶數
int num = 10;
if(num % 2 == 0){
System.out.println("num 是偶數");
}else{
System.out.println("num 是奇數");
}
注意:懸垂 else 問題
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
if / else 陳述句中可以不加 大括號 . 但是也可以寫陳述句(只能寫一條陳述句). 此時 else 是和最接近的 if 匹配.
但是實際開發中我們 不建議 這么寫,最好加上大括號,
2.1.2 switch 陳述句
基本語法:
switch(整數|列舉|字符|字串){
case 內容1 : {
內容滿足時執行陳述句;
break;
}
case 內容2 : {
內容滿足時執行陳述句;
break;
}
...
default:{
內容都不滿足時執行陳述句;
break;
}
}
注意事項:
- break 不要遺漏,否則會失去“多分支選擇”的效果
- switch 中的值只能是 整數 | 列舉 | 字符 | 字串
- 不能做 switch 的引數的資料型別有:long ,float, double, boolean
3.回圈結構
2.3.1 while 回圈
基本語法格式:
while(回圈條件){//回圈條件為布爾運算式,ture 執行陳述句,否則結束回圈,
回圈陳述句;
}
示例代碼1:計算1-100的和
int n = 1;
int result = 0;
while (n <= 100) {
result += n;
n++;
}
System.out.println(num);
// 執行結果
5050
注意:
while 下面的陳述句可以不寫{ },但不寫時只能支持一條陳述句,
2.3.2 break 和 continue
break 的功能是讓回圈提前結束
代碼示例:找到100-200中第一個3的倍數
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍數, 為:" + num);
break;
}
num++;
}
// 執行結果
找到了3的倍數,為:102
continue 的功能是跳過本次回圈,其以下代碼不再運行
代碼示例:找到100-200中所有3的倍數
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 這里的 ++ 不要忘記! 否則會死回圈.
continue;
}
System.out.println("找到了 3 的倍數, 為:" + num);
num++;
}
2.3.3 for 回圈
基本語法:
for(運算式1;運算式2;運算式3){
回圈體;
}
運算式1:用于初始化回圈變數
運算式2:回圈條件
運算式3:更新回圈變數
示例代碼:計算1!+ 2!+3!+4!+5!
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
4.輸入輸出
2.4.1輸出到控制臺
基本書法:
System.out.println(msg); // 輸出一個字串, 帶換行
System.out.print(msg); // 輸出一個字串, 不帶換行
System.out.printf(format, msg); // 格式化輸出
println 輸出的內容自帶 \n, print 不帶 \n
printf 的格式化輸出方式和 C 語言的 printf 是基本一致的
2.4.2從鍵盤輸入
使用 Scanner 讀取字串/整數/浮點數
import java.util.Scanner; // 需要匯入 util 包
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的姓名:");
String name = sc.nextLine();
System.out.println("請輸入你的年齡:");
int age = sc.nextInt();
System.out.println("請輸入你的月薪:");
float salary = sc.nextFloat();
System.out.println("你的資訊如下:");
System.out.println("姓名: "+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary);
sc.close(); // 注意, 要記得呼叫關閉方法
// 執行結果
請輸入你的姓名:
超人
請輸入你的年齡:
19
請輸入你的月薪:
25000
你的資訊如下:
姓名: 超人
年齡:19
工資:25000
使用 Scanner 回圈讀取N 個數字
Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (sc.hasNextDouble()) {
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
// 執行結果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1
注意:當回圈輸入多個資料時,使用ctrl+z來結束輸入,IDEA上是ctrl+D
Java語法知識點補充
Java中的名稱命名規范
Java中的名稱命名規范:
包名:多單詞組成時所有字母都小寫: xxxyyyzzz
類名、介面名:多單詞組成時,所有單詞的首字母大寫: XxxYyyZzz
變數名、方法名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個
單詞首字母大寫: xxxYyyZzz
常量名:所有字母都大寫,多單詞時每個單詞用下劃線連接: XXX_YYY_ZZZ
Java中的關鍵字


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325653.html
標籤:其他
上一篇:教你優雅的處理網頁中的圖片
下一篇:超執行緒SMT究竟可以快多少?
