課上及課後的問題
//20163677 多文佳
一.在程序中寫太多的註釋,會使程序變大,運行變慢?
不會。Java編譯器在將.java文件編譯成.class文件時,會刪除所有的註釋,因此,可以放心大膽地在代碼中添加註釋,它不會使程序變大!
這種直覺實際上是有問題的。 軟件程序的尺寸與其運行速度之間確實有比較大的相關性,但這並非“因果關系”,軟件運行速度與軟件本身的設計、所用的具體技術和運行平臺等密切相關,受很多種因素的影響
二.(1)一個Java類文件中真的只能有一個公有類嗎? (2)請使用Eclipse或javac檢測一下以下代碼,有錯嗎?
public class Test {
public static void main(String[] args){
}
public class Inner{
}
}
回答:(1)一個java類中不僅僅只能有一個公有類,可以同時存在許多公有類。
(2)這樣寫沒錯,在主函數中定義類是被允許的。
三.把main()方法的返回值由 void 改為 int ,程序能編譯通過嗎?能運行嗎?
不能通過編譯,不能運行。
但是如果在函數中加入return語句可以通過編譯,但不能運行。
四.為什麽java規定作為程序入口點的main() 方法靜態的?
當我們執行一個java程序的時候,因為java都是以類作為程序的組織單元,當我們要執行的時候,我們並不知道這個main方法會放到哪個類當中,也不知道是否是要產生類的一個對象,為了解決程序的運行問題,我們將這個main方法定義為static,這樣的話,當我們在執行一個java代碼的時候,我們在命令提示符中寫:java First(First為一個類),解釋器就會在First這個類當中,去調用這個靜態的main方法,而不需要產生First這個類的對象,當我們加載First這個類的時候,那麽main方法也被加載了,作為我們java程序的一個入口。
五.Java變量遵循“同名變量的屏蔽原則”,請課後閱讀相關資料弄清楚相關知識,然後自己編寫一些測試代碼,就象本示例一樣,有意識地在不同地方定義一些同名變量,看看輸出的到底是哪個值。
例子public class Test{
private static int value=1;
public static void main(String[] args) {
int value=2;
System.out.println(value);
}
}
例子的運行結果為2。原因是第一個私有變量value作用於整個類,而在主函數中value改變了,第二個value只作用於主函數,所以應該輸出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次方)。
舉個例子來說,比如要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進制數11.01(對應十進制的3.25)和11.10(對應十進制的3.5)之間選擇。
簡單來說就是我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。
七.以下代碼的輸出結果是什麽?
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="在前時,默認的把int型X,Y轉化為String型,System.out.println()本身的參數默認為String型,遇到這種情況默認了轉化,所以輸出了100200,而第二個就是簡單的輸出。
課上及課後的問題