Java學習筆記總結
java基礎複習
1、 抽象類別可以有構造器,可以有一個非抽象的父類
2、 記憶體回收機制回收的是堆裡面的記憶體,棧裡面的資料自動入棧自動出棧
3、 參考型別的資料在堆當中,記憶體中操作的只有棧,new關鍵字在堆裡面分配一塊記憶體
4、 java中是值傳遞
5、 String是不可變字元,即一旦分配了記憶體,此記憶體的值將不會改變,又將String賦值是,會重新分配一塊記憶體,字串池: StringBuffer
6、 在堆中的東西叫對象
Ø 運行時異常:
n ArithmeticException 當出現異常的運算條件時,拋出此異常。例如,一個整數“除以零”時,拋出此類的一個執行個體。
n ArrayIndexOutOfBoundsException用非法索引訪問數組時拋出的異常。如果索引為負或大於等於數組大小,則該索引為非法索引。
n ArrayStoreException試圖將錯誤類型的Object Storage Service到一個對象數組時拋出的異常。如:
u Objectx[] = new String[3];
u x[0]= new Integer(0);
n ClassCastException視圖將對象轉換為不是執行個體的子類時,拋出該異常。如:
u Objectx = new Integer(0);
u System.out.println((String)x);
n illegalArgumentException表明向方法傳遞了一個不合法或不正確的參數
n NegativeArraySizeException如果應用程式視圖建立大小為負的數組,則拋出該異常
Ø 編譯時間異常:
n NoSuchMethodException無法找到某一特定方法時,拋出該異常
7、 unicode碼範圍
漢字:[\u4e00,\u9fa5]
數字:[0x30,0x39]
小寫字母:[0x61,0x7a]
大寫字母:[0x41,0x5a]
8、 final類
l final類能夠修飾非抽象類別、非抽象類別成員方法和變數(靜態變數、執行個體變數、局部變數)
l final類不能被繼承,沒有子類
l final方法可以被繼承,但不能被子類的方法覆蓋
l final成員變數表示常量,聲明成員變數時,必須賦值(要麼在聲明的時候賦值,要麼在構造器中賦值),賦值後不能被改變
u publicfinalint E; //final空白,必須在初始化對象的時候賦初值
public Test3(int x) {
E= x;
}
l final不能用於修飾構造方法2.5
9、 static只能修飾成員變數,表示所有對象共用這個資料
l static能夠修飾成員變數和方法,內部類,也可以形成靜態static代碼塊,不能修飾局部變數
l 被static修飾的成員變數可以直接用類名來調用,文法如下:
u 類名.靜態放大名();
u 類名.靜態變數名;
l 靜態方法中不能用this和super關鍵字,不能直接存取不帶static的成員變數和成員方法
l 因為static方法獨立於任何執行個體,因此static方法必須被實現,而不能是抽象的abstract
l 先運行靜態代碼塊,再運行構造器
10、static和final一塊表示什麼
l staticfinal用來修飾成員變數和成員方法,可理解為全域變數(java中沒有全域變數的概念)
l staticfinal修飾變數,表示一旦給值就不可修改,並且通過類名就可以訪問
l staticfinal修飾方法,表示不可覆蓋,並可通過類名直接存取
l staticfinal修飾一些容器類型(ArrayList、HashMap)的變數,不可以改變容器變數本省,但可以修改容器中存放的對象
11、類成員變數分類
被static修飾的變數叫靜態變數或者類變數;
沒有被static修飾的變數叫執行個體變數。
12、命令列參數
java主類參數(即命令列參數)
eclipse中java輸入命令列參數,在選定的類中,點擊右鍵run as—Runconfigurations—Arguments-Program arguments-Variables-選擇string_prompt
13、Integer.valueOf(String)將字串轉換成Integer封裝類
14、一個.java檔案中可以有很多類。不過注意以下幾點:
a、public 許可權的類只能有一個(也可以一個都沒有,但最多隻有1個)
b、這個.java檔案的檔案名稱必須是public類的類名(一般的情況下,這裡放置main方法是程式的入口。)
c、若這個檔案中沒有public的類,則檔案名稱隨便是一個類的名字即可
d、用javac 編譯這個.java檔案的時候,它會給每一個類產生一個.class檔案
15、物件導向、面向過程
物件導向的三大特性:封裝、繼承、多態
面向過程:C語言的底層語言的特性
16、類和對象:
一個類中可以有多個對象,類是對對象的描述
一個類中的成員:
欄位:封裝private
方法:類的行為
構造器:與類同名,沒有傳回值。作用:初始化成員變數。預設構造器:無參且同名沒有傳回值,當一個類顯示的表明構
造器,則類不自己建立預設構造器
內部類
17、類之間的關係:繼承耦合度最高
A.繼承(is-a): 單繼承多實現 extends 優點:減少了代碼的冗餘、缺點:耦合度太高
B.實現:
C.組合(has-a):
合成:個體和整體的關係,個體與整體生命週期相同,公司和部門的關係
彙總:個體和整體的關係,生命週期不同,學生和學校的關係
關聯:雙向關聯
Class Person{
Petpet;}
ClassPet{
Personowner;
}
D.依賴(use-a):一個類作為另一個類方法的參數或者是傳回值,稱為依賴
18、java設計原則
低耦合高內聚
可擴充性和可維護性
19、繼承:
子類中的成員:
1)從父類中繼承的可視化(非私人的)的成員(欄位、方法),不能繼承父類的構造器
2)子類所特有的成員(欄位、方法、構造器)
3)重載父類的成員(方法) 多態
重載的條件:
a)發生在同一個類或者父子類之間
b)方法名稱相同,參數列表(參數的個數,參數的資料類型、參數的順序)不同
c)傳回值無所謂
d)存取權限無所謂
歧義重載:
ma(12,34)//歧義重載,編譯錯誤
publicvoid ma(int i,double j){//列印1}
publicvoid ma(double i,int j){//列印2}
構造器重載:
this:
this.成員(欄位、方法):調用本類的欄位、方法
this(參數列表):調用本類的其他構造方法,必須在構造方法的第一句
public Person(int age){
this(age,””);//調用下面那個構造器
}
publicPerson(int age,String name){
this.age= age;//調用本類的欄位
this.name= name;
}
super:父類的對象
super.成員:調用父類的成員(方法、欄位)
super(參數列表):調用父類的構造方法,必須位於子類構造方法的第一句
如果父類中沒有無參的構造器,在子類中必須顯式的調用父類帶參數的構造方法(super(參數類表或者this(參數列表))); 如果父類有無參的構造器,則子類中可以不用顯式調用父類的構造器,因為系統預設調用super();
4)重寫父類的成員(方法) 多態
重寫的條件 :
a)發生在父子類之間
b)方法名稱相同,參數列表(參數的個數,參數的資料類型、參數的順序)相同
c)傳回值必須相同
d)子類覆蓋方法的存取權限大於等於父類被覆蓋方法的存取權限
e)子類不能拋出比父類異常更大的異常(RuntimeException例外)
5)隱藏父類的成員(欄位)
多態對象:調用隱藏成員,調用的是父類的
調用覆蓋成員,調用的是子類的
20、static:類成員
欄位:所有對象共用
方法:靜態方法不能直接存取非靜態成員,如果需要訪問,產生執行個體訪問;
非靜態方法能夠直接存取靜態成員和非靜態成員
靜態方法中不能有this、super關鍵字
塊:記憶體中只執行一次,通常用來初始化靜態成員
內部類
21、final:終態的
變數:不能第二次賦值,而且必須有初始值
方法:不能被重寫
類:不能被繼承
22、abstract:
抽象方法必須在抽象類別中,抽象類別中不一定要有抽象方法
抽象類別沒有執行個體
抽象類別可以有父類,父類可以是抽象類別也可以是非抽象類別
抽象類別有構造器,不能用來產生本類執行個體,構造器用來間接產生子類執行個體時使用
abstract不能與static、final、private一起使用
23、異常處理:
1)try{}catch()finally{}
2)throws 方法聲明後 throws 異常類
3)throw 句子(通常是if)後throw 異常類的執行個體
4)自訂異常類 extends Exception或者RuntimeException
24、方法重寫(override)和 重載(overlord)的區別
重寫override:子類中出現與父類中籤名相同的方法、存取修飾詞要等於高於父類、傳回值類型,參數列表都相同
重載overlord:一個類內部出現兩個及兩個以上方法名相同、參數列表不同(參數類型,參數個數,參數類型的順序)的方法
25、動態多態和靜態多態
動態多態(運行時多態):運行過程中才知道調用那個方法,指的是方法重寫
靜態多態(編譯時間多態):編譯時間就知道所調用的方法,指的是方法重載
26、如果父類中沒有空參構造
那麼子類必須同super()的方式顯示的調用父類構造
建議:如果父類中出現帶參構造,那麼必須手動添加空參構造
例:下列代碼的運行結果是( B)
classA{
public A(int a){System.out.println(“A”);}
}
class B extends A{
publicB(){
super(5);//必須加上這一塊,用super()顯示的調用父類中的方法
}
public voidma(){System.out.println(“ma”);}
}
public class test{
public static void main(String[]args){
B b=new B();
b.ma();
}
}
A. 列印輸出ma
B. 編譯錯誤
C. 列印輸出A
D. 列印輸出A ma
27、 static:
表示靜態,修飾的內容屬於類成員;被該類的所有對象共用,建議使用類名.的方式訪問;修飾的內容在類載入的時候,執行;只能訪問被static修飾的內容;修飾的內容只在類載入的時候執行一次。
可以修飾的內容:修飾屬性、修飾方法、作為代碼塊使用 jdbc 載入驅動的時候
static{
Class.forName("");//作為代碼塊使用
}
特點:
1.修飾的內容屬於類成員
2.修飾的方法,不能被重寫,可以被重載
3.修飾的內容,執行一次
例:public class HelloWorld{
public staticvoid main(String args[]){
method();
}
public voidmethod(){
try{
System.out.println("hello我執行");
}
finally{
System.out.println("我就不執行");
}
}
}
編譯運行後,輸出結果是什麼。(D )
A."hello 我執行"
B."我就不執行"
C."hello 我執行"
"我就不執行"
D.代碼不能編譯
因為main方法是用static修飾的靜態方法,調用的方法也必須用static修飾,而method();方法沒有被static修飾
28、hashcode()返回的是對象的記憶體位址對應的int類型資料,但是我們可以重寫hashCode()方法,返回的就不再是記憶體位址。
hashcode()相同的對象,這兩個對象不一定相同;如果兩個對象相同,則hashcode()一定相同。
29、java中的存取修飾詞
public: 所有
protected: 自己、同一包中、子類可以訪問
default: 預設什麼都不加,就是default,自己、同一包中可以訪問,但是比protected層級要低即限制更多
friendly: 自己、同一包中可以訪問
private: 自己
例:以下代碼的運行結果是:( C )
1. abstract class abstrctIt {
2. abstractfloat getFloat ();
3. }
4. public class AbstractTest extends AbstractIt {
5. privatefloat f1 = 1.0f;
6. privatefloat getFloat () {return f1;}
7. }
A. 編譯成功
B. 第6行產生錯誤,導致運行失敗
C. 第6行產生錯誤,導致編譯失敗
D. 第5行產生錯誤,導致編譯失敗
預設什麼不加的存取修飾詞是default,default比private限制少(即更進階),比protected限制多,所有第六行重寫方法用的private存取修飾詞比父類低級,所有會出現編譯失敗
30、Math.random()擷取[0,1)的值,取不到1;
用法:(int)Math.random()*n+1;取到1到n之間的整數
31、數組、集合、字串之間的轉換
a. Arrays.asList() //將數群組轉換成集合
例:List list = Arrays.asList(names);//將數群組轉換成集合。
b.String.valueOf() //將數群組轉換成字串、也可將整數轉換成字串
例:char []ch1 = {'a','c','a','b','a'};
String str2 = String.valueOf(ch1);
例:int num = 123456;
String str =String.valueOf(num);
c.toCharArray()將字串轉換成數組
例:String str = "gdfgdfgd";
char[] ch = str.toCharArray();
d.Arrays.toString()將字元數組變成字串特定格式輸出,如[1,2,3]
例:String str1 = Arrays.toString(ch);
System.out.println(str1);
e.str.re