201521123002 《Java程序設計》第3周學習總結


1. 本周學習總結

初學面向對象,會學習到很多碎片化的概念與知識。嘗試學會使用思維導圖將這些碎片化的概念、知識組織起來。請使用紙筆或者下面的工具畫出本周學習到的知識點。截圖或者拍照上傳。

2. 書面作業

  1. 代碼閱讀
public class Test1 {
        private int i = 1;//這行不能修改
        private static int j = 2;
        public static void main(String[] args) {
                geti();
                Test1.getj();//是漏了點號嗎?
        }
        public static void geti() {
                System.out.println(i);
        }
        public static void getj() {
                System.out.println(j);
        }
}

以上代碼可否編譯通過?哪里會出錯?為什么?嘗試改正?
如果創建3個Test1對象,有內存中有幾個i,幾個j?請分析原因?

答:不能通過,放入eclipse中馬上報錯顯示

原來是因為靜態方法中不能調用非靜態成員。
如果要修改的話按照提示可以馬上修改好,但是因為限制了不能修改第一行,所以好像就沒有那么容易了,但是當我們了解了為什么靜態方法不能調用非靜態成員的原因后調用靜態方法或屬性可以不用new對象,但是非靜態方法或屬性需要new對象才能使用,如果非靜態變量已經創建了對象那么靜態方法就能調用所以可以這樣

public static void geti(){
        System.out.println((new Test1().i);
}

如果創建3個Test1對象,有內存中有3i,1j.
因為非靜態變量成員屬於每一個對象,而靜態成員屬於類。

  1. 構造函數有什么用?其編寫格式是什么?如果一個類不寫構造函數,它有構造函數嗎?如果一個類中只有帶參的構造函數,它有沒有不帶參數的默認構造函數?

答:構造函數

  • 作用:對類進行初始化
  • 編輯格式:構造函數的名稱和類名相同/無返回類型/可以帶參或者不帶參。
    舉個例子
public class Test{
        public Test(){
	        System.out.println("Test is initializing!");
        }
        public static void main(String args[]){
	        Test test = new Test();
        }
}
  • 有構造函數,系統會默認一個無參構造方法
  • 如果自己編寫了帶參的構造函數,系統就不會提供不帶參的構造函數了,需要自己編寫。不信可以用eclipse驗證一下。
  1. 使用java.lang.Math類的函數時,為什么不需要new?如果new Math()會產生什么錯誤?分析原因?

答:查看源代碼


我們發現java.lang.Math函數是用靜態定義的,而使用靜態的方法可以不用new一個對象。
如果new Math(),我們看到上面的圖片已經顯示了---由於構造函數被聲明為私有的,就是說明不能被外部調用,所以不能調用new Math(),並且Don't let anyone instantiate this class也說明不會產生Math對象。

  1. 什么是重載?什么是構造函數重載?在java.lang.Math類中舉出1個函數重載的例子?怎么才能區分兩個重載函數?

答:
重載就是方法重名參數不同,
理解了重載,構造函數的重載理解起來也容易多了,用相同的類名不同的參數來初始化一個類。
同樣可以查看源代碼找例子,但是因為代碼比較多容易看亂我們需要更簡潔的界面這是就可以用老師之前給我們的
來找例子
很快我們就找到了

我們要善用這個文件啊。
區分兩個重載函數可以通過看他們的參數來區別

  1. final修飾的變量不能改變,為什么如下代碼可以正常運行?
final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;

答:
回答這題還是比較困惑的,但是只要我們搞清楚什么是對象和對象的變量就還是能理出思路的,如果上課認真聽的話我們就會發現這么一句話-----final修飾引用類型變量,變量的值(引用)不能修改,但是變量指向的對象的值可以修改。所以這段代碼是可以運行的。

  1. 閱讀代碼EmployeeTest.java,回答:
    1.為什么其屬性均為private?這樣設計有什么好處?

答: 因為這樣才能保證類的封裝性,只允許在類的內部訪問不能再外部訪問,保證了安全性私密性等,如果要訪問就要用setter/getter。

    2.為Employee類增加一個無參構造函數,調用其有參構造函數,設置name為雇員1, salary為3000, hireDay的年月日為2017年3月5日。(粘貼代碼)

答: 我們發現在一個構造函數中調用另一個構造函數用this最方便了

public Employee(){
        this("雇佣1",3000,2017,3,5);
}
    3.為Employee類再增加一個有參構造函數,參數只有name與salary,hideDay為當前日期。(粘貼代碼)

答:同樣的用this,

public Employee(String n, double s){
        this(n,s,Calendar.getInstance().get(Calendar.YEAR),Calendar.getInstance().get(Calendar.MONTH)+1,
              Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
}
  1. 編寫函數public static boolean isMondayToFriday()

    功能:判斷今天如果是周一到周五,直接輸出如“上班時間”並返回true,否則輸出“休息時間”。

    提示:使用LocalDateTime, DayOfWeek

    參考資料:

    JAVA 8:健壯、易用的時間-日期API - ImportNew.pdf

    Java8DateTimeTest.java

public static boolean isMondayToFriday(){
        LocalDateTime now = LocalDateTime.now();
        DayOfWeek dayOfWeek = now.getDayOfWeek();
        if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY){
	        System.out.println("上班時間");
	        return true;
        }
        else{
	        System.out.println("休息時間");
                return false;
        }
}
  1. Runnable Jar(可選)
    我們以前編寫的程序,必須打開Eclipse或者將相應的.class文件拷貝出來在命令行下執行相應命令才能運行,如果.class文件較多且類文件中有包名,需要將完整的目錄結構及文件拷貝出來,才能運行。現在希望將Eclipse項目中的Java文件打打成一個可運行的jar包,在命令行直接運行。改造題目7,使其從命令行接收參數,參數為年-月-日,將項目打成jar包,然后在命令行通過java -jar運行,並截圖。參考文件如下:

Eclipse生成Runnable jar

3. 使用碼雲管理Java代碼

  • 在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”,然后搜索並截圖
  • ![](http://images2015.cnblogs.com/blog/1100960/201703/1100960-20170311180454592-267070906.png) 不知道為什么又提交的兩個顯示不出來。果然和git過不下去了總是出現問題。 ##**4. 實驗總結** ``` *第一題 還是比較簡單的,就是自己編的時候getter開頭return this.***其實不用加this就可以了,類的屬性用private進行封裝。 主要還是又發現了eclipse的好用之處點source就可以幫我們完成很多重復的內容提高了代碼的效率。 *第二題 需要對不同雇佣有不同的id這時候我們就會發現static的用處了,我們在類中定義一個靜態的id可以為我們保持上一個雇 佣的id當下一個雇佣進來時就可以用static id 自增的方式賦值給id這樣就會有不同的id出現這樣比較方便。 *第三題 做完前兩題就差不多比較熟練了,但是在一些細節的地方比方計算面積的時候沒有弄好優先順序,要加括號的地方沒有加。 還有可以使用Arrays.deepToString分別輸出上面建立的Rectangle數組與Circle數組。 ```


    免責聲明!

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



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