1. 程式人生 > >課程作業02-2

課程作業02-2

unicode 什麽 對象 ima 作業02 通過 1.8 public 實現

1、一個Java類文件中真的只能有一個公有類嗎
public class text {
public static void main(String[] args)
{
System.out.println(".01");
}
public class InnerClass{

}
}
一個Java源文件中最多只能有一個public類,當有一個public類時,源文件名必須與之一致,否則無法編譯,如果源文件中沒有一個public類,則文件名與類中沒有一致性要求。

至於main()不是必須要放在public類中才能運行程序。

2、把main()方法的返回值由 void 改為 int ,程序能編譯通過嗎?能運行嗎?
不能 必須返回int類型的結果

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

非靜態成員函數在執行前必須先構造並實例化該函數所在的類。如果允許非靜態的main,那麽main函數所在的類必須先進行實例化,

那麽就需要再寫個函數去實例化main所在的類,再調用main,這個實例化代碼需要去再實現。如果它也是非靜態的,有需要寫一個實例化,一直重復不能實現。
因此,JAVA語言就規定了main必須是靜態的。

4、請看左邊的示例代碼,輸出結果是什麽?
public class text {
private static int value=1;
public static void main(String[] args)
{
int value=2;
System.out.println(value);
}
}
結果為2

public class text {
private static int value=1;
private String a="a";
public static void main(String[] args)
{
int value=2;
String a="b";
System.out.println(value);
System.out.println(a);
}
}
結果為 2 b
在代碼中,第一個value是成員變量,也是全局變量,第二個value是局部變量,
局部變量可以覆蓋全局變量,在局部使用某個變量的時候JVM會優先找和當前使用位置近的變量定義.

5、看著這個圖,再查查Java中每個數據類型所占的位數,和表示數值的範圍,你能得出什麽結論?

byte:8位,最大存儲數據量是255,存放的數據範圍是-128~127之間。

short:16位,最大數據存儲量是65536,數據範圍是-32768~32767之間。

int:32位,最大數據存儲容量是2的32次方減1,數據範圍是負的2的31次方到正的2的31次方減1。

long:64位,最大數據存儲容量是2的64次方減1,數據範圍為負的2的63次方到正的2的63次方減1。

float:32位,數據範圍在3.4e-45~1.4e38,直接賦值時必須在數字後加上f或F。

double:64位,數據範圍在4.9e-324~1.8e308,賦值時可以加d或D也可以不加。

boolean:只有true和false兩個取值。

char:16位,存儲Unicode碼,用單引號賦值。
int類型轉化為float double 由精度損失 long轉化為double時有精度損失

6、為什麽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更多的位數才能準確表示出來(甚至是需要無窮多位),而dou
ble類型的數值只有64bit,後面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。float 和double類型主要是為科學計算和工程計算而設計的,他們執行二進制浮點運算,這兩種類型在計算機中的儲存分為三部分:符號位、指數為、尾數部分。數據以二進制存儲在計算機時,會出現無線循環系列,在數據轉化中會出現錯誤。十進制不能準確的表示1/3,同樣二進制不能精確的表示1/10。

7、在構建BigDecimal對象時應使用字符串而不是double數值,否則,仍有可能引發計算精度問題。(為什麽會這樣呢?)

double+、-不能準確的代表BigDecimal(String) 16位有效數以上的數字在使用BigDecimal時,用*、/構造器創建
對象。BigDecimal所創建的對象不能使用傳統的等算術運算符直接對其對象進行數學運算,必須調用相對應的方法。
方法中的參數必須是BigDecimal的對象。


8、以下代碼輸出什麽?

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

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

為什麽會有這樣的輸出?

在語句一中,“+”是連接量,直接連接兩個字符;
在語句二中,“+”是運算符,進行數值類型的求和運算。

課程作業02-2