關鍵字,識別符號,註釋,常量,進位制轉換,變數
關鍵字
被Java語言賦予特定含義的單詞。 特點: 組成關鍵字的字母全部小寫。 注意事項: A:goto和const作為保留字存在,目前並不使用。注意:保留字在jdk的新版本中可能會提升為關鍵字。 B:類似於Notepad++這樣的高階記事本會對關鍵字有特殊顏色標記。
例項程式碼
/* 關鍵字:被java語言賦予特定含義的單詞。 特點:組成關鍵字單詞的字母全部小寫。 注意: A:goto和const是保留字,目前並不使用。注意:保留字在jdk的新版本中可能會提升為關鍵字。 B:類似於UE、Notepad++這樣的高階記事本,針對關鍵字都有特殊的顏色標記。 */ class KeyWordDemo { public static void main(String[] args) { System.out.println("HelloWorld"); } }
java中用到的關鍵字如下圖所示:(50個左右)
識別符號
(1)就是給類、介面、方法、變數等起名字的字元序列。 (2)組成規則: A:可由英文大小寫字母組成; B:可由數字組成; C:可由$和_組成; D:可由中文組成,但是不建議用中文! (3)注意事項: A:不能以數字開頭; B:不能是java中的關鍵字; C:java語言嚴格區分大小寫。 (4)開發的常見的命名規則(見名知意) A:包的命名(全部小寫),其實就是資料夾,用於把相同的類名進行區分。 單級包:小寫。 舉例:liuyi com 多級包:小寫,用.隔開。 舉例:cn.itcast com.baidu (習慣是域名反寫) B:類或者介面的命名 一個單詞:單詞的首字母大寫。 舉例:Student,Demo 多個單詞:每個單詞首字母大寫。 舉例:HelloWorld,StudentName C:方法或者變數的命名 一個單詞:單詞的首字母小寫。 舉例:name,main 多個單詞:從第二個單詞開始,每個單詞首字母大寫。 舉例:studentAge,showAllNames() D:常量的命名 全部大寫 一個單詞:大寫 舉例:PI 多個單詞:大寫,並用_隔開。 舉例:STUDENT_MAX_AGE
註釋
就是對程式進行解釋說明的文字,不會被JVM解釋執行 分類: A:單行註釋://註釋文字 單行註釋可以巢狀使用。 B:多行註釋:/*註釋文字*/ 多行註釋不可以巢狀使用。 C:文件註釋(後面講):/**註釋文字.*/ 被javadoc工具解析生成一個說明書,面向物件部分講解 把HelloWorld案例寫了一個帶註釋的版本。 後面我們要寫一個程式的過程。 需求:寫一個程式,在控制檯輸出HelloWorld。 分析: 1:寫一個java程式,首先定義類。 2:程式要想能夠被jvm呼叫,必須定義main方法。 3:程式要想有輸出結果,必須用輸出語句 實現: 1:定義類用的是class關鍵字,後面跟的是類名。 2:main方法的基本格式。 3:輸出語句的基本格式。 註釋的作用: A:解釋說明程式,提高了程式碼的閱讀性。 B:可以幫助我們除錯程式。 後面我們會講解一個更高階的一個除錯工具
常量
常量: 在程式執行過程中,其值不發生改變的量。 分類: A:字面值常量 B:自定義常量(後面講) 字面值常量 A:字串常量用雙引號括起來的內容。 舉例:“hel1o\",\"world\",\"Hellolorld\" B:整數常量所有的整數。 舉例:100,200 C:小數常量所有的小數。 舉例:10.23,110.11 D:字元常量用單引號括起來的內容 舉例:‘a',A',0' 錯誤的:‘ab' ''空也會報錯 E:布林常量比較特殊。 舉例:true,false F:空常量後面會講到。 舉例:nul1
注意:空常量null不可以直接用於列印輸出
在Java中針對整數常量提供了四種表現形式
二進位制 由0,1組成。以0b開頭。 八進位制 由0,1,...,7組成。以0開頭。 十進位制 由0,1,...,9組成。整數預設是十進位制。 十六進位制 由0,1,...,9,a,b,c,d,e,f(大小寫均可)組成。以0x開頭。
進位制轉換
其他進位制轉換到十進位制
係數:就是每一個位上的數值。
基數:x進位制的基數就是x。
權:對每一個位上的資料,從右往左,並且從0開始編號,對應的編號就是該資料的權。
結果:係數*基數^權次冪之和。
十進位制轉換到其他進位制
方法:除基取餘,直到商為0,餘數反轉。
如下圖所示:
進位制轉換的快速轉換法
A:十進位制和二進位制間的轉換
8421碼。8421碼是BCD程式碼中最常用的一種。
B:二進位制到八進位制,十六進位制的轉換
如下圖所示:
原碼、反碼、補碼
8421碼:
8421碼是中國大陸的叫法,8421碼是BCD程式碼中最常用的一種。
在這種編碼方式中每一位二值程式碼的1都是代表一個固定數值,把每一位的1代表的十進位制數加起來,得到的結果就是它所代表的十進位制數碼。
例如: 1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
變數
在程式的執行過程中,其值在某個範圍內可以發生改變的量 變數的定義格式: A:資料型別 變數名 = 初始化值; B:資料型別 變數名; 變數名 = 初始化值; 從本質上講,變數其實是記憶體中的一小塊區域,使用變數名來訪問這塊區域; 因此,每一個變數使用前必須要先申請(宣告),然後必須進行賦值(填充內容),才能使用 為什麼要定義變數呢? 答:用來不斷的存放同一型別的常量,並可以重複使用
如下圖所示:
使用變數的時候要注意的問題
A:作用域 變數定義在哪一級大括號中,那個大括號的範圍就是這個變數的作用域。 相同的作用域中不能定義兩個同名變數。 B:初始化值 沒有初始化值的變數不能直接使用。 你只要在使用前給值就行,不一定非要在定義的時候就立即給值。 推薦建議:在定義的時候就給初值比較好。 C:在一行上建議只定義一個變數。 其實也可以定義多個變數,但是不建議,不好看。
資料型別
Java語言是一種強型別語言,針對每種資料都提供了對應的資料型別。
資料型別的分類:
A:基本資料型別:4類8種。 B:引用資料型別:類、介面、陣列、字串、Lambda。 注意:字串、Lambda這兩種引用資料型別後面會學習到。 Lambda:希臘字母表中排序第十一位的字母。 大寫Λ用於:粒子物理學上,Λ重子的符號。 小寫λ用於:物理上的波長符號、放射學的衰變常數、線性代數中的特徵值。西裡爾字母的 Л 是由 Lambda 演變而成。
基本資料型別
A:整數型別 佔用位元組數(Byte) 預設是有符號的,資料範圍是: byte 1 -2^8 ~ 2^15-1(-128 ~ 127) short 2 -2^15 ~ 2^15-1 int 4 -2^31 ~ 2^31-1 long 8 -2^63 ~ 2^63-1 B:浮點型別 float 4 -3.403e38 ~ 3.403e38 -3.4.3*10^38 ~ 3.4.3*10^38 double 8 -1.798e308 ~ 1.798e308 -1.798*10^308 ~ 1.798*10^308 C:字元型別 char 2 D:布林型別 boolean 1
注意的地方
a:整數預設是int型別,小數預設是double b:宣告長整數要加L或者l 例如:int i1 = 600; //正確。 long l1 = 88888888888L; //必須加L或l否則會出錯。一般用大寫的L,因為小寫的l像1。 c:宣告單精度的浮點數要加F或者f 例如:double d = 12345.6; //正確。 float f = 12.3f; //必須加f或F否則會出錯。損失精度 d:char型別資料用來表示通常意義上的“字元”,字元常量為用單引號括起來的單個字元。 例如:char ch1= 'a'; char ch2='中'; e:Java字符采用 Unicode 編碼,每個字元佔兩個位元組,因而可用十六進位制編碼形式表示。注:Unicode是全球語言統一編碼 f:boolean型別適於邏輯運算,一般用於程式流程控制。 boolean型別資料只允許取值 true 或 false ,不可以 0 或非 0 的整數替代 true 和 false ,這點和C語言不同 g:與整數型別類似,Java浮點型別有固定的表數範圍和欄位長度,不受平臺影響。 Java浮點型別常量有兩種表示形式: 十進位制數形式, 如: 3.14 314.0 科學記數法形式,如:3.14e2 3.14*10^2 h:Java各整數型別有固定的表數範圍和欄位長度,其不受具體作業系統的影響,以保證Java程式的可移植性。 i:所謂的有效數字:具體地說,是指在分析工作中實際能夠測量到的數字。所謂能夠測量到指的是包括最後一位估計的不確定的數字。 例如:對於一個近似數,從左邊第一個不是0的數字起,到精確到的位數止,所有的數字都叫做這個數的有效數字。
資料型別轉換
一般來說,我們在運算的時候,要求參與運算的資料型別必須一致。
boolean型別不能轉換為其他的資料型別。
預設轉換(從小到大):
A:byte,short,char --> int --> long -- float -- double。
B:byte,short,char相互之間不轉換,他們參與運算時首先預設轉換為int型別。
如下圖所示:
強制轉換(從大到小):
A:可能會有精度的損失,一般不建議這樣使用。
B:格式:
目標資料型別 變數名 = (目標資料型別)(被轉換的資料);
C:注意:不要隨意的去使用強制轉換,因為它隱含了精度損失的問題
自動型別轉換
思考題和麵試題:
思考題:請問下面這個有沒有問題?
double d = 12.345;
float f = d;
答:有問題,可能損失精度。
A:下面兩種方式有區別嗎? float f1 = (float)12.345; float f2 = 12.345f; 答:f1其實是通過一個double型別轉換過來的。 而f2本身就是一個float型別。 B:下面的程式有問題嗎,如果有,在哪裡呢? byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; //資料型別提升了,有問題,可能會損失精度。 byte b4 = 3 + 4; //沒問題。常量,是先把結果計算出來,然後看是否在byte的範圍內,如果在就不報錯! C:下面的操作結果是什麼呢? byte b = (byte)130; //-126 我們要想知道結果是什麼,就應該知道是如何進行計算的。 而我們又知道計算機中資料的運算都是補碼進行的。 而要得到補碼,首先要計算出資料的二進位制。 a:獲取130這個資料的二進位制。首先130預設是有符號的int型別。 00000000 00000000 00000000 10000010 這是130的原碼,也是反碼,還是補碼。 即在計算機內部儲存的是補碼: 00000000 00000000 00000000 10000010 b:做擷取操作,截成byte型別的了。 10000010 這個結果是補碼。 注意:電腦顯示螢幕顯示的是原碼,且為十進位制。 c:即已知補碼求原碼。 符號位 數值位 補碼: 1 0000010 反碼: 1 0000001 原碼: 1 1111110 即得到輸出是-126 D:字元參與運算 是查詢ASCII裡面的值 'a' --> 97 'A' --> 65 '0' --> 48 System.out.println('a'); //97 System.out.println('a' + 1); //98 E:字串參與運算 首先運算是從左到右的。 字串資料+其他資料做,結果是字串型別。因為這裡的+不是加法運算,而是是字串的連線符(拼接符)。 其他資料+其他資料+字串資料,先計算其他的值後再與字串進行拼接。 System.out.println("hello"+'a'+1); //helloa1 System.out.println('a'+1+"hello"); //98hello System.out.println("5+5="+5+5); //5+5=55 System.out.println(5+5+"=5+5"); //10=5+5