進入培訓班第一天,開始記錄下一些筆記,也算是記錄學習的軌跡吧,更新時間會比較長。
1.在for迴圈中,迴圈部分只出現在花括弧中“{}”,即所謂的迴圈體。
2.return的用法:
①傳回值
②結束程式運行
3.eclipse的快速鍵:
①輸出void main方法:輸入main + Alt+ ?
②輸出System.out.println方法:輸入syso+Alt+?
4.對於if語句,若其後沒有花括弧,則只能對一行起作用。
如:
if(i<5) i++; j+=i
則隻影響i++那一行。
5. java的記憶體機制。
基礎類型(byte,short,int,long,float,double,char,boolean)只佔一塊記憶體,除此之外的都叫參考型別。參考型別不同之處在於要佔兩塊記憶體。
如:String s = new String("hello");
相當於String s; s = new
String("hello"); 分兩步進行。
第一步String s 是現在記憶體中分配一塊記憶體,所存值為null,因為還沒有對s進行初始化
第二部 s = newString("hello");這時再在記憶體中分配一塊記憶體(並且位於堆記憶體中,所有new出來的東西都在堆記憶體中,堆記憶體是動態分配的),得到真正的hello值,由s指向hello,相當於指標。
6. this的簡單用法
this表示對static方法可以直接從普通方法(regular method)中調用,但是普通方法不能直接從static方法中調用類內部中對自己的引用,方便類中方法訪問自己的屬性。
如
class a{ int a; int b; public void getA(int a,int b){ this.a = a; this.b = b; }
與下邊的功能相同
class a{int a;int b;public void getA(int _a,int _b){a = _a;b = _b;}}
7. static方法的簡介
static方法可以直接從普通方法(regular method)中調用,但是普通方法不能直接從static方法中調用,這是因為普通方法是對象的方面,static是類方法。類載入在前,對象執行個體化在後。
8.封裝的簡要應用
如若父類A中有private a1(); default a2(); protected a3(); public a4() 這四種方法。
則子類B【不管與A在不在同一個包中】繼承A後,若想使用a3方法,則只能使用super方法。而對於a4(),直接使用也行,利用super方法也行。
9. 重載與重寫的區別
重寫指的是子類覆蓋父類的方法,用於繼承中
①重載指的是一個方法名對應多個方法;
②什麼情況構成重載?形參列表不同(類型、個數不用)
③形參名稱不同、傳回值不同不構成重載
10.編程時,一般情況下,成員變數都必須私人,以private修飾,然後使用set/get方法
對於set和get方法,set沒有傳回值,但有形參;get有傳回值,無形參。例如:
private int[] score;
其對應的set/get方法為:
public void setScore(int[] score){this.score = score;}public int[] getScore(){return score;}然後
int[] score = {1,2,3,4};s.setScore(score);列印時用
System.out.println(s.getScore()[0]);
不要丟了s.getScore()後的[0],這個必須有,因為定義getScore()方法時就已經限制其前邊為數組號。也可寫為
public int getScore()[]{return score;}11.String為不可變字元序列
StringBuilder:可變字元序列,線程不安全,效率高
StringBuffer:可變字元序列,安全執行緒,效率低
盡量不要使用
String b = "a" + "c";
這種形式,因為String為不可變字元序列,會在記憶體建立很多變數,效率低下,也浪費記憶體。而StringBuilder 和 StringBuffer只會建立一個,效率高,佔用記憶體也少。
12.String方法中,substring()截取字串時是掐頭不掐尾,比如:
String str1 = "abcdefg";String str2 = str1.substring(2,4);
則str2為cd
trim()只是去迴轉部和尾部的空格,字串內部的不管
13.類似
String str = "a";
建出來的都為字串常量,它不是new出來的位於方法區[記憶體中有棧、堆、方法區],而對於
String a1 = new String("a");String a2 = new String("a"); 這種的,由於new出來的都位於堆記憶體,所以兩個"a"雖然內容相同,但處於不同的位置。
System.out.println(a1 == a2);為falseSystem.out.println(a1.equals(a2));為true
因為a1和a2指向了不同的新的字串變數
String a3 = "b";String a4 = "b";
這種的,"b"位於方法區,並且兩次都指向的為同一個,所以
System.out.println(a3 == a4);為trueSystem.out.println(a3.equals(a4));為true
因為a3和a4指向了常量池中的同一個對象
14.數組一旦被建立,它的長度就不能改變。並且聲明數組時,不能指定其長度,只有在執行個體化時才會分配空間。
如:int[5] a; 就是非法的。
15.數組的三種初始化方法
①靜態初始化
int[] a = {1,2,3};//靜態初始化的省略寫法Man[] mans = {new man(1,2),//注意為逗號而不是分號new man(2,3) };靜態初始化的完整寫法為:
int[] arr = new int{1,2,3};此時可分開寫:
int[] arr;arr = new int{1,2,3};但簡略寫法卻不能這樣寫
int[] arr;arr = {1,2,3};//會報錯 ②動態初始化
int[] a = new int[2];a[0] = 1;a[1] = 2;
③數組的預設初始化
int[] a = new int[2];//預設值為0,0boolean[] b = new boolean[2];//預設值為false,false
16.介面是一種抽象的類,只包含常量和抽象方法,沒有變數和方法的實現
17.多態是指父類的引用可以指向子類的對象.在使用時,new的誰就調用誰的方法,這就是動態綁定(也叫多態).
A a2=new C();--------A 的引用a2 指向newC;所以a2.m1是調用C類裡的m1()方法;
18.表示年月日一般用yyyy-MM-dd,其中MM不能小寫,因為m表示分鐘
19.補充:String與StringBuilder的區別
舉個例子:
string s="aa"; s +="bb"; 則記憶體中存在了aa bb aabb 三個
stringbuilder ss="aa"; ss.Append("bb")。則記憶體中只有兩個 "bb"和"aabb" 此處少了一個"aa",其實是因為stringbuilder是可變的,"aa"變成了"aabb",而不是重新分配 新空間。
為什麼是stringbuilder比string好,還是存在string。因為stringbuilder是參考型別的,一開始分配的 時候需要比較多的空間,而string是實值型別的。這個有點struct與class的利害比較了。如果不是頻繁拼接的情況下,string的效能明顯 好於stringbuilder,所以如果頻繁拼接就用stringbuilder,如果是展現那麼用string。
20.容器中判斷重複元素不是利用地址比較,而是equals和hashcode方法
對於自動裝箱和拆箱,在1.5以後就可以無視int和Integer的差別了,直接套用就行