1. 本章學習總結

學習了java的知識,雖然還不是太懂,以後一定會取得進步的

2. 書面作業

Q1. 使用Eclipse關聯jdk原始碼,並檢視String物件的原始碼(截圖)?

答:

Q2. 為什麼要儘量頻繁的對字串的修改操作應該是用StringBuilder而不是String?嘗試使用字串池

答:string每次修改字串都是新建,然後刪除舊的串會很影響效率,而stringbuilder是在字串的末尾操作,和string比較快。

Q3. 比較兩個字串的值是否相等?為什麼不能用==直接進行比較?

答:==是用來比較地址的,equals可以用來比較值。

Q4. 嘗試使用字串池的概念解釋如下程式段輸出結果,並回答這段程式碼建立了幾個字串物件:

String str1 =“hi“, str2=“hi“;

String str3 = new String(str1)

System.out.println(str1==str2);

答:返回true;

以""包括的字串,只要內容相同,JVM只會建立一個String例項;並在字串池中維護,所以str1=str2;這段程式碼建立了兩個字串物件。

Q5. Integer i = 100;//100是基本型別,i是引用型別,為什麼可以將100賦值給i

答:自動裝箱、拆箱的內幕"Integer i = 100;"實際上會使用Integer.valueOf()來建立Integer例項。

Q6. 嘗試分析下面程式碼輸出結果

Integer i1 = 127;Integer i2 = 127;

i1 == i2;//true of false?

Integer i1 = 128;Integer i2 = 128;

i1 == i2;//true of false

答:輸出結果分別為true和false。int常量池(虛擬機器必須為每個被裝載的型別維護一個常量池。常量池就是該型別所用到常量的一個有序集和,包括直接常量(string,integer和floating point常量)和對其他型別,欄位和方法的符號引用。)中初始化-128~127的範圍,所以當為Integer i=127時,在自動裝箱過程中是取自常量池中的數值,而當Integer i=128時,128不在常量池範圍內,所以在自動裝箱過程中需new 128即新建一個物件,所以地址不一樣。

Q7. package與javac、 java、 -classpath、 -d

在 com.ibm包中編寫 StringUtil類,內有一方法

public static void foo1(){

System.out.println(StringUtil.class+" method:foo1");

}

在edu.jmu包中編寫Main類,其中掉了com.ibm.StringUtil的foo1方法

7.1 嘗試用命令列進行編譯並執行,截圖



7.2 將生成的StringUtil.class放到d:\lib下正確的目錄結構下,將Main.class放到d:\test下正確的目錄結構,嘗試在命令列下執行,並截圖。

7.3 Eclipse中原始碼放在哪個目錄、class檔案放在哪個目錄?在Eclipse專案中按一下Ctrl+F11就可以直接執行Main,當按下Ctrl+F11時,到底在哪個目錄下執行了什麼樣的java命令?

答:原始碼放在src目錄下,class放在bin目錄下的。通過Main找到位元組碼檔案,再將位元組碼檔案進行執行

Q8. 自己在這門課的目標與計劃

請描述一下你的技術基礎(會什麼語言,都寫了多少行程式碼)

答:都不太會

一週準備花多少時間在這門課上?一週準備寫多少行程式碼?採用怎樣的學習方式?遇到困難打算怎樣解決?

答:能寫多少是多少,遇到問題先思考再問同學

關於這門課的smart目標參考連結