1. 程式人生 > >JAVA第一章整理實驗

JAVA第一章整理實驗

麻煩 main 3.4 編譯 老師 mage 程序 double family

1 JAVA中是否可以存在多個公有類

答案是可以,就是在公有類中在套用一個公有類,在Eclipse上輸入老師給的那個例子,能夠成功運行,說明就是可以的。

2 把main()方法的返回值void改為int,編譯通不過,運行不了。

技術分享

技術分享

技術分享

3 為什麽java規定作為程序入口點的main() 方法靜態的?

靜態比較方便,不用去構造實例化,非靜態的main,需要對類進行實例化,再調用main,實例化代碼可能還需要實例化,比較麻煩。

4技術分享

技術分享

4 為什麽使用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次方)。簡單來說就是我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。

5 在構建BigDecimal對象時應使用字符串而不是double數值,否則,仍有可能引發精度問題。(為什麽會這樣呢?)
參數類型為double的構造方法的結果有一定的不可預知性。有人可能認為在Java中寫入newBigDecimal(0.1)所創建的BigDecimal正好等於 0.1(非標度值 1,其標度為 1),但是它實際上等於0.1000000000000000055511151231257827021181583404541015625。這是因為0.1無法準確地表示為 double(或者說對於該情況,不能表示為任何有限長度的二進制小數)。這樣,傳入到構造方法的值不會正好等於 0.1(雖然表面上等於該值)。

6

5技術分享

技術分享

第一個輸出結果中,””中本身就是一個字符串,後面的加號默認為數據的鏈接,輸出結果認為一個字符串;第二個輸出中,加號首先進行的是加法運算,然後第二個加號才起到鏈接字符串的作用。

JAVA第一章整理實驗