1. 程式人生 > >動手動腦

動手動腦

成員 image lin java span bit data- 原則 小寫

1.置疑

一個Java類文件中真的只能有一個公有類嗎?

在Java語言基礎的ppt的例子中(如圖)是允許的,編譯沒有錯誤,是因為InnerClass類是Test類的內部類。

技術分享

如果一個類被聲明為Public,則他本身所在的源文件名也必須與類名相同,連大小寫都不能錯!但是並不是說一個Java源文件中只能寫一個類,完全可以寫多個類,但其中只能有一個類是公有的(“public”)的,後邊的公有類需要嵌套在前面的公有類中,也就一個可以局部使用的公有類。

2.

為什麽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,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。

3.

以下代碼的輸出結果是什麽?

int X=100;

int Y=200;

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

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

為什麽會有這樣的輸出結果?

運行結果:

X+Y=100200
300=X+Y

語句一的+是連接符,用來連接X Y 兩個變量,所以輸出的時候是100與200的值

語句二的+是加法運算符,用來做X+Y運算,輸出的是100+200之後的值

4.

Java變量遵循“同名變量的屏蔽原則”,在實例中輸出的是2,第一個value是全局變量,第二個value是局部變量,在具體的使用中,遵循就近原則, 首先在局部範圍找,有就使用;接著在成員位置找。

例如:

技術分享

輸出結果就是下圖

技術分享

setAge()函數中有局部變量,輸出的age值是局部變量的值,而Age()函數沒有局部變量,age的值便是全局變量的值;

5.

把main()方法的返回值由 void 改為 int ,程序能編譯通過嗎?能運行嗎?

Java規定main方法必須嚴格按如下形式進行聲明:public static void main( String args[] )

void表明其不返回任何結果。

當改為int並添加返回值0時,運行結果顯示錯誤,不能運行。

技術分享

動手動腦