自學Java第二章——《Java的基礎語法》

2.1 標識符

簡單的說,凡是程序員本身命名的部分均可以稱爲標識符。java

即給類、變量、方法、包等命名的字符序列,稱爲標識符。程序員

 

一、標識符的命名規則面試

(1)Java的標識符只能使用26個英文字母大小寫,0-9的數字,下劃線_,美圓符號$數組

(2)不能使用Java的關鍵字(包含保留字)和特殊值編碼

(3)數字不能開頭atom

(4)不能包含空格spa

(5)嚴格區分大小寫設計

 

二、標識符的命名規範code

(1)見名知意對象

(2)類名、接口名等:每一個單詞的首字母都大寫,形式:XxxYyyZzz,

例如:HelloWorld,String,System等

(3)變量、方法名等:從第二個單詞開始首字母大寫,其他字母小寫,形式:xxxYyyZzz,

例如:age,name,bookName,main

(4)包名等:每個單詞都小寫,單詞之間使用點.分割,形式:xxx.yyy.zzz,

例如:java.lang

(5)常量名等:每個單詞都大寫,單詞之間使用下劃線_分割,形式:XXX_YYY_ZZZ,

例如:MAX_VALUE,PI

 

2.2 變量

2.2.1 變量的概念

變量的做用:用來存儲數據,表明內存的一塊存儲區域,變量中的值是能夠改變的。

2.2.2 變量的三要素

一、數據類型

二、變量名

三、值

2.2.3 變量的使用應該注意什麼?

一、先聲明後使用

若是沒有聲明,會報「找不到符號」錯誤

二、在使用以前必須初始化

若是沒有初始化,會報「未初始化」錯誤

三、變量有做用域

若是超過做用域,也會報「找不到符號」錯誤

四、在同一個做用域中不能重名

 

2.2.4 變量的聲明和賦值、使用的語法格式?

一、變量的聲明的語法格式:

數據類型  變量名;
例如:
int age;
String name;
double weight;
char gender;
boolean isMarry;

二、變量的賦值的語法格式:

變量名 = 值;
例如:
age = 18;
name = "柴林燕"; //字符串的值必須用""
weight = 44.4;
gender = '女';//單字符的值必須使用''
isMarry = true;

三、變量的使用的語法格式:

經過變量名直接引用

例如:
(1)輸出變量的值
System.out.print(name);
System.out.print("姓名:" + name);//""中的內容會原樣顯示
System.out.print("name = " + name);
(2)計算
age = age + 1;

2.3 數據類型

2.3.1 Java數據類型的分類

一、基本數據類型

8種:整型系列(byte,short,int,long)、浮點型(float,double)、單字符型(char)、布爾型(boolean)

二、引用數據類型

類、接口、數組、枚舉.....

2.3.2 Java的基本數據類型

一、整型系列

(1)byte:字節類型

佔內存:1個字節

存儲範圍:-128~127

(2)short:短整型類型

佔內存:2個字節

存儲範圍:-32768~32767

(3)int:整型

佔內存:4個字節

存儲範圍:-2的31次方 ~ 2的31次方-1

(4)long:整型

佔內存:8個字節

存儲範圍:-2的63次方 ~ 2的63次方-1

注意:若是要表示某個常量數字它是long類型,那麼須要在數字後面加L

 

二、浮點型系列(小數)

(1)float:單精度浮點型

佔內存:4個字節

精度:科學記數法的小數點後6~7位

注意:若是要表示某個常量數字是float類型,那麼須要在數字後面加F或f

(2)double:雙精度浮點型

佔內存:8個字節

精度:科學記數法的小數點後15~16位

 

三、單字符類型

char:字符類型

佔內存:2個字節

Java中使用的字符集:Unicode編碼集

字符的三種表示方式:

(1)'一個字符'

例如:'A','0','尚'

(2)轉義字符

\n:換行
\r:回車
\t:Tab鍵
\\:\
\":」
\':
\b:刪除鍵Backspace

(3)\u字符的Unicode編碼值的十六進制型

例如:\u5c1a表明'尚'

 

四、布爾類型

boolean:只能存儲true或false

2.3.3 進制(瞭解,能夠暫時忽略)

一、進制的分類:

(1)十進制

數字組成:0-9

進位規則:逢十進一

(2)二進制

數字組成:0-1

進位規則:逢二進一

(3)八進制

數字組成:0-7

進位規則:逢八進一

(4)十六進制

數字組成:0-9,a~f(或A~F)

進位規則:逢十六進一

 

二、請分別用四種類型的進制來表示10,並輸出它的結果:(瞭解)

(1)十進制:正常表示

System.out.println(10);

(2)二進制:0b或0B開頭

System.out.println(0B10);

(3)八進制:0開頭

System.out.println(010);

(4)十六進制:0x或0X開頭

System.out.println(0X10);

 

三、爲何byte是-128~127?(理解)

1個字節:8位

0000 0001 ~ 0111 111 ==> 1~127

1000 0001 ~ 1111 1111 ==> -127 ~ -1

0000 0000 ==>0

1000 0000 ==> -128(特殊規定)

解釋:計算機數據的存儲(瞭解)

計算機數據的存儲使用二進制補碼形式存儲,而且最高位是符號位,1是負數,0是正數。

規定:正數的補碼與反碼、原碼同樣,稱爲三碼合一;

負數的補碼與反碼、原碼不同:

負數的原碼:把十進制轉爲二進制,而後最高位設置爲1

負數的反碼:在原碼的基礎上,最高位不變,其他位取反(0變1,1變0)

負數的補碼:反碼+1

例如:byte類型(1個字節,8位)

25 ==> 原碼 0001 1001 ==> 反碼 0001 1001 -->補碼 0001 1001

-25 ==>原碼 1001 1001 ==> 反碼1110 0110 ==>補碼 1110 0111

底層是用加法代替減法:-128==》-127-1==》-127+(-1)

-127- -1 ==> -127 + 1

 

四、學生疑惑解答?

(1)爲何float(4個字節)比long(8個字節)的存儲範圍大?

(2)爲何double(8個字節)比float(4個字節)精度範圍大?

由於float、double底層也是二進制,先把小數轉爲二進制,而後把二進制表示爲科學記數法,而後只保存:

(1)符號位(2)指數位(3)尾數位

詳見《float型和double型數據的存儲方式.docx》

2.3.4 基本數據類型的轉換

一、自動類型轉換

(1)當把存儲範圍小的值(常量值、變量的值、表達式計算的結果值)賦值給了存儲範圍大的變量時,

byte->short->int->long->float->double

char->

int i = 'A';//char自動升級爲int
double d = 10;//int自動升級爲double

 

(2)當存儲範圍小的數據類型與存儲範圍大的數據類型一塊兒混合運算時,會按照其中最大的類型運算

int i = 1;
byte b = 1;
double d = 1.0;

double sum = i + b + d;//混合運算,升級爲double

(3)當byte,short,char數據類型進行算術運算時,按照int類型處理

byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1 + b2);//b1 + b2自動升級爲int

char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2);//113

(4)boolean類型不參與

 

二、強制類型轉換

(1)當把存儲範圍大的值(常量值、變量的值、表達式計算的結果值)賦值給了存儲範圍小的變量時,須要強制類型轉換

double->float->long->int->short->byte

->char

提示:有風險,可能會損失精度或溢出

double d = 1.2;
int num = (int)d;//損失精度

int i = 200;
byte b = (byte)i;//溢出

(2)boolean類型不參與

(3)當某個值想要提高數據類型時,也可使用強制類型轉換

int i = 1;
int j = 2;
double shang = (double)i/j;

提示:這個狀況的強制類型轉換是沒有風險的。

 

2.3.5 特殊的數據類型轉換

一、任意數據類型的數據與String類型進行「+」運算時,結果必定是String類型

System.out.println("" + 1 + 2);//12

 

二、可是String類型不能經過強制類型()轉換,轉爲其餘的類型

String str = "123";
int num = (int)str;//錯誤的

 

2.4 運算符

一、按照操做數個數的分類:

(1)一元運算符:操做數只有一個

例如:正號(+),負號(-),自增(++),自減(--),邏輯非(!),按位取反(~)

(2)二元運算符:操做數有兩個

例如:加(+),減(-),乘(*),除(/),模(%)

大於(>),小於(<),大於等於(>=),小於等於(<=),等於(==),不等於(!=)

賦值(=,+=,-=,*=,/=,%=,>>=,<<=。。。)

邏輯與(&),邏輯或(|),邏輯異或(^),短路與(&&),短路或(||)

左移(<<),右移(>>),無符號右移(>>>),按位與(&),按位或(|),按位異或(^)

(3)三元運算符:操做數三個

例如: ? :

 

二、Java基本數據類型的運算符:

(1)算術運算符

(2)賦值運算符

(3)比較運算符

(4)邏輯運算符

(5)條件運算符

(6)位運算符(難)

2.4.1 算術運算符

加法:+

減法:-

乘法:*

除法:/

注意:整數與整數相除,只保留整數部分

取模:% 取餘

注意:取模結果的正負號只看被模數

正號:+

負號:-

自增:++

自減:--

原則:自增與自減

++/--在前的,就先自增/自減,後取值

++/--在後的,就先取值,後自增/自減

整個表達式的掃描,是從左往右掃描,若是後面的先計算的,那麼前面的就暫時先放到「操做數棧」中

代碼示例:

int i = 1;
i++;//i=2

int j = 1;
++j;//j=2

int a = 1;
int b = a++;//(1)先取a的值「1」放操做數棧(2)a再自增,a=2(3)再把操做數棧中的"1"賦值給b,b=1

int m = 1;
int n = ++m;//(1)m先自增,m=2(2)再取m的值「2」放操做數棧(3)再把操做數棧中的"2"賦值給n,n=1

int i = 1;
int j = i++ + ++i * i++;
/*
從左往右加載
(1)先算i++
①取i的值「1」放操做數棧
②i再自增 i=2
(2)再算++i
①i先自增 i=3
②再取i的值「3」放操做數棧
(3)再算i++
①取i的值「3」放操做數棧
②i再自增 i=4
(4)先算乘法
用操做數棧中3 * 3 = 9,並把9壓會操做數棧
(5)再算求和
用操做數棧中的 1 + 9 = 10
(6)最後算賦值
j = 10
*/

 

2.4.2 賦值運算符

基本賦值運算符:=

擴展賦值運算符:+=,-=,*=,/=,%=...

注意:全部的賦值運算符的=左邊必定是一個變量

擴展賦值運算符=右邊的計算結果的類型若是比左邊的大的話會強制類型轉換,因此結果可能有風險。

擴展賦值運算符的計算:(1)賦值最後算(2)加載數據的順序是把左邊的變量的值先加載,再去與右邊的表達式進行計算

int i = 1;
int j = 5;
j *= i++ + j++;//j = j *(i++ + j++);
/*
(1)先加載j的值「5」
(2)在計算i++
①先加載i的值「1」
②再i自增,i=2
(3)再計算j++
①先加載j的值"5"
②再j自增,j=6
(4)算 加法
i + 5 = 6
(5)算乘法
5 * 6 = 30
(6)賦值
j = 30
*/

 

2.4.3 比較運算符

大於:>

小於:<

大於等於:>=

小於等於:<=

等於:== 注意區分賦值運算符的=

不等於:!=

注意:比較表達式的運算結果必定只有true/false

比較表達式能夠做爲(1)條件(2)邏輯運算符的操做數

 

2.4.4 邏輯運算符

邏輯運算符的操做數必須是布爾值,結果也是布爾值

邏輯與:& 運算規則:只有左右兩邊都爲true,結果才爲true。 例如:true & true 結果爲true false & true 結果爲false true & false 結果爲false false & false 結果爲false 邏輯或:| 運算規則:只要左右兩邊有一個爲true,結果就爲true。 例如:true | true 結果爲true false | true 結果爲true true | false 結果爲true false | false 結果爲false 邏輯異或:^ 運算規則:只有左右兩邊不一樣,結果才爲true。 例如:true ^ true 結果爲false false ^ true 結果爲true true ^ false 結果爲true false ^ false 結果爲false

邏輯非:! 運算規則:布爾值取反 例如:!true 爲false !false 爲true

短路與:&& 運算規則:只有左右兩邊都爲true,結果才爲true。 例如:true & true 結果爲true true & false 結果爲false false & ? 結果就爲false 它和邏輯與不一樣的是當&&左邊爲false時,右邊就不看了。 短路或:|| 運算規則:只要左右兩邊有一個爲true,結果就爲true。 例如:true | ? 結果爲treu false | true 結果爲true false | false 結果爲false 它和邏輯或不一樣的是當||左邊爲true時,右邊就不看了。

開發中通常用短路與和短路或比較多

面試題:&& 和 &的區別?

&&當左邊爲false,右邊不計算

&無論左邊是true仍是false,右邊都要計算

2.4.5 條件運算符

? :

語法格式:

條件表達式 ? 結果表達式1 : 結果表達式2

運算規則:

整個表達式的結果:當條件表達式爲true時,就取結果表達式1的值,不然就取結果表達式2的值

代碼示例:

(1)boolean類型
boolean marry = true;
System.out.println(marry? "已婚" : "未婚");

(2)求最值
int i = 3;
int j = 5;
int max = i>=j ? i : j;
//當i>=j時,max就賦值爲i的值,不然就賦值爲j的值

 

2.4.6 位運算符

左移:<<

運算規則:左移幾位就至關於乘以2的幾回方

右移:>>

運算規則:右移幾位就至關於除以2的幾回方

無符號右移:>>>

運算規則:往右移動後,左邊空出來的位直接補0,不看符號位

按位與:&

運算規則:

1 & 1 結果爲1

1 & 0 結果爲0

0 & 1 結果爲0

0 & 0 結果爲0

按位或:|

運算規則:

1 | 1 結果爲1

1 | 0 結果爲1

0 | 1 結果爲1

0 & 0 結果爲0

按位異或:^

運算規則:

1 ^ 1 結果爲0

1 ^ 0 結果爲1

0 ^ 1 結果爲1

0 ^ 0 結果爲0

按位取反:~

運算規則:~0就是1

~1就是0

如何區分&,|,^是邏輯運算符仍是位運算符?

若是操做數是boolean類型,就是邏輯運算符,若是操做數是整數,那麼就位運算符。

 

2.4.7 運算符優先級

 

提示說明:

(1)表達式不要太複雜

(2)先算的使用()

 

2.4.8 運算符操做數類型說明

一、算術運算符

數字和單個字符可使用算術運算符。

其中+,當用於字符串時,表示拼接。

 

二、賦值運算符

右邊的常量值、表達式的值、變量的值的類型必須與左邊的變量一致或兼容(能夠實現自動類型轉換)或使用強制類型轉換能夠成功。

 

三、比較運算符

其餘的比較運算符都是隻能用於8種基本數據類型。

其中的==和!=能夠用於引用數據類型的比較,用於比較對象的地址。(後面講)

int i = 10;
int j = 10;
System.out.println(i==j);//true

char c1 = '帥';
char c2 = '帥';
System.out.println(c1 == c2);//true

 

四、邏輯運算符

邏輯運算符的操做數必須是boolean值

 

五、條件運算符

?前面必須是條件,必須是boolean值

結果表達式1和結果表達式2要保持類型一致或兼容

 

六、位運算符

通常用於整數系列

 

以上運算符都是針對基本數據類型設計的。

可以用於引用數據類型只有基本的賦值運算符=,和比較運算符中的==和!=。其餘運算符都不能用於引用數據類型。

其中字符串類型還有一個+,表示拼接。

相關文章
相關標籤/搜索