201521123084 《Java程序設計》第2周學習總結


第2周作業-Java基本語法與類庫


1. 本周學習總結

  • 1.學會使用碼雲管理代碼;

  • 2.學會使用Eclipse關聯jdk源代碼,並查看對象的源代碼;

  • 3.學會String類和StringBuilder類的一些用法,以及二者區別和優缺點;

  • 4.學會Array類與ArrayList類的一些用法;

  • 5.學會在Main類里調用函數;

  • 6.學會如何用字符串池去解釋字符串相等的問題;

2. 書面作業

1.使用Eclipse關聯jdk源代碼(截圖),並查看String對象的源代碼?簡單分析String對象的設計思路。

answer:



   之前一直沒有查看成功,顯示class not found,原因是之前在rt.jar和resources.jar兩個包選擇錯誤,經過排查,解決了這個問題。

2.為什么要盡量頻繁的對字符串的修改操作應該是用StringBuilder而不是String?

answer:

  • String類每次修改字符串都需要新建一個字符串,再對舊字符串進行刪除,很影響效率;
  • StringBuilder是在進行字符串的末尾進行操作; 因此在小數據量時候二者沒有太大的影響,但是在大數據量的時候,后者會比前者快很多。

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

answer:

因為“==”只能比較兩個變量的值,在比較字符串的時候使用“==”,實際上是在比較兩個字符串是否引用同一個地址,如果兩個字符串是同一對象的話,則可以用“==”。否則,只能使用別的方法,如下圖:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true,因為s1和s2是同一個字符串常量abc的引用,是同一個對象地址,所以相同
 
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);  // false,因為s1和s2是兩個不同的對象,雖然字符串值都是abc,但是用==比較不相同。

解決辦法:

使用equals();

4.嘗試使用字符串池的概念解釋如下程序段輸出結果,並回答這段代碼創建了幾個字符串對象:

String str1 =“hi”, str2=“hi”;
String str3 = new String(str1)
System.out.println(str1==str2);

answer:

輸出結果為true。(正如上題所言)

  • 當遇到String str1 =“hi”;這樣的語句時,Java會先在字符串池中尋找是否已經存在"hi"這個字符串,如果沒有,則建立字符串"hi"對象,然后變量str1指向這個地址;
  • 然后遇到語句String str2 = "hi",這時字符串池中已經有 "hi"了,所以直接讓變量str2也指向這個地址,省去了重新分配的麻煩。
  • 而String str3 = new String(str1)則不會去訪問字符串池,而是先為變量 str3 開辟空間,然后將值寫入空間。
  • 因此,這段代碼共創建了兩個字符串對象。

5.Integer i = 100;//100是基本類型,i是引用類型,為什么可以將100賦值給i

answer:

這個叫做對象的自動封箱與拆箱,實際調用	Integer i=new Integer(100);在調用的時候會自動拆箱,拆箱之后就自動轉換成了簡單數據類型,數值一樣。

6.嘗試分析下面代碼輸出結果

Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false

answer:

  • true,JVM會自動維護八種基本類型的常量池,int常量池中初始化-128~127的范圍,所以當為Integer i1=12=127時,在自動裝箱過程中是取自常量池中的數值,所以返回true。
  • false,當Integer i=128時,128不在常量池范圍內,所以在自動裝箱過程中需new 128,所以此時i1與i2地址不一樣,所以返回false。

7.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 嘗試用命令行進行編譯並運行,截圖

answer:


編寫Main.java,調用com.ibm.StringUtil的foo1方法並運行,結果如圖。

7.2 將生成的StringUtil.class放到d盤的lib目錄下,將Main.class在d:\test目錄下,嘗試命令行下運行,截圖。

answer:

將StringUtil.class放到d盤的lib\com\ibm目錄,Main.class在d:\test\edu\jmu目錄下,執行發生錯誤。

7.3 Eclipse中源代碼放在哪個目錄、class文件放在哪個目錄。在Eclipse項目中按一下ctrl+f11就可以直接運行Main,嘗試分析背后實現的原理。

answer:

源代碼應當放在src目錄,class放在bin目錄。

8.自己在這門課的目標與計划

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

answer:

- c語言和c++,基礎不是很扎實,由於大一有課設,大二鄭老師比較嚴,所以幾千行的代碼應該是有的。

- java,剛入門,現在所寫的代碼也只有PTA上實驗1的代碼和實驗2的部分代碼

8.2一周准備花多少時間在這門課上?一周准備寫多少行代碼?采用怎樣的學習方式?遇到困難打算怎樣解決?

answer:

- 學習的時間幾乎百分之八十都放在了java上每周差不多10~16個小時左右;

- 一周的目標就是完成所有老師布置的書面作業和PTA上的所與編程題;

- 查資料,聽課,編程,百度等等……

- 問李嘉廉

8.3關於這門課的smart目標參考鏈接

answer:

能熟練掌握java並完成一個項目。

9.選做:公交卡里應該還有多少錢?請分析原因

GIT


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM