20172328李馨雨《程序設計與數據結構》第三週學習總結
教材學習內容總結
- 1.學習使用new運算符創建對象(即實例化),瞭解null空引用。具體體悟 :類和對象的關係。
- 2.對象引用變量的聲明和初始化。用"."來引用方法,而且須要保留()。
- 3.瞭解String類的一些基本方法和標準類庫java API。
- 4.除了在java.lang中的變量無需import聲明,其餘都須要import聲明(簡化類的屢次引用)。
- 5.瞭解和使用Random類和Math類。
- 6.理解格式化輸出中NumberFormat類和DecimalFormat類和printf方法。
- 7.特殊的枚舉型數據類型,枚舉型是一種特殊的類,枚舉型變量是對象變量。(這點特殊在編譯代碼時讓我發現編譯好的class文件名中多了
$變量名
)。
教材學習中的問題和解決過程
- 問題1:什麼是空引用?
1.(〃'▽'〃)本題解答:當時的回答是「一個對象中全部的引用都丟失了」,後來發現本身混淆了別名和空引用兩個概念。
先來說我當時最迷糊的一個概念:對象變量保存的不是數值,而是地址。賦值語句其實是複製地址。這時就能夠來說講別名了。
別名:就是兩個名稱不相同的變量,其所包含引用的地址都是相同的,這是它們兩個就成了別名,當一個對象的全部引用都丟失後,就再不能爲程序所用,也就是永久丟失。
空引用:html
能夠將一個對象變量設置爲null,null是java的保留字,專門用於表示該變量不指向任何對象。java
在Java中,對象每每包含屬性、方法及一個存儲空間,若一個對象的屬性和方法是空的則可認爲這是一個空對象。一個空對象也是對象,一樣經過對象名引用方法或屬性,但和通常對象有點不一樣。(本篇博客最後有連接,比較詳細)
- 問題2:類和包究竟有什麼關係?public類具體是修飾什麼的,爲何當其存在時文件名與其所修飾的類要相同?
- 2.(〃'▽'〃)本題解答:
剛開始真的真的很不理解。去查閱了一下,得以下結果。
java包是一個相關類的集合。包至關於模塊,類至關於模塊下各個功能的實現。包(package)至關於姓名中的「姓」,類(class)至關於「名」。因此在調用某類方法 的時候,不只須要指明方法所在的「名」,即類,還要指明方法類所在的「姓」,即包。這樣編譯器才知道你調用的方法是哪個。
![](http://static.javashuo.com/static/loading.gif)
- 問題3:看到Math類方法和 java.math包,可是卻不理解爲何在例3.3時不聲明math包就直接使用。
3.(〃'▽'〃)本題解答:最後從新理解發現是:Math類其實在java.lang包中,我試了一下用import聲明的,以下圖:
![](http://static.javashuo.com/static/loading.gif)
刪掉import java.math後的;
![](http://static.javashuo.com/static/loading.gif)
git
代碼調試中的問題和解決過程
- 問題1:很容易忘記引用方法時後面加()。(忘記截圖了)
- 1.(〃'▽'〃)本題解答:不少次這樣的錯誤,須要進一步細緻理解。
- 問題2:主目錄下編寫、編譯、運行java文件。
- 2.(〃'▽'〃)本題解答:在主目錄下編寫,例:
vim src/第三週/java_homework_week3/pp3_4.java
,在主目錄下編譯並將class文件放入bin目錄。例:javac -d bin/第三週 src/第三週/java_homework_week3
,在主目錄下運行java文件。例:java src/第三週/java_homework_week3
。
![](http://static.javashuo.com/static/loading.gif)
上週考試錯題總結
- 問題1: What value will z have if we execute the following assignment statement? float z = 5 / 10; (若是咱們執行下面的賦值語句,獲得的z將會是什麼值?)
A . z will equal 0.0 (z將等於0.0)
B . z will equal 0.5 (z將等於0.5)
C . z will equal 5.0 (z將等於5.0)
D . z will equal 0.05 (z將等於0.05)
E . none of the above, a run-time error arises because z is a float and 5 / 10 is an int (以上都不對,由於z是float類型,5 / 10是int類型,因此會發生運行時錯誤)
- 問題1分析和領悟:這道題沒有認真分析,其實很簡單。由於5和10是整型變量,因此進行除法運算時就會按照整形變量即int型變量進行計算,而後再進行賦值型提高轉換,變成0.0.故選擇B.
- 問題2:A cast is required in which of the following situations? (下列哪一種狀況須要強制轉換?)
A . using charAt to take an element of a String and store it in a char (使用charAt來獲取字符串元素並將其存儲爲char類型)
B . storing an int in a float (將一個int類型的數存儲爲float類型)
C . storing a float in a double (將一個float類型的數存儲爲double類型)
D . storing a float in an int (將一個float類型的數存儲爲int類型)
E . all of the above require casts (以上全部狀況都須要強制轉換)
- 問題2分析和領悟:A答案中charAt執行後其字符就是一個,所以儲存爲char類型沒問題。而B與C答案中都是增大了儲存容量,所以也沒問題。只有D答案中是由float變爲int即大變小,所以須要強制轉換。故選擇D。
- 問題3:If x is an int and y is a float, all of the following are legal except which assignment statement? (若是x是一個int類型的數,y是一個float類型的數,下面全部賦值語句中哪一個不合法?)
A . y = x;
B . x = y;
C . y = (float) x;
D . x = (int) y;
E . all of the above are legal (以上所有合法)
- 問題3分析和領悟: 和第二個錯誤問題一個緣由,歸根結底仍是本身理解的不夠透徹。如今選擇很明顯,A爲提高型轉換,C和D爲強制型轉換。
- 問題4: What is output with the statement System.out.println(""+x+y); if x and y are int values where x=10 and y=5? (若是x和y是int類型的數值,x=10,y=5,那麼語句System.out.println(""+x+y);的輸出是什麼?)
A . 15
B . 105
C . 10 5
D . x+y
E . An error since neither x nor y is a String (因x和y都不是字符串而引發的一個錯誤)
- 問題4分析和領悟: 這個題純屬平時不注意而犯的錯。徹底懂得兩個數字不會相加。「+」起到的是鏈接符的做用。可是選擇了C答案!錯誤就是在+x+y之間是沒有空白符的,也就是說輸出後兩個數值之間沒有空格,以前在練習書本上的示例和做業時,一直使用+ x + y;這樣出來的兩個數字是有空格的。
- 問題5: If you want to store into the String name the value "George Bush", you would do which statement? (若是你想把"George Bush"這個值存儲爲字符串類型的名字,你會執行那條語句?)
A . String name = "George Bush";
B . String name = new String("George Bush");
C . String name = "George" + " " + "Bush";
D . String name = new String("George" + " " + "Bush");
E . Any of the above would work (上述均可以完成)
- 問題5分析和領悟: 這個錯誤後來在第三章進行了瞭解,上述幾條其實均可以達到。
- 問題6: Java is a strongly typed language. What is meant by "strongly typed"? (Java是一種強類型語言。「強類型」指的是什麼?)
A . Every variable must have an associated type before you can use it (在使用變量以前,每一個變量必定都有一個與之關聯的類型)
B . Variables can be used without declaring their type (變量能夠在不聲明其類型的狀況下使用)
C . Every variable has a single type associated with it throughout its existence in the program, and the variable can only store values of that type (在程序中,每一個變量都有一個與之關聯的類型,而變量只能存儲該類型的值)
D . Variables are allowed to change type during their existence in the program as long as the value it currently stores is of the type it is currently declared to be (變量存在於程序中時容許改變類型,只要它當前存儲的值是當前聲明的類型)
E . Variables are allowed to change types during their existence in the program but only if the change is to a narrower type (變量存在於程序中時容許改變類型,但只能縮窄轉換)
- 問題6分析和領悟:其實錯了這道題後我仍是沒有理解,看到解析。 The reason that strong typing is important is it guarantees that a program that was successfully compiled will not have run-time errors associated with the misuse of types for the variables declared.我姑且翻譯一下:強類型很重要的緣由是它不會誤用已經聲明瞭的類型的變量,保證了程序正常編譯而不會運行出錯。(在程序中,每一個變量都有一個與之關聯的類型,而變量只能存儲該類型的值),B答案比較合理。
- 問題7:In Java, 'a' and 'A' are considered to be different values. (在Java中,'a'和'A'被當成不一樣的數值)
A . true
B . false
- 問題7分析和領悟: 當時選錯是由於認爲a和A都是變量的話能夠進行賦值,當我賦予相同的數值以後,就是相同的。後來通過仔細查看,原來題目中'a'和'A'表示的是字符,當其輸出時, 'a' and 'A' 有不一樣的ASCII 碼值 和 不一樣的 Unicode編號。
本週想說(感悟、思考等,可選)
這周學習效率不好勁,甚至能夠說基本沒有很大的進步,多是狀態不太好。這周的學習內容更加具體豐富,類、對象、包、方法統統上場,剛開始閱讀教材時總有一種看完合上書什麼都不知道的感受,這種感受讓人很難受。還有就是要造成一個具體的知識構架很不容易,經常在小知識點上卡殼,每每讓我懷疑本身的理解力。還有最深入的一個道理,不要拉下太多,任務量永遠是越攢越多,堆到後面會特別辛苦的趕。從這周開始。java語言的學習已經很明顯的深刻和具體了,可能須要更多的投入和堅持。好的,說完了,繼續加油!
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
100/100 |
1/1 |
15/15 |
|
第二週 |
377/477 |
1/2 |
20/35 |
|
第三週 |
280/757 |
1/3 |
22/57 |
心有點累,不太好學 |
參考資料
1.Java中空對象(null)引用方法及屬性簡單分析!
2.Java開發環境的熟悉
3.java程序設計教程(第八版)vim