一、本單元知識點概述
二、本單元目標
(Ⅰ)重點知識目標
1.定義出各種資料型別的變數
2.理解自動型別提升
3.理解強制型別轉換
(Ⅱ)能力目標
1.能夠定義出所有型別的常量
2.理解Java中的基本資料型別分類
3.能夠定義8種基本資料型別的變數
4.理解資料型別的強制轉換
5.理解資料型別的自動轉換
6.瞭解ASCII編碼表
7.理解int型別和char型別的運算原理
三、本單元知識詳講
2.1常量
2.1.1 概述★★
“常量”的廣義概念是:‘不變化的量’(例如:在計算機程式執行時,不會被程式修改的量;數學函式中的某一個量,例如每一個具體的圓的半徑、直徑數值;物理學中的靠近地面的重力加速度;真空中的光速數值;不同的微粒的各自的質量)換言之,常量,在計算機技術方面雖然是為了硬體、軟體、程式語言服務,但是它並不是專門為硬體、軟體、程式語言而引入的概念。
2.1.2 什麼是常量★★
常量:是指在Java程式中固定不變的資料。
2.1.3 常量的分類★★
型別 | 含義 | 資料舉例 |
---|---|---|
整數常量 | 所有的整數 | 0,1, 567, -9 |
小數常量 | 所有的小數 | 0.0, -0.1, 2.55 |
字元常量 | 單引號引起來,只能寫一個字元,必須有內容 | 'a' , ' ', '好' |
字串常量 | 雙引號引起來,可以寫多個字元,也可以不寫 | "A" ,"Hello" ,"你好" ,"" |
布林常量 | 只有兩個值(流程控制中講解) | true,false |
空常量 | 只有一個值(引用資料型別中講解) | null |
2.1.4 常量的案例講解★★
需求:輸出各種型別的常量
1 public class ConstantDemo {
2 public static void main(String[] args){
3 //輸出整數常量
4 System.out.println(123);
5 //輸出小數常量
6 System.out.println(0.125);
7 //輸出字元常量
8 System.out.println('A');
9 //輸出布林常量
10 System.out.println(true);
11 //輸出字串常量
12 System.out.println("你好Java");
13 }
14 }
2.2 變數和資料型別
2.2.1 資料型別★★★★
java語言是強型別的語言,對於每一種資料都定義了明確的具體資料型別,在記憶體中分配了不同大小的記憶體空間。
2.2.2 資料型別分類★★★
Java的資料型別分為兩大類:
基本資料型別:包括 整數 、 浮點數 、 字元 、 布林 。
引用資料型別:包括 類 、 陣列 、 介面 。
2.2.3 基本資料型別★★★
四類八種基本資料型別:
資料型別 | 關鍵字 | 記憶體佔用 | 取值範圍 |
---|---|---|---|
位元組型 | byte | 1個位元組 | -128~127 |
短整型 | short | 2個位元組 | -32768~32767 |
整型 | int(預設) | 4個位元組 | -2的31次方~231次方-1 |
長整型 | long | 8個位元組 | -2的63次方~2的63次方-1 |
單精度浮點數 | float | 4個位元組 | 1.4013E-45~3.4028E+38 |
雙精度浮點數 | double(預設) | 8個位元組 | 4.9E-324~1.7977E+308 |
字元型 | char | 2個位元組 | 0-65535 |
布林型別 | boolean | 1個位元組 | true,false |
Java中的預設型別:整數型別是 int 、浮點型別是 double 。
2.2.4 變數的概述★★
變數:常量是固定不變的資料,那麼在程式中可以變化的量稱為變數。
數學中,可以使用字母代替數字運算,例如 x=1+5 或者 6=x+5。
程式中,可以使用字母儲存數字的方式進行運算,提高計算能力,可以解決更多的問題。比如x儲存5,x也可以儲存6,這樣x儲存的資料是可以改變的,也就是我們所講解的變數。
Java中要求一個變數每次只能儲存一個數據,必須要明確儲存的資料型別。
2.2.5 什麼是變數★★★★
java變數的定義:在程式執行期間,隨時可能產生一些臨時資料,應用程式會將這些資料儲存在一些記憶體單元中,每個記憶體單元都用一個識別符號來標識。這些記憶體單元被稱為變數,定義的識別符號就是變數名,記憶體單元中儲存的資料就是變數的值
2.2.6 變數的定義★★★
變數定義的格式包括三個要素: 資料型別 、 變數名 、 資料值 。
2.2.7 定義變數的格式★★★★
格式:資料型別 變數名 = 資料值
1 public class VariableDemo {
2 public static void main(String[] args){
3 //定義整型變數
4 int a = 1;
5 //定義單精度浮點型變數
6 float f = 12.56F;
7 //定義boolean變數
8 boolean b = false;
9 //定義字元變數
10 char ch = 'c';
11
12 }
13 }
2.2.8 定義變數的練習★★★★
定義所有基本資料型別的變數,程式碼如下:
1 public class Variable {
2 public static void main(String[] args){
3 //定義位元組型變數
4 byte b = 100;
5 System.out.println(b);
6 //定義短整型變數
7 short s = 1000;
8 System.out.println(s);
9 //定義整型變數
10 int i = 123456;
11 System.out.println(i);
12 //定義長整型變數
13 long l = 12345678900L;
14 System.out.println(l);
15 //定義單精度浮點型變數
16 float f = 5.5F;
17 System.out.println(f);
18 //定義雙精度浮點型變數
19 double d = 8.5;
20 System.out.println(d);
21 //定義布林型變數
22 boolean bool = false;
23 System.out.println(bool);
24 //定義字元型變數
25 char c = 'A';
26 System.out.println(c);
27 }
28 }
long型別:建議資料後加L表示。
float型別:建議資料後加F表示。
2.2.9 定義變數的注意事項★★★
變數名稱:在同一個大括號範圍內,變數的名字不可以相同。
變數賦值:定義的變數,不賦值不能使用。
2.3 資料型別轉換
2.3.1 自動轉換原理圖解★★★
Java程式中要求參與的計算的資料,必須要保證資料型別的一致性,如果資料型別不一致將發生型別的轉換。
一個 int 型別變數和一個 byte 型別變數進行加法運算, 結果會是什麼資料型別?
1 int i = 1;
2 byte b = 2;
3 int j = b + i;
運算結果,變數的型別將是 int 型別,這就是出現了資料型別的自動型別轉換現象。
自動轉換:將 取值範圍小的型別 自動提升為 取值範圍大的型別
1 public static void main(String[] args) {
2 int i = 1;
3 byte b = 2;
4 // byte x = b + i; // 報錯
5 //int型別和byte型別運算,結果是int型別
6 int j = b + i;
7 System.out.println(j);
8 }
轉換的原理圖解:
byte 型別記憶體佔有1個位元組,在和 int 型別運算時會提升為 int 型別 ,自動補充3個位元組,因此計算後的結果還是 int 類 型。
同樣道理,當一個 int 型別變數和一個 double 變數運算時, int 型別將會自動提升為 double 型別進行運算。
1 public static void main(String[] args) {
2 int i = 1;
3 double d = 2.5;
4 //int型別和double型別運算,結果是double型別
5 //int型別會提升為double型別
6 double e = d+i;
7 System.out.println(e);
8 }
2.3.2 轉換規則★★★
範圍小的型別向範圍大的型別提升, byte、short、char 運算時直接提升為 int
1 byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
2.3.3 強制轉換原理圖解★★★★
將 1.5 賦值到 int 型別變數會發生什麼?產生編譯失敗,肯定無法賦值。
1 int i = 1.5;//錯誤
double 型別記憶體8個位元組, int 型別記憶體4個位元組。 1.5 是 double 型別,取值範圍大於 int 。可以理解為 double 是8 升的水壺, int 是4升的水壺,不能把大水壺中的水直接放進小水壺去。
想要賦值成功,只有通過強制型別轉換,將 double 型別強制轉換成 int 型別才能賦值。
強制型別轉換:將 取值範圍大的型別 強制轉換成 取值範圍小的型別 。
比較而言,自動轉換是Java自動執行的,而強制轉換需要我們自己手動執行。
轉換格式:
資料型別 變數名 = (資料型別)被轉資料值;
將 1.5 賦值到 int 型別,程式碼修改為:
1 // double型別資料強制轉成int型別,直接去掉小數點。
2 int i = (int)1.5;
同樣道理,當一個 short 型別與 1 相加,我們知道會型別提升,但是還想給結果賦值給short型別變數,就需要強制轉換。
1 public static void main(String[] args) {
2 //short型別變數,記憶體中2個位元組
3 short s = 1;
4 /*出現編譯失敗 s和1做運算的時候,1是int型別,s會被提升為int型別 s+1後的結果是int型別,將結果在賦值 會short型別時發生錯誤 short記憶體2個位元組,int型別4個位元組 必須將int強制轉成short才能完成賦值 */
5 s = s + 1;//編譯失敗
6 s = (short)(s+1);//編譯成功
7 }
轉換原理圖解:
2.3.4 強烈注意★★★★
浮點轉成整數,直接取消小數點,可能造成資料損失精度。
int 強制轉成 short 砍掉2個位元組,可能造成資料丟失。
1 // 定義s為short範圍內最大值
2 short s = 32767;
3 // 運算後,強制轉換,砍掉2個位元組後會出現不確定的結果
4 s = (short)(s + 10);
2.3.5 編碼表★★★
1 public static void main(String[] args) {
2 //字元型別變數
3 char c = 'a';
4 int i = 1; //字元型別和int型別計算
5 System.out.println(c+i);//輸出結果是98
6 }
在計算機的內部都是二進位制的0、1資料,如何讓計算機可以直接識別文字的問題呢?就產生出了編碼表的概念。
編碼表 :就是將人類的文字和一個十進位制數進行對應起來組成一張表格。
人們就規定:
字元 | 數值 |
---|---|
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
將所有的英文字母,數字,符號都和十進位制進行了對應,因此產生了世界上第一張編碼表ASCII
(American Standard Code for Information Interchange 美國標準資訊交換碼)。
在char型別和int型別計算的過程中,char型別的字元先查詢編碼表,得到97,再和1求和,結果為98。char型別提升 為了int型別。char型別記憶體2個位元組,int型別記憶體4個位元組。
四、本單元知識總結
1.常量和變數的定義
2.java中資料型別的分類
3.自動型別提升
4.強制型別轉換