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


1、本周學習總結

  • 學習了string類的一些用法,Java編寫大致與c相同,但是要注意Java是面向對象的語言。例如兩個字符串“==”比較,Java與c可能會有不同結果。
  • 學習了import的用法,不用麻煩輸入完全限定類名。
  • 學習了java中數組的用法。

2、問答題

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

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

答:因為String會頻繁的產生新對象,即使只對字符串進行一點點修改也會產生新對象,浪費內存空間,降低效率。
而StringBuider可以直接在字符串上進行操作,不會產生新對象。

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

答:java中有兩種比較方法。一種是用“”,另一種是“eaquls()”。
”運用在基本數據類型的時候,通過比較它們實際的值來判定是否相同;而用於比較引用類型的時候,
則是比較兩個引用的地址是否相等,也就是是否指向同一個對象。
所以,即使當值相等的情況下,若對象不同,也會返回false。
如:
String a = new String("abc");
String b = new String("abc");
a == b 將返回false,因為兩個是不同的對象實例。

Q4.嘗試使用字符池的概念解釋如下程序段輸出結果,並回答這段代碼創建了幾個字符串對象:
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);

答:輸出結果:true
解析:str1與str2都是常量對象,所以輸出為true。但是如果與str3比較,因為str3是強制產生的新對象,結果就為false。

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

答:因為java中的jdk可以實現自動裝箱功能(即為將一個基礎數據類型傳給相應的封裝類)。i為Integer類型的引用,100為基礎數據類型。
源碼如下:
public static Integer valueOf(int i){
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else return new Integer(i); }
原理為:jdk幫你自動調用了Integer.valueOf(100)*。

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
解析:第一個值是127,在Integer.valueOf()范圍內(-128到+127),i1和i2指向同一個對象;
第二個值為128,超過Integer.valueOf()范圍,指向兩個不同的對象。

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,嘗試分析背后實現的原理。

這樣是錯的!!經過大神指導,知道錯在哪了。正確的如下圖

大致分析一下錯誤原因:因為Main.java中import了com.ibm這個包,想要執行Main.java就必須先找到包的位置。第一次出錯就是沒有告訴系統從哪里找import的這個包,它就從當前目錄(即test目錄)中尋找,自然是找不到的。所以用“-cp .”來引導系統在lib目錄(即com.ibm包所在位置)下找,方可執行成功。

答:源代碼放在src目錄,class文件放在bin目錄。

Q8.自己在這門課的目標與計划
請描述一下你的技術基礎(會什么語言,都寫了多少行代碼)
一周准備花多少時間在這門課上?一周准備寫多少行代碼?采用怎樣的學習方式?遇到困難打算怎樣解決?
關於這門課的smart目標

  • 技術基礎:基礎比較薄弱,會c/c++,代碼寫的沒有統計過;
  • 計划:一周打算每天至少抽出一兩個小時學習java,一周800行代碼。學習方式:課堂聽講,沒有聽懂的詢問他人,課后作業認真完成,輔助網上學習。
  • smart目標:
    • S:具體的。落實到每天的學習時間上吧,每天都要有新的知識融入進來。
    • M:動機。學習的動機大概是不辜負父母的期望,珍惜四年短暫的學習時光。
    • A:可實現的。這就相當於定一個小目標吧。一周七天每天至少保證一到兩小時的學習時間。
    • R: 關聯的。說實話呀,當初的大學目標真的不是像現在這樣,但是既然選擇了也只好踏實下來,一步一個腳印。終有所獲。
    • T: 能衡量進度的。這些博客作業、pta編程。

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

答:42949672.76 =(16進制的)FFFFFFFC,其實是欠0.02元。程序員處理時用了無符號整型,沒考慮到負數的情況。
閘機顯示有問題,與卡本身無關。
參考鏈接


3. 使用碼雲管理Java代碼

在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”,然后搜索並截圖


4. PTA實驗

題目集:jmu-Java-02-Java基本語法 中的判斷、選擇、編程(8道)
實驗種碰到的問題、思考、收獲與解決方案

  • pta上提交大概比較嚴謹吧,之在eclipse上結果正確的在pta上就過不了,問了大神說是可能有數據寫的過不了。后面改起來換方法比較麻煩。
  • 第二題用到了StringBuilder,用String不行,因為會產生許多新對象,然后用append在該對象上直接進行操作就好。

5. 小任務(加分)


免責聲明!

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



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