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目標參考連結