初學面向對象,會學習到不少碎片化的概念與知識。嘗試學會使用思惟導圖將這些碎片化的概念、知識組織起來。請使用紙筆或者下面的工具畫出本週學習到的知識點。截圖或者拍照上傳。html
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); //1 } public static void getj() { System.out.println(j); //2 } }
分析:1處會報錯,eclipse提示將「i」改成靜態的,即在靜態的方法中不能訪問非靜態的變量,2處不會報錯,由於靜態的方法中能夠訪問靜態屬性,其餘沒有錯java
若是建立3個Test1對象,內存中有3個i,1個j,i爲實例變量屬於對象的一個屬性,建立對象的時候就有了類的屬性和方法,靜態的變量不須要建立對象就能夠訪問,爲全部的對象所共享,直接用Test1.j就能夠訪問數組
答:構造函數能夠用於對屬性的初始化
若是類名爲Person,則構造函數的格式以下,無返回值,可是能夠傳參安全
public Person(){ System.out.println("Person類執行了"); ...... }
若是一個類不寫構造函數,那麼它默認是有的,而且會執行父類的方法eclipse
public Person(String name, boolean gender, int age, int id) { super(); }
若是一個類中只有帶參的構造函數,不帶參數的默認構造函數就失效了,若是想要有不帶參數的構造函數,就須要顯示地打印出來ide
答:由於java.lang.Math類當中的方法和屬性都是靜態的,但Math類自己不是靜態的,不須要new一個對象,以下爲部分源代碼函數
public static final double E = 2.7182818284590452354; public static int abs(int a) { return (a < 0) ? -a : a; }
若是new Math(),按道理會執行無參的構造函數,可是出現提醒構造函數Math()是不可見的,打開源代碼就能夠發現,是private類型的,只容許本類訪問,因此會出錯工具
/** * Don't let anyone instantiate this class. */ private Math() {}
答:是指多個方法用同一個方法名,可是傳入的參數不一樣,例如求兩個是當中的最大值就有函數重載,能夠經過闖入參數的不一樣來區別兩個重載函數,經過返回值是不能區別開來的學習
public static int max(int a, int b) { return (a >= b) ? a : b; } public static double max(double a, double b) { if (a != a) return a; // a is NaN if ((a == 0.0d) && (b == 0.0d) && (Double.doubleToRawLongBits(a) == negativeZeroDoubleBits)) { // Raw conversion ok since NaN can't map to -0.0. return b; } return (a >= b) ? a : b; }
final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
答:final修飾引用類型變量,變量的引用不能被修改;如上代碼中是引用了數組對象,對象沒有被修改,可是對象指向的屬性值是能夠被修改的
因此是能夠正常運行的this
爲何其屬性均爲private?這樣設計有什麼好處?
爲Employee類增長一個無參構造函數,調用其有參構造函數,設置name爲僱員1, salary爲3000, hireDay的年月日爲2017年3月5日。(粘貼代碼)
爲Employee類再增長一個有參構造函數,參數只有name與salary,hideDay爲當前日期。(粘貼代碼)
答:這樣設計本類外就不能訪問這些屬性,多是爲了不職員的name等信息泄露,出於安全的考慮
增長一個無參構造函數
public Employee(){ this("僱員1",3000,2017,3,5); }
增長一個有參構造函數:
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)); }
參考連接:http://blog.csdn.net/kookob/article/details/6885383
功能:判斷今天若是是週一到週五,直接輸出如「上班時間」並返回true,不然輸出「休息時間」。
提示:使用LocalDateTime, DayOfWeek
參考資料:
JAVA 8:健壯、易用的時間-日期API - ImportNew.pdf
Java8DateTimeTest.java
public class GetTime { public static boolean isMondayToFriday(){ LocalDate today = LocalDate.now(); DayOfWeek week=today.getDayOfWeek(); if(week.getValue()>=1&&week.getValue()<=5){ return true; } else return false; } public static void main(String[] args) { if(GetTime.isMondayToFriday()) System.out.println("上班時間"); else System.out.println("休息時間"); } }
運行截圖:
咱們之前編寫的程序,必須打開Eclipse或者將相應的.class文件拷貝出來在命令行下執行相應命令才能運行,若是.class文件較多且類文件中有包名,須要將完整的目錄結構及文件拷貝出來,才能運行。如今但願將Eclipse項目中的Java文件打打成一個可運行的jar包,在命令行直接運行。改造題目7,使其從命令行接收參數,參數爲年-月-日,將項目打成jar包,而後在命令行經過java -jar運行,並截圖。
打包成jar包截圖以下:(文件名:test8.jar,包名:Test8,類名EmployeeTest)
運行結果:
參考文章:http://jingyan.baidu.com/article/4dc40848b5a8c9c8d946f139.html
第一題題目要求要逆序輸出對象的內容,則須要建立數組來存放,調用有參的構造函數,進行初始化
無參的構造函數在建立對象的時候就能執行了,將屬性用private修飾比較安全,以後能夠用eclipse能夠自動生成setter(設置器),getter(訪問器)方法,使其具備封裝性
第二題當中的靜態塊通常只執行一次,因爲每一個對象的id屬性都不一樣,將其定義爲靜態的屬性,經過累加計算地址,給id賦值,具體類加載的過程見第一題
第三題就是編寫Circle類和Rectangle類,當中都有計算面積和周長的方法,比較中規中矩,但會產生代碼冗餘,在接下來的學習中能夠用繼承和多態的方法來實現