文章目錄
一、數據類型轉換
- 按理說,這段代碼會報錯(應爲99L,而不是99),可是沒有,怎麼回事?
long num1 = 99 // 左邊是long類型,右邊是int類型,發生了什麼?
- 當數據類型不一樣時,將會發生數據類型轉換。
1. 自動類型轉換(隱式)
- 特點: 代碼不需要特殊處理,自動完成
- 規則: 數據範圍從小到大轉換。(從大到小不行)(是數據範圍,不是佔用內存大小)
public class Demo1DataType{
public static void main(String[] args){
// int-->long,符合從小到大,自動
long num1 = 99;
// float-->double,符合從小到大,自動
double num2 = 9.9F;
/*
long類型的內存佔用更大,
但這裏比較的是數據範圍,
所以float更大。
long-->float,符合從小到大,自動
*/
float num3 = 99L;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
2. 強制類型轉換(顯式)
不能自動轉換時,需要特殊的格式進行強制轉換
// 變量類型 變量名 = (變量類型) 數據;
public class Demo2DataType{
public static void main(String[] args){
byte num1 = (byte)99L;
System.out.println(num1);
}
}
強制類型轉換,會有很多類型
- 數據溢出:
byte num2 = (byte)500
- 精度損失:
int num3 = (int)3.7 // 小數部分直接丟失
3. 數學運算
- byte/short/char 這三種類型都可以發生數學運算
char的計算是拿字符對應的ASCII值(比如A的char值是65)。
System.out.println('A') // A
System.out.println('A' + 1) // 66
在運算時,都會被首先提升成爲int類型,然後再計算。
byte num4 = 33;
byte num5 = 66;
// byte sum45 = num4 + num5; // 這裏會報錯,因爲右邊是int
byte sum45 = (byte)(num4 + num5);
System.out.println(sum45);
在java中,boolean不能發生數據類型轉換
4. ASCII編碼
計算機這個重色輕友的傢伙,只認得0和1。我們認識的10進制,認識的字母,怎樣讓他認出來呢?答案就是硬射映射。
10進制和2進制,有一一對應的關係,如果讓10進制數和字符有一一對應的關係,那麼2進制和字符不就有一一對應的關係嘛?常言道,我對象的對象,還是我對象(這是迎男而上的哲學)。
- 這個處對象的過程,就叫編碼表。(其中記錄美國字符處對象過程的,叫做ASCII)
ASCII表 - 把這幾個記住就行(後面按順序推):
48–>0
65–>A
97–>a
char s1 = '1';
System.out.println(s1); // 1
System.out.println(s1 + 0); // 49
char s2 = 'a';
// 符合從小到大,發生自動類型轉換
int num6 = s2;
System.out.println(num6); // 97
二、運算符
- 運算符: 進行特點操作的符號,如“+”
- 表達式: 用運算符相連的式子
1. 算數運算符
1.1 +-*/%
&字符串連接
運算符 | 說明 |
---|---|
+ | 加法運算,字符串連接運算 |
- | 減法運算 |
* | 乘法運算 |
/ | 除法運算 |
% | 取模運算,兩個數字相除取餘數 |
++ 、 -- |
自增自減運算 |
- java中整數運算,不會產生浮點數(除法會捨去小數部分)
- 一旦運算涉及不同類型,結果將會按照數據類型範圍大的那種(浮點數和整數相加得浮點數)
- 對於字符串String而言,加號代表連接操作(字符串加其他數據類型,還是字符串)
- 運算有優先級,記住,小括號優先級最高即可。(這樣也可以讓代碼可讀性更強)
1.2 自增自減運算符
自增自減運算符,可以讓原本的值±1。常量不可以使用。
- 使用格式:
++變量名
或變量名++
- 使用方式:
單獨使用:++變量名
和變量名++
沒有任何區別,完全一樣
混合使用(賦值,打印之類):++變量名
,變量立馬+1,任何拿着結果進行使用(先加後用)
變量名++
,首先使用變量原值,任何再讓其+1(先用後加)
注: 最後的代碼可讀性很差,日常生活不要這樣寫
2. 賦值運算符
複合
賦值運算符 | 含義 |
---|---|
= | 等於 |
+= | 加等於 |
- = | 減等於 |
*= | 乘等於 |
/= | 除等於 |
%= | 取模等 |
- 會發現:
a += b --> a = a + b
複合賦值運算,隱含了一個強制 類型轉換。
3. 比較運算符
比較運算符,是將兩個數據進行比較。比較的結果是boolean
符號 | 說明 |
---|---|
== | 比較符號兩邊數據是否相等,相等結果是true。 |
< | 比較符號左邊的數據是否小於右邊的數據,如果小於結果是true。 |
> | 比較符號左邊的數據是否大於右邊的數據,如果大於結果是true。 |
<= | 比較符號左邊的數據是否小於或者等於右邊的數據,如果小於結果是true。 |
>= | 比較符號左邊的數據是否大於或者等於右邊的數據,如果小於結果是true。 |
!= | 不等於符號 ,如果符號兩邊的數據不相等,結果是true |
4. 邏輯運算符
邏輯運算符只能用於布爾值,產生布爾值。
運算符 | 說明 |
---|---|
&& 短路與 |
1. 兩邊都是true,結果是true;2. 一邊是false,結果是false;短路特點:符號左邊是false,右邊不再運算 |
|| 短路或 |
1. 兩邊都是false,結果是false;2. 一邊是true,結果是true;短路特點: 符號左邊是true,右邊不再運算 |
! 取反 |
1. ! true 結果是false;2. ! false結果是true |
- 短路效果,可以節省性能。只要短路了,後邊的代碼,壓根不會執行。
- 與或能將n個條件連寫。
5. 三元運算符
- 一元運算符: 只需要一個數據,如:取反
!
,自增++
- 二元運算符: 需要兩個數據,如:加法
+
,賦值=
- 格式:
條件 ? 值1:值2;
條件爲true,返回值1
條件爲false,返回值2
- 注意: 三元運算符一定要使用,賦值也好,直接打印也罷,一定要使用。
如果是賦值的話,值的數據類型要滿足變量的數據類型。
三、方法入門
有一個很著名的羅老師,羅翔老師,他姓張,有個外號叫張三。
張三昨天很無聊,拿起一本刑法,戰術摸下巴,然後去犯罪了。
張三今天很無聊,拿起一本刑法,戰術摸下巴,然後去犯罪了。
張三以後肯定天天無聊,天天拿起一本刑法,天天戰術摸下巴,然後去犯罪。
- 寫成代碼長這樣:
public class Demo1DataType{
public static void main(String[] args){
System.out.println("看刑法")
System.out.println("戰術摸下巴")
System.out.println("去犯罪")
System.out.println("看刑法")
System.out.println("戰術摸下巴")
System.out.println("去犯罪")
System.out.println("看刑法")
System.out.println("戰術摸下巴")
System.out.println("去犯罪")
// ......
}
}
- 那麼問題來了 ,張三累不累?
- 答 ,張三累不累,我不知道,但是我累。
有沒有辦法,讓我不那麼累?把張三的日常,寫成一個“張三的一天”這個方法,每次張三無聊時,都使用這個方法就行。
方法的重要功能,就是提高代碼複用性
最基本的方法格式
- 最基本的方法格式:
public static void 方法名稱(){ // 方法名使用小駝峯
方法體;
}
方法定義無先後順序
方法的定義不能包含嵌套包含關係
- 調用:
方法名稱();
- Demo: 張三的一天