文章目錄
- 變數,作用域,運算子
- 1. 變數
- 1.1 變數定義格式【重點】
- 1.2 變數定義代碼演示
- 1.3 變數定義程序中的問題
- 1.3.1 浮點常量默認資料型別
- 1.3.2 long整數資料賦值建議
- 1.3.3 字符型別常量有且只能使用字符本身
- 1.3.4 Java中變數未初始化不能使用
- 1.3.5 找不到符號問題
- 1.3.6 浮點數拓展
- 1.3.7 字符拓展
- 1.3.8 new物件跟直接創建物件區別
- 1.3.9 型別轉換
- 1.4 變數作用域
- 2. 運算子
- 2.1 算術運算子
- 2.2 自增自減運算子
- 2.3 關系運算子
- 補充:
- 2.4 邏輯運算子
- 2.5 計算時記憶體溢位
- 2.6 小練習
- 2.6 短路原則
變數,作用域,運算子
1. 變數
1.1 變數定義格式【重點】
格式:
資料型別 變數名 = 初始化資料;
資料型別:
明確當前變數可以保存的資料型別是什么
例如:
資料型別為char型別,當前變數,有且只能保存字符型別
資料型別為int型別,當前變數,有且只能保存一定范圍以內的整數型別
【資料型別一致化要求】
變數名:
要求符合AJCG命名規范,見名知意,動賓結構
變數名是操作當前變數使用的一個名稱,具有一定范圍以內的唯一性,
變數名保存程式運行過中,賦值給變數的資料
=:
賦值號 將賦值號右側的資料,賦值給左側的【變數】,
初始化資料:
需要對應當前資料型別,賦值當前程式要求初始化資料,
1.2 變數定義代碼演示
class Demo1 {
public static void main(String[] args) {
/* 整型變數 */
byte byteNumber = 10;
short shortNumber = 20;
int intNumber = 30;
long longNumber = 40L;
System.out.println(byteNumber);
System.out.println(shortNumber);
System.out.println(intNumber);
System.out.println(longNumber);
/* 浮點型變數 */
float floatNumber = 5.5F;
double doubleNumber = 3.14;
System.out.println(floatNumber);
System.out.println(doubleNumber);
/* 字符型別變數 */
char ch1 = 'A';
char ch2 = '我';
System.out.println(ch1);
System.out.println(ch2);
/* 布爾型別 ret ==> result 結果 */
boolean ret1 = true;
boolean ret2 = false;
System.out.println(ret1);
System.out.println(ret2);
}
}
1.3 變數定義程序中的問題
1.3.1 浮點常量默認資料型別
Demo1.java:15: 錯誤: 不兼容的型別: 從double轉換到float可能會有損失
float floatNumber = 5.5;
^
1 個錯誤
在計算機中,計算機為了保證資料的精度問題,所有的常量浮點型別資料,都看作是double型別,double資料型別占用記憶體空間是8個位元組,float占用4個,這里因為資料型別不一致,導致報錯,我們需要告知編譯器,當前浮點型別常量資料型別為float型別,
在常量之后加上大寫 F
float floatNumber = 5.5F;
1.3.2 long整數資料賦值建議
在開發中,整數默認的采用的形式都是int型別,賦值給long型別變數,是可以執行,沒有報錯,但是為了資料型別一致化要求,我們可以告知編譯器,當前常量為long型別
在常量之后加入一個大寫 L
long longNumber = 40L;
1.3.3 字符型別常量有且只能使用字符本身
1.3.4 Java中變數未初始化不能使用
int num;
System.out.println(num);
Demo1.java:38: 錯誤: 可能尚未初始化變數num
System.out.println(num);
^
1 個錯誤
num定義之后并沒有進行賦值操作,當前num中保存的資料,對于Java程式而言是無效的,無法明確當前num保存的資料內容是什么,Java通過編譯器提示,避免了【野值】問題,
Java中的一個變數未賦值的情況下,不得參與其他代碼執行操作,
1.3.5 找不到符號問題
1. 當前使用的變數未定義!!!
Java中變數未定義不能使用,
2. 變數名/方法名 拼寫錯誤
1.3.6 浮點數拓展
銀行業務使用float還是double? 應該使用BigDecimal類表示
float f1 = 0.1F;
double d1 = 1.0/10;
System.out.println(f1); // 輸出結果 0.1
System.out.println(d1); // 輸出結果 0.1
System.out.println(d1 == f1); // 輸出結果 false
float f2 = 34561321651231F;
float f3 = f2 + 1;
System.out.println(f2 == f3); // 輸出結果 true
1.3.7 字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1); // 輸出結果 a
System.out.println((int)c1); // 輸出結果 97
System.out.println(c2); // 輸出結果 中
System.out.println((int)c2); // 輸出結果 20013
// 所有字符本質還是數字 編碼 Unicode
char c3 = '\u0061';
System.out.println(c3); // 輸出結果 a
1.3.8 new物件跟直接創建物件區別
String s1 = "95827";
String s2 = "95827";
System.out.println(s1 == s2); // 輸出結果 true
String s3 = new String("95827");
String s4 = new String("95827");
System.out.println(s3 == s4); // 輸出結果 false
// jvm在堆區為物件分配完記憶體后,產生一個參考指向這個物件在記憶體中的地址
// s3、s4實際是參考物件的地址 (有new就有堆,每次new都創建一個新的物件,不論物件的值是否相等)
1.3.9 型別轉換
int a = 128;
byte b = (byte)a;
System.out.println(a); // 輸出結果 128
System.out.println(b); // 輸出結果 -128
// 二進制128 :10000000
// Java中:1表示符號位(為1時正數,0代表負數)后七位表示數值
System.out.println((int)23.8); // 輸出結果 23
System.out.println((int)-23.72); // 輸出結果 -23
// 強制型別轉換可能會丟失精度
型別轉換:強制裝換(高到低) 自動轉換(低到高)
1.4 變數作用域
/*
類變數
實體變數
區域變數
*/
public class Test {
static int anInt = 18; // 類變數(全域變數)
int a; // 實體變數:從屬于物件,不初始化值為默認值
public static void main(String[] args) {
// test--> Test類的物件
Test test = new Test();
System.out.println(test.a);// 輸出結果為0
// 類變數
System.out.println(test.anInt);// 輸出結果為18
}
public void method() {
int a = 18; // 區域變數:必須宣告和初始化值
}
}
// 默認值:boolean: 默認false
// int short long float double 默認為0
// 除了基本型別,其他型別都為null
2. 運算子
補充:轉義字符
對于字符使用,有且只允許使用【字符本身】,不允許使用對應編碼值
轉義字符:
\" // 表示斜杠后的"
\' // 表示斜杠后的'
\\ // 表示斜杠后的\
\\\\ // 表示斜杠后的\,相當于兩個\\
\n // 換行
\t // 一個制表符
2.1 算術運算子
數學中
+ - × ÷ ()
注意事項:
1. 先乘除,后加減
2. 有括號先處理括號里面的內容
3. 從左至右計算內容
4. 除數不能為0
開發中
+ - * / % () =
% 取余[只能操作整數]
5 ÷ 2 = 2 ... 1 商為 2 余數為 1 取余操作需要的結果為1
10 % 12 ==> 10
5 % 4 ==> 1
6 % 2 ==> 0
4 % 5 ==> 4
優先級問題:
在運算程序中,如果出現了優先級問題,簡單粗暴加括號
/* 算術運算子演示 */
class Demo2 {
public static void main(String[] args) {
int num1 = 20;
int num2 = 30;
num1 = num1 + num2; // num1 = 50 num2 = 30
num1 = num1 * num2; // num1 = 1500 num2 = 30
num1 = num1 - num2; // num1 = 1470 num2 = 30
num1 = num1 / num2; // num1 = 49 num2 = 30
num1 = num1 % num2; // num1 = 19 num2 = 30
System.out.println("num1 : " + num1);
System.out.println("num1 : " + num2);
}
}
public class test {
public static void main(String[] args) {
long a = 7894564321L;
int b = 123456;
short c = 123;
byte d = 10;
// 數值提升,運算時有高型別結果向上提升
System.out.println(a + b + c + d); // 輸出結果為 7894687910 long型別
System.out.println(b + c + d); // 輸出結果為 123589 int型別
System.out.println(c + d); // 輸出結果為 133 int型別
}
}
2.2 自增自減運算子
格式:
++ --
1. 自增自減運算子,有且只能操作變數
2. ++ 自增操作,當前變數資料 + 1 -- 自減操作,當前變數資料 - 1
基本的語法
在變數之后,首先取出當前變數資料,參與當前行代碼執行,然后在執行自增/自減操作
在變數之前,首先執行自增/自減操作,然后當前變數再來參與當前代碼行執行
【來自16歲程式員的建議】
使用 += 1 替代++
使用 -= 1 替代--
來自 Swift iOS開發語言
自增自減運算子單獨成行
【補充知識點】
+= -= *= /= %=
num1 = num1 + 10; ==> num1 += 10;
1.
int num = 5;
int ret = num++ * ++num;
num = 7
ret = 35
num++ * ++num
num++ : 5 num ==> 6
++num : num ==> 7 7
5 * 7
2.
int num = 5;
++(num++)++;
num = ?
編譯錯誤
自增自減運算子,有且只能操作變數
(num++) 對于整個代碼運行程序中,(num++)對外是一個整體,可以看做是一個常量,已經不再是操作num內容
int num = 10;
++num;
num++;
2.3 關系運算子
數學中:
> < ≥ ≤ ≠ =
開發中的關系運算子:
> < >= <= != ==
關系運算子判斷運算式兩邊的資料是否滿足關系運算子要求,如果滿足回傳true,不滿足回傳false
/* 關系運算子演示 */
class Demo4 {
public static void main(String[] args) {
boolean ret = 5 > 3;
System.out.println("ret : " + ret);
ret = 5 < 3;
System.out.println("ret : " + ret);
ret = 5 >= 5;
System.out.println("ret : " + ret);
ret = 5 <= 10;
System.out.println("ret : " + ret);
ret = 5 != 5;
System.out.println("ret : " + ret);
ret = 5 == 5;
System.out.println("ret : " + ret);
}
}
補充:
Java的Math類封裝了很多與數學有關的屬性和方法, 例如: 冪運算等
2.4 邏輯運算子
與
&&
同真為真,有假【即】假
銀行保險柜 需要保險柜持有者和管理員同時在場 才可以打開
或
||
有真【即】真,同假為假
自己家門,只要有人帶有鑰匙,就可以回家
非
!
取反
/* 邏輯運算子 */
class Demo5 {
public static void main(String[] args) {
boolean ret = 5 > 3 && 5 > 2;
System.out.println("ret : " + ret);
ret = 5 > 10 && 5 > 2;
System.out.println("ret : " + ret);
ret = 5 > 20 || 5 > 2;
System.out.println("ret : " + ret);
ret = 5 > 20 || 5 > 30;
System.out.println("ret : " + ret);
ret = !(5 > 3);
System.out.println("ret : " + ret);
ret = !(5 < 3);
System.out.println("ret : " + ret);
}
}
**位運算:>> --> /2, 相當于除二 << --> *2 ,相當于乘二 **
2.5 計算時記憶體溢位
int a = 10_0000_0000; // jdk7新特性數字可以加下劃線表示
int b = 30;
int total = a * b; // 記憶體溢位
long total1 = a * b;
System.out.println(total); // 結果 -64771072
System.out.println(total1); // 結果 -64771072 a,b 型別都為int,計算后還為int型別,轉換之前已經存在問題
long total2 = a *(long)b;
long total3 = (long)a * b;
System.out.println(total2); // 結果為 30000000000
System.out.println(total3); // 結果為 30000000000
2.6 小練習
條件完成
1. 字符型別變數是否英文字符
char ch;
'A' <= ch <= 'Z' 開發中無法使用
ch >= 'A' && ch <= 'Z' 大寫字母條件
ch >= 'a' && ch <= 'z' 小寫字母條件
(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')
2. 字符型別變數是否是數字字符
char ch
ch >= '0' && ch <= 9
3. 閏年條件
能被4整數,但是不能被100整除,或者能被400整除
int year
year % 4 == 0;
year % 100 != 0
year % 400 == 0
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
4.
int num = 5;
boolean ret = 10 < 5 && ++num > 2;
ret = ?
num = ?
5.
int num = 5;
boolean ret = 10 > 5 || ++num > 2;
ret = ?
num = ?
2.6 短路原則
int num = 5;
boolean ret = 10 < 5 && ++num > 2;
ret = false
num = 5
同真為真,有假【即】假
邏輯與短路原則:
10 < 5 && ++num > 2;
10 < 5 不成立,為false,當前整個邏輯與運算式結果已經明確為false,計算機為了節約系統資源,提供運行效率,從false條件開始,之后的運算式都不在運行,++num > 2是沒有執行的,無效代碼,
int num = 5;
boolean ret = 10 > 5 || ++num > 2;
ret = true
num = 5
有真【即】真,同假為假
邏輯或短路原則:
10 > 5 || ++num > 2;
10 > 5 成立,為true,當前整個邏輯或運算式結果明確為true,從true條件開始,之后的內容不再執行,++num > 2沒有執行,無效代碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259227.html
標籤:其他
上一篇:6軸并聯機器人開發
下一篇:什么是資料結構
