第一章 數據類型轉換java
Java程序中要求參與的計算的數據,必需要保證數據類型的一致性,若是數據類型不一致將發生類型的轉換。shell
1.1 自動轉換工具
一個 int 類型變量和一個 byte 類型變量進行加法運算, 結果會是什麼數據類型?學習
int i = 1; byte b = 2;
運算結果,變量的類型將是 int 類型,這就是出現了數據類型的自動類型轉換現象。測試
public static void main(String[] args) { int i = 1; byte b = 2; // byte x = b + i; // 報錯 //int類型和byte類型運算,結果是int類型 int j = b + i; System.out.println(j); }
轉換原理圖解
byte 類型內存佔有1個字節,在和 int 類型運算時會提高爲 int 類型 ,自動補充3個字節,所以計算後的結果仍是 int 類
型。編碼
一樣道理,當一個 int 類型變量和一個 double 變量運算時, int 類型將會自動提高爲 double 類型進行運算。spa
public static void main(String[] args) { int i = 1; double d = 2.5; //int類型和double類型運算,結果是double類型 //int類型會提高爲double類型 double e = d+i; System.out.println(e); }
轉換規則
範圍小的類型向範圍大的類型提高, byte 、short、char 運算時直接提高爲 int 。命令行
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
1.2 強制轉換
將 1.5 賦值到 int 類型變量會發生什麼?產生編譯失敗,確定沒法賦值。3d
int i = 1.5; // 錯誤
double 類型內存8個字節, int 類型內存4個字節。 1.5 是 double 類型,取值範圍大於 int 。能夠理解爲 double 是8
升的水壺, int 是4升的水壺,不能把大水壺中的水直接放進小水壺去。
想要賦值成功,只有經過強制類型轉換,將 double 類型強制轉換成 int 類型才能賦值。orm
比較而言,自動轉換是Java自動執行的,而強制轉換須要咱們本身手動執行。
轉換格式:
數據類型 變量名 = (數據類型)被轉數據值;
將 1.5 賦值到 int 類型,代碼修改成:
// double類型數據強制轉成int類型,直接去掉小數點。 int i = (int)1.5;
一樣道理,當一個 short 類型與 1 相加,咱們知道會類型提高,可是還想給結果賦值給short類型變量,就須要強制轉換。
public static void main(String[] args) { //short類型變量,內存中2個字節 short s = 1; /* 出現編譯失敗 s和1作運算的時候,1是int類型,s會被提高爲int類型 s+1後的結果是int類型,將結果在賦值會short類型時發生錯誤 short內存2個字節,int類型4個字節 必須將int強制轉成short才能完成賦值 */ s = s + 1;//編譯失敗 s = (short)(s+1);//編譯成功 }
轉換原理圖解
強烈注意
// 定義s爲short範圍內最大值 short s = 32767; // 運算後,強制轉換,砍掉2個字節後會出現不肯定的結果 s = (short)(s + 10);
1.3 ASCII 編碼表
public static void main(String[] args) { //字符類型變量 char c = 'a'; int i = 1; //字符類型和int類型計算 System.out.println(c+i);//輸出結果是98 }
在計算機的內部都是二進制的0、1數據,如何讓計算機能夠直接識別人類文字的問題呢?就產生出了編碼表的概念。
人們就規定:
字符 | 數值 |
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
小貼士:
在char類型和int類型計算的過程當中,char類型的字符先查詢編碼表,獲得97,再和1求和,結果爲98。char類型提高
爲了int類型。char類型內存2個字節,int類型內存4個字節。
第二章 運算符
2.1 算數運算符
算數運算符包括:
Java中,整數使用以上運算符,不管怎麼計算,也不會獲得小數。
public static void main(String[] args) { int i = 1234; System.out.println(i/1000*1000);//計算結果是1000 }
public static void main(String[] args) { int a = 1; int b = ++a; System.out.println(a);//計算結果是2 System.out.println(b);//計算結果是2 }
public static void main(String[] args) { int a = 1; int b = a++; System.out.println(a);//計算結果是2 System.out.println(b);//計算結果是1 }
public static void main(String[] args){ System.out.println("5+5="+5+5);//輸出5+5=55 }
2.2 賦值運算符
public static void main(String[] args){ int i = 5; i+=5;//計算方式 i=i+5 變量i先加5,再賦值變量i System.out.println(i); //輸出結果是10 }
2.3 比較運算符
public static void main(String[] args) { System.out.println(1==1);//true System.out.println(1<2);//true System.out.println(3>4);//false System.out.println(3<=4);//true System.out.println(3>=4);//false System.out.println(3!=4);//true }
2.4 邏輯運算符
public static void main(String[] args) { System.out.println(true && true);//true System.out.println(true && false);//false System.out.println(false && true);//false,右邊不計算 System.out.println(false || false);//falase System.out.println(false || true);//true System.out.println(true || false);//true,右邊不計算 System.out.println(!false);//true }
2.5 三元運算符
數據類型 變量名 = 布爾類型表達式?結果1:結果2
public static void main(String[] args) { int i = (1==2 ? 100 : 200); System.out.println(i);//200 int j = (3<=4 ? 500 : 600); System.out.println(j);//500 }
第三章 方法入門
3.1 概述
咱們在學習運算符的時候,都爲每一個運算符單獨的建立一個新的類和main方法,咱們會發現這樣編寫代碼很是的繁瑣,並且
重複的代碼過多。可否避免這些重複的代碼呢,就須要使用方法來實現。
當咱們須要這個功能的時候,就能夠去調用。這樣即實現了代碼的複用性,也解決了代碼冗餘的現象。
3.2 方法的定義
定義格式:
修飾符 返回值類型 方法名 (參數列表){ 代碼... return ; }
public static void methodName() { System.out.println("這是一個方法"); }
3.3 方法的調用
方法在定義完畢後,方法不會本身運行,必須被調用才能執行,咱們能夠在主方法main中來調用咱們本身定義好的方法。在
主方法中,直接寫要調用的方法名字就能夠調用了。
public static void main(String[] args) { //調用定義的方法method method(); } //定義方法,被main方法調用 public static void method() { System.out.println("本身定義的方法,須要被main調用運行"); }
3.4 調用練習
將三元運算符代碼抽取到自定義的方法中,並調用。
public static void main(String[] args) { //調用定義的方法operator operator(); } //定義方法,方法中定義三元運算符 public static void operator() { int i = 0; i = (1==2 ? 100:200); System.out.println(i); int j = 0 ; j = (3<=4 ? 500:600); System.out.println(j); }
3.5 注意事項
public class Demo { public static void main(String[] args){ } //正確寫法,類中,main方法外面能夠定義方法 public static void method(){} }
public class Demo { public static void main(String[] args){ //錯誤寫法,一個方法不能定義在另外一方法內部 public static void method(){} } }
第四章 JShell腳本工具
JShell腳本工具是JDK9的新特性
何時會用到 JShell 工具呢,當咱們編寫的代碼很是少的時候,而又不肯意編寫類,main方法,也不肯意去編譯和運
行,這個時候可使用JShell工具。
啓動JShell工具,在DOS命令行直接輸入JShell命令。
接下來能夠編寫Java代碼,無需寫類和方法,直接寫方法中的代碼便可,同時無需編譯和運行,直接回車便可
小貼士:
JShell工具,只適合片斷代碼的測試,開發更多內容,建議編寫在方法中。
第五章 擴展知識點
5.1 += 符號的擴展
下面的程序有問題嗎?
public static void main(String[] args){ short s = 1; s+=1; System.out.println(s); }
分析: s += 1 邏輯上看做是 s = s + 1 計算結果被提高爲int類型,再向short類型賦值時發生錯誤,由於不能將取值範圍
大的類型賦值到取值範圍小的類型。可是, s=s+1 進行兩次運算 , += 是一個運算符,只運算一次,並帶有強制轉換的特色,
也就是說 s += 1 就是 s = (short)(s + 1) ,所以程序沒有問題編譯經過,運行結果是2.
5.2 常量和變量的運算
下面的程序有問題嗎?
public static void main(String[] args){ byte b1=1; byte b2=2; byte b3=1 + 2; byte b4=b1 + b2; System.out.println(b3); System.out.println(b4); }
分析: b3 = 1 + 2 , 1 和 2 是常量,爲固定不變的數據,在編譯的時候(編譯器javac),已經肯定了 1+2 的結果並沒
有超過byte類型的取值範圍,能夠賦值給變量 b3 ,所以 b3=1 + 2 是正確的。
反之, b4 = b2 + b3 , b2 和 b3 是變量,變量的值是可能變化的,在編譯的時候,編譯器javac不肯定b2+b3的結果是什
麼,所以會將結果以int類型進行處理,因此int類型不能賦值給byte類型,所以編譯失敗。
在jshell中體現: