# 數據類型
Java 是一種強數據類型的語言,就是指在變量進行定義的時候,就指定了變量的數據類型是什么。
**變量的概念:把一堆數據起了個名字。**
數據類型其實就是在內存中用不同的結構對數據進行存儲和運算。
**內存:運行中的程序都會占用內存空間,因為程序在運行過程中,需要開辟包括方法棧區、變量....,廣泛的理解,在程序運行結束后內存空間會被釋放,但是定義的變量、方法等,都是有「生命周期」的,一旦變量銷毀了,內存也是會釋放的。**
在 Java 中,有垃圾自動回收機制 GC ,對于釋放的或者無效的變量會自動回收,不像 C 、C++ 要手動的去釋放。
**數據類型的分類**
**基本數據類型**
* 數值型
* 整數型:byte(-128-127)、short(15次方)、int(31次方)、long(63次方)
* 浮點型:float(38次方)、double(308次方)
* **在實際開發中,我們一般使用 int、double**
* 字符型
* char:用單引號表示,Java 中使用16位的 Unicode 字符集作為編碼方式,
* 表示方式
* 直接通過單個字符表示:'a'、‘9' 等;
* 通過轉義字符表示:'\\t'、'\\n'、'\\r'、'\\'';
* 直接使用 unicode 表示:'\\uxxxx'。
> 1. 在 Java 中是沒有表現多個字符的基本數據類型的,但是在 Java 中提供了一個 String 類,去表現字符串。
> 2. 轉義字符的使用:當你要打印無法列出的字符,比如換行符等等,要用轉義字符,還有就是一些在字符串內要搞錯的字符,總之是對編譯器來說具有特殊意義的字符。
* 布爾型
* boolean:表示邏輯中的真和假,值只有 true / false。
> 在基本數據中,是可以進行類型之間的強制轉化的,但是要注意,如果從低精度的轉化為高精度時不會有問題,但是從高精度轉化為低精度時,可能出現精度缺失。
引用數據類型(類類型):后續講解。
**補充點:**
1. 在Java中,數據類型分為基本數據類型和引用數據類型(類類型)。
作為強類型語言,Java在編譯時,會進行嚴格的語法檢查,每個變量在編譯時,就確定了其類型。所有變量必須顯式地聲明類型,而且必須聲明后使用。
2. 數據類型分類圖示:

3. 浮點類型的使用
* 因為Java浮點數使用二進制數據的科學計數法來表示,因此不能精確的表示一個浮點數。如5.2345556f賦值給float類型的變量,輸出的時候會發生變化,即使用精度更高的double類型,有時這個問題依然會出現。如果開發者希望精確的保存一個浮點數,可以使用BigDecimal類。
* Java語言默認的浮點類型時double。如果希望把一個數當做float類型處理,應該在浮點值后面緊跟f或F,double類型可以d或D,但是沒有必要。
4. 基本類型的類型轉換
在Java程序中,不同的基本類型的值,經常需要進行互相轉換。Java語言中提供的7種數值類型之間可以互相轉換,有兩種類型轉換模式:自動類型轉換和強制類型轉換。
* 自動類型轉換
把某種基本數據類型的值,直接賦值給其他基本數據類型的值。
> 如果把范圍小的數據,賦值給范圍大的數據時,不會出現精度的缺失;反之,則可能會出現精度的缺失。

~~~
class Client1 {
public static void main(String[] args) {
int i = 100;
double di = i;
//int a = di;
System.out.println(di);
}
}
~~~
注意:
> ~~~
> 1.上方代碼左邊轉為右邊的數據類型是沒有問題的;
> 2.當把任何基本數據和字符串,進行連接運算的時候,基本數據類型將自動轉換為字符串類型。
>
> ~~~
* 強制數據類型轉換
如果需要把上方代碼中的右邊,轉換為左邊時,則成為強制類型轉換。
語法:(targetType)value
強制類型轉換時,需加上()運算符。
**強制類型轉換也許會出現精度的缺失或溢出的情況。**
~~~
示例:
int i = 150;
byte b = (byte)i;
System.out.println(b);
int i2 = 100;
byte b2 = (byte)i2;
System.out.println(b2);
String s = "56";
int si = Integer.parseInt(s);
System.out.println(si);
~~~
**如果希望把String類型的數據,強制轉為基本數據類型,可以使用基本數據對應的包裝類實現。**
5.表達式的自動提升
當一個表達式中包含多個基本數據類型的值時,整個算術表達式的數據類型將發生自動提升。
提升規則:
所有的byte/short/char類型將被提升到int;
整個算術表達式的數據類型,將被提升到與表達中最高等級操作數相同的類型。
~~~
示例:
char t1 = 'a';
short t2 = 100;
int t3 = 45;
double t4 = 10.5;
System.out.println(t1 + t2 + t3 + t4);
~~~
**如果表達式包含字符串,應當把+號,當做字符串連接運算符,而不是加法運算符。**
**作業**:
1. 分別為如下值,找到合適的類型來定義
~~~
3.14
2.769343
365
12
'吃'
false
"不可描述"
~~~
比如3.14就使用double
`double a = 3.14;`
2. 練習-類型轉換
~~~
short a = 1;
short b = 2;
~~~
那么`a+b`是什么類型?
- Java業余班教學管理
- JAVA基礎
- JAVA開發學習準備
- JAVA介紹
- 開發JAVA的準備
- JAVA的運行原理
- JDK配置
- 我的第一個JAVA程序
- 類與對象
- 基礎語言要素
- 數據類型
- Eclipse的安裝與使用
- 變量
- 直接量
- 運算符
- 流程控制
- 數組結構
- 面向對象
- 隱藏與封裝
- 深入構造器
- 類的繼承
- 多態
- 包裝類
- final修飾符
- 抽象類
- 接口
- 設計模式
- 單例模式
- 工廠模式
- 集合框架
- 集合排序
- 常用類學習
- 異常處理
- Java基礎綜合練習
- JAVA高級
- 泛型
- 多線程
- 線程的創建
- 線程的生命周期
- 線程同步
- 線程通信
- 輸入輸出流(I/O編程)
- File文件操作
- 字節流與字符流
- 數據庫
- 數據庫介紹
- 數據庫安裝
- SQL
- 表的基本操作
- 修改數據語句
- 數據檢索操作
- 多表數據操作
- 表結構設計
- 綜合應用
- JavaWeb