黑馬程式設計師

2022-09-23 13:30:11 字數 3126 閱讀 3652

黑馬程式設計師--j**a基礎學習筆記2 一、筆記內容概述: 關鍵字、識別符號、注釋、注釋的應用、常量、進製的由來、進製轉換、負數的進製、變數的介紹、變數的基本演示、型別提公升&強制轉換、字元型別運算過程、型別運算細節、算術運算子、賦值運算子。 二、常用內容介紹: 1.注釋內容不占用記憶體,即使新增再多的注釋,編譯後生成的class檔案占用硬碟的位元組多少不變。 2.慎用強制轉換,容易丟失精度,並且編譯時也會報錯,注意只要涉及到精度丟失時,編譯器都不能 通過。 3.j**a內建的碼表是unicode碼表,可以識別中文和英文。 三、經典示例及講解: 1.分析下面**強制轉換後,輸出結果的原因:package com.demo;

/** *分析下面強制轉換後,輸出結果的原因

*/public class demo1

}/**

*現象:為什麼int型的203強制轉換成byte型時,輸出:-53

* 為什麼int型的-130強制轉換成byte型時,輸出:126

*

*原理:當int型轉換成byte型資料時,系統將會擷取int數值的後8位(最右邊8位),

* 同時以補碼形式儲存下來,並且最高位為符號位,根據符號位不同進行不同運算,因為正數補碼就是其本身。

* 如果補碼最高位是以0開頭,說明擷取下的是正數的byte型數值,直接按照二進位制正常計算byte值;

* 如果補碼最高位是以1開頭,說明擷取下的是負數的byte型數值。

* 除符號位外,其餘部分先取反再加1,然後算出二進位製所對應的byte數值,最後將負號加上。

*

*一、為什麼int型的203強制轉換成byte型時,輸出:-53

* 因為:int型203對應的二進位制為(省略了高位的無效0) 11001011,剛好8位。

* 強制轉換時,系統自動擷取最後8位,即11001011,因為最高位為1,所以按照最高位為1的方式進行計算。

* 符號位為:-

* 數值為:

* 1001011取反:0110100

* 0110100加1:0110101 -----對應數值為53,再加上符號位即,結果為-53。

*

*二、為什麼int型的-130強制轉換成byte型時,輸出126

* 因為:int型-130對應的二進位制為11111111 11111111 11111111 01111110

* 強制轉換時,系統自動擷取最後8位,即01111110,因為最高位為0,所以按照最高位為0的方式進行計算。

* 符號位:+(可以省略不寫)

* 數值為:1111110 轉換成十進位制對應的數值為126。

*/2.分析下面**報錯和不報錯的原因:

package com.demo;

public class demo2

}/**

*現象:為什麼 byte b = 3+7;不報錯?

* 為什麼b = b1 + b2;時編譯不能通過?

*錯誤原因:

* 涉及到編譯器編譯程式時候的細節,之所以byte b 3 +7;沒有報錯,是因為

* 3和7都是常量,編譯器知道結果是10,並且在byte範圍之內,因此就自動進行

* 了強轉,所以不會報錯。

* 而b = b1 + b2;中b1和b2都是變數,編譯器編譯程式

* 是一行一行編譯的,它根本不知道b1和b2到底是多少,兩個byte型別的資料相加

* 時,首先都會被提公升為int型別,他們的和也是int型別,其值可能會超過byte的範圍

* ,因為就會報錯。

*/3.分析下面輸出結果:package com.demo;

public class demo3

}/**

*現象:為什麼輸出結果為:-2147483647,明顯溢位了,編譯器也不報錯。

*說明:因為int型別的兩個變數相加,最後還是int型別,雖然結果溢位,但是不會報錯。

* j**a對於int型(其它型別也是一樣的)資料溢位,並沒有做編譯時和執行時報錯處理。

* 所以當資料溢位時,它自動擷取二進位制結果的最後32位,並留下來作為有效資料。

*/4.思考下面的輸出結果:package com.demo;

public class demo4

}/**

*輸出結果為:

* 0-11

說明:負數對正數取模結果為負數。

正數對負數取模結果為正數。

*/5.分析下面兩種方式的不同:package com.demo;

public class demo5

}/**

*為什麼第一種方式不報錯,而第二種方式報錯?

*比較s += 4;和s = s +4;的不同。

* *方式一:

* 在執行s += 4;語句時,編譯器在編譯的時候,預設進行了強制型別轉換,也就是將

* int型別的數值自動轉換成了short型別的資料。

*

*方式二:

* 說明執行s = s + 4;語句時,編譯器在編譯的時候,預設並沒有強制轉換。所以,s是short

* 型別,4是int型別,執行s + 4加操作時,首先s會自動轉型為int型別,然後再執行加操作,最後的

* 結果也是int型別,賦值給short型別的s變數,肯定會損失精度,這時候就需要進行強制型別轉換,

* s = (short)(s+4);

*/6.思考下面運算的特點package com.demo;

public class demo6

}/**

*錯誤原因:

* 由於小數預設是double(8位)型別,賦值給float(4位)型別的變數,當然可能會

* 損失精度,必然通不過編譯器的審核。

*解決方法:在數值的後面加上乙個f,讓編譯器知道後面的常量是float型別的。

*

*現象:y = y+ 10;為什麼編譯和執行時都不報錯?

* int型別和float型別的數值進行相加時,int型別先會轉換成float型別然後執行加操作,

* 最終結果還是float型別,所以不報錯。

*/

黑馬程式設計師

asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...

黑馬程式設計師

1.了解反射 反射 就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。person p new person p.使用 要想這樣使用,首先你必須得到class檔案物件,其實也就是得到class類的物件。2.反射中的類 class類 成員變數 field類 構造方法 const...

黑馬程式設計師

1 變數型別 int double string char bool decimal 變數的使用規則 先宣告再賦值最後使用 int number number 10 number 20 console.writeline number 2 camel pascal 3 運算子 賦值運算子 復合賦值運...