1. 程式人生 > >java 動手動腦解決問題

java 動手動腦解決問題

連接 數值 計算 結合 數據 ima 而不是 轉換問題 如果

1.Java的基本運行單位是類還是方法?是類,因為沒有方法可以獨立存在,方法在邏輯上屬於類或屬於對象。

2.類的組成成員?成員變量,成員方法。

3.成員變量的種類? byte short int long float double char boolean。

4.String是一個基本數據類型嗎?java 中String 是個對象,是引用類型 ,基礎類型與引用類型的區別是,基礎類型只表示簡單的字符或數字,引用類型可以是任何復雜的數據結構 ,基本類型僅表示簡單的數據類型,引用類型可以表示復雜的數據類型,還可以操作這種數據類型的行為 。java虛擬機處理基礎類型與引用類型的方式是不一樣的,對於基本類型,java虛擬機會為其分配數據類型實際占用的內存空間,而對於引用類型變量,他僅僅是一個指向堆區中某個實例的指針。

5.static代表的含義?static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。

6.仔細閱讀示例EnumTest.java,運行它,分析運行結果?對象s,t,u分別引用了枚舉中的SMALL,LARGE,SMALL,第一次比較的是字符串類型,第二次將字符串轉化為字節,第三次比較字節,第四次通過值引用對象輸出全部內容。

7.你能得到什麽結論?你掌握了枚舉類型的基本使用方法了嗎?枚舉的本質是類,在沒有枚舉之前,仍然可以按照java最基本的編程手段來解決需要用到枚舉的地方。枚舉屏蔽了枚舉值的類型信息,不像在用public static final定義變量必須指定類型。枚舉是用來構建常量數據結構的模板,這個模板可擴展。枚舉的使用增強了程序的健壯性,比如在引用一個不存在的枚舉值的時候,編譯器會報錯。

8.運行以下代碼,TestDouble.java,你看到了什麽樣的輸出,意外嗎?意外,非常意外,精度出現了很大偏差。

9.為什麽double類型的數值進行運算得不到數學上精確的結果?這個涉及到二進制與十進制的轉換問題。N進制可以理解為:數值×基數的冪,例如我們熟悉的十進制數123.4=1×102+2×10+3×(10的0次冪)+4×(10的-1次冪);其它進制的也是同理,例如二進制數11.01=1×2+1×(2的0次冪)+0+1×(2的-2次冪)=十進制的3.25。double類型的數值占用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上一定會與實際數據存在誤差(除非實際數據恰好是2的n次方)。舉個例子來說,比如要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進制數11.01(對應十進制的3.25)和11.10(對應十進制的3.5)之間選擇。簡單來說就是我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。

10.在構造BigDecimal對象時應使用字符串而不是double數值,否則,仍有可能引發計算精度問題?對於double型,小數點後面是0的話,精度就是0;小數點後面不是0,則取決於整數位的位數,整數位越多,精度越小;當整數位接近15位時,精度就趨於0,再多1位數據可能開始溢出(具體情況取決於double類型的數值表示)。對於字符串類型的構造函數,小數點後面有幾位,精度就是幾位,而且幾乎沒有位數限制(試了40位都沒有問題)。

11.以下代碼的輸出結果是什麽?為什麽會有這樣的輸出結果?

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

在System.out.println()中,如果在string字符串後面是+和變量,會把變量轉換成string類型,加號起連接作用,然後把兩個字符串連接成一個新的字符串輸出;

如果先有變量的加減運算再有字符串,那麽會從左到右先計算變量的加減,然後再與後面的string結合成一個新的字符串。也就是說加號只有在兩個string類型或者其中一個是string類型的時候才起到連接作用,否則仍然是運算符。

12.弄清楚反碼,補碼和原碼的概念,然後編寫示例程序,對正數,負數進行各種位操作,與手工計算結果對比,看java中的數用哪種碼表示?

原碼:就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。

反碼:反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

補碼:補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

Java中的數使用原碼表示。

java 動手動腦解決問題