一、本單元知識點概述

、本單元目標

(Ⅰ)重點知識目標

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.強制型別轉換