# 大數據學習筆記第2天-Java語言基礎 #
## 大綱 ##
- 關鍵字
- 標識符
- 常量和變量
- 運算符
- 流程控制
- 方法
- 數組
## 第一節課
- 關鍵字
- 標識符
- 常量與變量
## 第二節課
- 二進制
- 進制基本轉換
- 負數的表現形式
## 第三節課
- 變量
- 基本數據類型
## 第四節課
- 基本數據類型之間的類型轉換
## 關鍵字
Java系統中已經賦予了特殊含義的單詞。特點:全部是小寫字母。
Java中的保留字:現在暫時沒有使用,以后可能會使用的單詞,如:goto, const
### 關鍵字的分類:
- 定義數據類型;
- 定義流程控制;
- 布爾值;
- 引用類型空值;
- 訪問權限修飾符;
- 用于定義類、方法、變量修飾符的關鍵字;
- 用于定義類與類之間關系的關鍵字;
- 用于定義建立實例及引用實例,判斷實例的關鍵字;
- 用于異常處理的關鍵字;
- 用于包的關鍵字;
- 其他修飾關鍵字;
### 分析例子
Hello.java中用到的關鍵字:
public class Hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
關鍵字分析:
- public: 權限修飾符,說明該類是公共的;
- static: 靜態類;
- class: 用于定義類
- void: 該方法返回空值;
## 標識符
用于給方法、變量、類、接口等命名的字符序列;
組成規則:
- 由26個英文字母大小寫、$、下劃線、數字組成;
- 不能以數字開頭;
- 不可以使用關鍵字,但可以包含關鍵字;
Java中嚴格區分大小寫,比如:main和Main是2個不同的方法;
### 標識符的命名規范
Java中的名稱規范:
- 包名:多單詞組成時,所有單詞小寫
- 類名、接口名:多單詞組成時,所有單詞首字母大寫
- 變量名、方法名:多單詞組成時,第一個單詞的首字母小寫,第二個單詞開始每個單詞的首字母大寫
- final變量名:所有的字母大寫,多單詞時單詞之間使用下劃線分隔
- 在命名時,為了提高代碼的可閱讀性,需要做到見名知意;
## 常量與變量
常量表示不能改變的值;
Java中常量(6種字面量常量)的分類:
- 整型常量:直接出現的整數
- 小數常量:直接出現的小數
- 布爾值常量:只有2個值true或false
- 字符常量:用單引號括起來的,1個數字,1個字母或符號
- 字符串常量:將1個或多個字符用雙引號括起來
- null常量:只有一個值 null
對于整數,有4種表現形式:
- 二進制:由0,1組成,滿2進1,用`0b/0B`開頭表示(大小寫一樣)
- 八進制:由0,7組成,滿8進1,用`0`開頭表示
- 十進制:由0,9組成,滿10進1
- 十六進制:由0-9,A-F組成,滿16進1,用`ox/0X`表示(大小寫一樣)
計算機底層是二進制存儲數據的;
## 二進制
- 每個位只能表示 0 和 1 兩種狀態。
- 多個位組合起來可以表示更多的狀態
## 十進制轉二進制、八進制、十六進制
計算機以`8bit`作為存儲數據的基本單位。 `1byte = 8bit`,1個字節等于8個比特。
- 1byte=8bit
- 1kb=1024byte
- 1M=1024kb
- 1G=1024M
- 1T=1024G
- 1P=1024T
- 1E=1024P
### 實現原理:
- 八進制:把二進制數三位一組,計算出對應的十進制數,組合起來就是對應的八進制數。
- 十六進制:把二進制數四位一組,計算出對應的十進制數,組合起來就是對應的十六進制數。
### 如何從十進制轉化為二進制?
除以2,直到商為0,將余數倒排。

十進制轉八進制,基數換成8;十進制轉十六進制,基數換成16。注意:0-9只能表示最多10個數字,所以A:10, B:11, C:12, D:13, E:14, F:15, G:16。
## 二進制、八進制、十六進制轉十進制
### 從二進制轉十進制
位權展開法,每位上的數字x進制數的n次冪(從右往左,從0開始)求和。
### 從二進制轉八進制
每三位為一組,最后組合成的就是八進制
### 從二進制轉十六進制
每四位為一組,最后組合成的就是十六進制
了解:遵守 8421 法則。
## 負數的表現形式
- 補碼:負數在計算機中都是以補碼的形式存在的。最高位表示符號位:0正數、1負數。負數補碼是對其原碼取反加1,不包含符號位。
- 正數:原碼,反碼,補碼(二進制)都相通。
### 求一個負數的補碼
1. 求對應正數的原碼
2. 把正數的原碼符號位變1(負數的原碼)
3. 把負數的原碼除了符號位之外,取反(負數的反碼)
4. 在反碼基礎上+1(負數的補碼)
### 磨刀小試:-7的二進制
數字7,使用8421法則,是1+2+4,所以:7轉化為二進制是 0000 0111
0000 0111 // 7轉化為2進制
1000 0111 // 符號位變為1,表示是負數,得到負數的原碼
1111 1000 // 將負數的原碼,除了符號位進行取反,得到反碼
1111 1001 // 將反碼加1,最終得到負數的二進制
### 總結:快速求一個負數的補碼規律
+7 0000 0111
-7 1111 1001
從右往左,遇到第1個1,往右原樣,往左全取反。
## 變量
- 內存就是程序運行的地方,存放著數據和指令。
- 不同的數據存儲在不同的空間,互不影響。
- 內存空間使用之前,必須先申請。
### 變量的概念:
- 內存中的一塊存儲區域。
- 該區域有自己的名稱(變量名)和類型(數據類型)。
### 為什么要定義變量
就是為了使用內存空間。
### 變量的三個要素
- 類型(數據類型:能存放的數據類型)
- 變量(標識符:通過標識符可以訪問內存空間里的值)
- 值(存儲的內容)
### 定義變量的格式
- 數據類型 變量名=初始值;
- 數據類型 變量名; 變量名=初始值;
## 基本數據類型(四類八種)
整數默認是:int;小數默認是:double;字符串是String類(是引用數據類型)
- 數值型
- 整數類型:byte, short, int, long
- 浮點類型:float, double
- 字符型:char
- 布爾型:boolean

## 定義變量的注意事項
### 作用域
變量定義在哪個大括號里,它的作用就是所在的大括號,同一個作用域中,不能定義同名的變量(類型不同也不行);
### 初始化值
- 初始化有兩種格式,定義時賦值,或先定義后賦值;
- 變量在使用前一定要賦值
### 可讀性
一行上最好只定義一個變量(雖然一行上可以定義多個變量,如:int x,y,z;)
## 類型轉換
- 類型相同的數才能進行運算。
- 不同類型的數進行運算,首先要進行類型轉換,變成相同類型:
- 有的轉換時系統自動完成的(自動類型轉換/隱式類型轉換);
- 有的轉換時強制手動完成的(強制類型轉換/顯式類型轉換);
- 什么時候用到強制類型轉換(大范圍轉小范圍)
舉例:
- 自動類型轉換:double d = 1 + 2.5; //整型自動轉換為double類型
- 強制類型轉換:byte b = (byte)128; //1byte的取值范圍是: -128-127
當定義一個字符類型,賦值一個整數,會自動按照ASCII表進行轉換:

### 表達式的數據類型自動提升:
- 所有byte, short, char型將提升為int型;
- char型參與運算實際上是對應的Unicode編碼值;
- 如果表達式中還有更大表數范圍的類型,則繼續提升;
- boolean類型不參與數值運算,也不能和其他類型進行轉換;

如果遇到:char 和 byte 相加的運算,會全部轉換為整型,再進行運算