初學Java6:Java OOP基礎語法總結


*************** Java OOP 基 礎 語 法 總 結 *************************
1,類與對象
1),類(class)是相同屬性和方法的一組集合。
A,類的組成:屬性和方法。
B,語法聲明:使用class關鍵字,eg:public class Student{}//類名首字母大寫,且必須和文件名一致
C,類的實例化:使用new關鍵字,eg:Student student=new Student();//聲明一個Student類型的變量or實例化一個Student對象
D,類與文件的關係;
a,一個java文件能夠包含多個java類
b,一個java文件最多隻能有一個public類
c,java文件的名稱必須和其中的public類名一致
E,eg:public class Student{//類(首字母大寫)
public void getName(){//方法(通常爲動詞+名詞,動詞首字母小寫,名詞首字母大寫)
String name;//屬性(數據類型+屬性名)
}
}
2),對象(object)是一個具體的實體(entity)。
eg:某某學生便可做爲一個對象
********************************************************************
2,方法
1),能夠重複執行的代碼塊,對於調用者來講至關於一個「黑盒子」。
2),語法聲明;訪問控制修飾符 返回值類型 方法名 (參數列表){
方法體;
}
eg:public void getName(int num){
String name;
}
3),方法的傳參--數據類型:A,8種基本數據類型(byte,int,short,long,float,double,char,boolean)
B,引用數據類型(eg:Student student=new Student();中的student就是引用數據類型)
注:基本數據類型與引用數據類型的區別:
a,存儲方式不一樣,基本數據類型存在 棧 中,是按值傳
引用數控類型存在 堆 中,是按址傳
b,使用方式不一樣,基本數據類型 無屬性和方法
引用數控類型 有屬性和方法
********************************************************************
3,構造方法(Constructor)
1),是一個特殊的方法,該方法的做用是實例化對象,會在內存中分配空間,且能夠對類的屬性進行初始化
2),語法特徵:
a,構造方法的名字必須與所在的類一致
b,沒有返回值類型,注意和沒有返回值不是一回事
c,默認狀況下有一個隱式的無參構造方法,其訪問控制修飾與所在的類的訪問控制修飾一致
d,若是咱們自定義了構造方法,則隱式無參構造方法就不存在了
3),使用方法:使用new關鍵字調用

********************************************************************
4,包(package)
1),意義:解決命名衝突
2),命名:主要須要知道域名反寫,所有字母小寫,不能以數字開頭,eg:com.baidu.zhidao.azhi0828//合法包名
3),若是一個類須要使用另外一個包中的類,須要使用import關鍵字導入相應的包,其中java.lang無需顯式導入
********************************************************************
5,可變長度參數
1),是在數據類型後面加上「...」表示,當成數組。
eg:int getTotal(int...num){
代碼塊;
}
2),調用時能夠不傳參數,能夠傳若干參數,傳入參數用逗號隔開,也能夠傳入數組。
3),一個方法最多隻能有一個可變長度參數,並且必須放在最後位置
eg:eg:int getTotal(int num1,int...num2){
代碼塊;
}
********************************************************************
6,命令行參數
***了 解***
********************************************************************
7,方法重載
1),在一個類中,具備相同的方法名,可是參數列表不一樣的方法。
2),可分爲通常方法重載和構造方法重載。
eg:class Student{//同一個類
void getInformation(String name){//相同的方法名,不一樣的參數列表
***;
}
void getInformation(int age){//相同的方法名,不一樣的參數列表
***;
}
}
********************************************************************
8,this關鍵字
(1),使用環境:方法和構造方法中。
(2),使用方法兩種:
1),this.屬性(方法);//this表示當前運行的實列(對象),注意:this未運行時,不表明任何屬性(方法)。
2),this();//只能用在構造方法中。表示調用其餘重載形式的構造方法,並且必須放在第一行。
(3),注意:靜態方法中不能使用this!(靜態方法屬於類,不是實列,而this表明了當前運行的實列,放一塊兒順序會邏輯混亂),main中也不能使用this!
(4),eg:
 1 package com.zhi.java.course;  2 public class Text{  3     Text(int num){//this();只能用在構造方法中
 4         this.num=num;  5  }  6  Text(){  7         this(100);//無參方法調用有參
 8  }  9     int num=1; 10     int getNum(){ 11         return num;//此處能夠直接放回num
12  } 13     void setNum(int num){//新定義的num不一樣於成員變量num
14         this.num=num;//此處this不可省
15  } 16     void m1(){ 17         
18  } 19     void m2(){ 20         this.m1();//此處this能夠省
21  } 22      static void m3(){ 23         System.out.println(this.num);//Error!Cannot use this in a static context
24  } 25 }

 

********************************************************************
9,super關鍵字(對比this關鍵字)
(1),使用環境:通常的實列方法中和構造方法中
(2),使用方法兩種:
(1),super.屬性(方法);//調用父類的屬性(方法)
(2),super();//只能用在構造方法中。表示調用父類相應的構造方法,並且必須放在第一行。
********************************************************************
10,final關鍵字
(1),final修飾類,表示該類不能再被繼承;
eg:final class Animal(){}//Animal不能再被繼承。
(2),final修飾變量,該變量必須被賦值,final修飾後該變量變爲常量,不能再改變;
eg:final int num=10;//num不可再改變。
(3),final修飾方法,該方法不能再被重寫;
eg:final void m1(){}//方法m1在f父類,在子類中final不能再被重寫。
(4),final修飾屬性,1),能夠直接在聲明時賦值
2),能夠在代碼塊中賦值
3),靜態的能夠在靜態代碼塊中賦值
********************************************************************
11,繼承
(1),概念,繼承是OOP特徵之一,是子類經過繼承獲取父類中的部分屬性和方法。
(2),使用extends關鍵字
1),符合is-a關係的設計使用繼承
2),繼承是代碼重用的一種方式
(3),好處:1),作到代碼重用
2),系統維護性更好。
(4),不能繼承的有:1),子類不能繼承父類的構造方法。
2),子類不能繼承父類的私有方法(private)。
3),子類和父類不在同一包,使用默認的訪問權限的成員
(5),eg:
 1 package com.zhi.java.course;  2 public class Animal {  3     String name;//公共的屬性或方法
 4     int age;  5 }  6 public class Dog extends Animal {//繼承父類的屬性,一個子類只能繼承一個父類(單根繼承)
 7     public static void main(String[] args) {  8         Dog dog = new Dog();  9         dog.name = "大黃"; 10         dog.age = 300; 11         String na= "田不易";//也能夠有子類的特有屬性(方法)
12  } 13 }

********************************************************************
12,類的初始化順序:(從上到下)
父類的靜態代碼塊
子類的靜態代碼塊
父類的代碼塊
父類的構造方法
子類的代碼塊
子類的構造方法
注意:靜態代碼塊只能執行一次!
********************************************************************
13,訪問控制修飾符
1),概念,a:Java提供四種訪問控制修飾符(public private 包 )
b:放在方法與變量前,部分訪問控制修飾符也能夠放在類前
c:目的是控制代碼的訪問權限。
2),控制範圍(從大到小)
public 全部代碼均可以訪問
protected 本類,包及其子類的代碼能夠訪問
包 本類,同一個包中訪問
private 私有的,它修飾的屬性,方法,或內部類只能本類使用

********************************************************************
14,方法重寫
1),概念:在子類中對父類的方法從新實現一遍,即在子類中對父類中某方法的默認邏輯進行修改。
2),語法:a,方法名同樣
b,方法的參數同樣
c,子類重寫的方法返回值類型要與父類返回值類型同樣或者是其子類
d,子類訪問控制修飾符的範圍不能比父類不能小
e,子類拋出的異常不能比父類拋出的異常多或範圍更大
3),如下方法不能重寫:
a,private方法
b,構造方法(Constructor)
c,static方法
d,final方法
********************************************************************
15,Object類
(1),java是單根繼承,在java中不容許多根繼承。
(2),Object是全部類的最終父類,全部類或者是數組均可以直接或間接繼承Object類。
(3),Object類來自java.lang包。
(4),能夠將全部的引用類型值賦給Object類型聲明的變量,包括null。
(5),Object提供9中可用方法,全部的子類都均可以使用,其中
getClass(),notiFy(),notiFyall(),wait()不能夠被子類重寫
toString(),equals(),hashCode(),clone(),finalize()能夠被子類重寫
(6),toString()方法
1),自動調用toString()方法的場景:字符串拼接和控制檯輸出,以下列:
 1 package com.zhi.java.course;  2 public class Dog {  3  String name;  4     int age;  5     public String getName() {  6         return name;  7  }  8     public void setName(String name) {  9         this.name = name; 10  } 11     public int getAge() { 12         return age; 13  } 14     public void setAge(int age) { 15         this.age = age; 16  } 17     public static void main(String[] args) { 18         Dog dog = new Dog(); 19         dog.setName("大黃"); 20         dog.setAge(300); 21         System.out.println(dog);//等同於System.out.println(dog.toString());會自動調用toString方法,故有如下結果
22  } 23 }
運行結果: com.zhi.java.course.Dog@2a139a55 //默認實現輸出格式:全限定類名@哈希碼的16進制 

2),重寫toString()方法
 1 package com.zhi.java.course;  2 public class Dog {  3  String name;  4     int age;  5     public String getName() {  6         return name;  7  }  8     public void setName(String name) {  9         this.name = name; 10  } 11     public int getAge() { 12         return age; 13  } 14     public void setAge(int age) { 15         this.age = age; 16  } 17     @Override//重寫註解,可判斷是否重寫
18     public String toString() { 19         return "名字:"+name+"\n年齡:"+age;  //重寫得到須要的值
20  } 21     public static void main(String[] args) { 22         Dog dog = new Dog(); 23         dog.setName("大黃"); 24         dog.setAge(300); 25         System.out.println(dog);//等同於System.out.println(dog.toString());已經重寫toString()方法
26  } 27 }
運行結果:名字:大黃
   年齡:300
(7),equals()方法重寫
1),當類有邏輯上的等贊成義而不只是對象意義上的等同時 須要重寫equals()方法。
2),如下狀況不能重寫:
a,每一個類實列本質上是惟一的。
b,不關心類是否提供了「邏輯意義上的等同」測試。
c,超類已經從新了equals,該方法也適合子類。
3),回顧 "==":比較基本數據類型的值是否相等(按值比較),比較引用數據類型是不是同一個對象(按址比較)。
equals:默認與"=="相同,重寫可自定義比較規則。
4),未重寫時結果以下:
 1 package com.zhi.java.course;  2 class Game {  3     private String name;  4     private int age;  5     public String getName() {  6         return name;  7  }  8     public void setName(String name) {  9         this.name = name; 10  } 11     public int getAge() { 12         return age; 13  } 14     public void setAge(int age) { 15         this.age = age; 16  } 17 } 18 public class EqualsJob { 19     public static void main(String[] args) { 20         Game g1 = new Game(); 21         g1.setName("LOL"); 22         g1.setAge(6); 23         Game g2 = new Game(); 24         g2.setName("LOL"); 25         g2.setAge(6); 26         System.out.println(g1.equals(g2));// 用equals直接比較兩個相同的引用類型,等同System.out.println(g1==g2);
27  } 28 }
運行結果:false
5),重寫equals()後以下:
 1 package com.zhi.java.course;  2 class Game {  3     private String name;  4     private int age;  5     public String getName() {  6         return name;  7  }  8     public void setName(String name) {  9         this.name = name; 10  } 11     public int getAge() { 12         return age; 13  } 14     public void setAge(int age) { 15         this.age = age; 16  } 17  @Override 18     public boolean equals(Object obj) { 19         if (this == obj) { 20             return true; 21  } 22         if (obj instanceof Game) {//向下轉型須要經過instanceof判斷obj和Game是否同一類型
23             Game g = (Game) obj;//類型一致則強轉類型,向下轉型
24             return g.getAge() == age && g.getName().equals(name);//自定義比較規則
25  } 26         return false; 27  } 28 } 29 public class EqualsJob { 30     public static void main(String[] args) { 31         Game g1 = new Game(); 32         g1.setName("LOL"); 33         g1.setAge(6); 34         Game g2 = new Game(); 35         g2.setName("LOL"); 36         g2.setAge(6); 37         System.out.println(g1.equals(g2));// 使用equals直接比較兩個相同的引用類型
38  } 39 }
運行結果:true
6),equals()重寫約定
a,自反性
b,對稱性
c,傳遞性
d,一致性
e,任何非空x,x.equals(null)老是false
f,重寫equals方法時永遠要重載hashCode方法
********************************************************************
16,向上轉型與向下轉型:
(1),向上轉型:子類的實例能夠自動轉換爲父類的類型
(2),向下轉型:父類型須要強制轉化爲子類型,前提是該對象自己就是子類型的對象,使用instanceof作判斷
********************************************************************
17,抽象類:
(public abstract class shape{}就是一個抽象類)
(1),使用abstract聲明抽象類或抽象方法
(2),抽象類能夠有抽象方法,也能夠沒有抽象方法,可是抽象方法必須在抽象類中
(3),抽象類不能實例化
(4),抽象類能夠有構造方法
抽象方法:(public sbstract void sss();就是一個抽象方法)
(1),沒有實現體
(2),不能被final,private,static修飾
(3),主要給子類來重寫的

若是抽象類的子類是一個具體的類,該具體類必須實現父類的全部抽象方法
若是子類也是抽象類,子類既能夠實訓父類的抽象方法,也能夠不實現
 ********************************************************************
18,接口
(1),概念:它是一個純粹的抽象類,其它的方法所有都是抽象方法。它是一種約定,一種能力
(2),聲明語法:使用interface關鍵字,eg:public interface Swimable{}
1),能夠聲明屬性,該屬性默認是public static final修飾的,必須賦初始值
2),能夠有方法,所有是抽象方法,
3),接口不能直接實例化(接口是一個純粹的抽象類)
(3),接口成員-常量屬性
1),接口中全部的屬性都是public static final修飾的
2),常量能夠是基本數據類型,也能夠是引用數據類型
(4),注意:1),常量的命名規範是所有字母大寫,eg:public static final int NUM=10;
2),接口的修飾符多是包級訪問級別的,因此public常量有可能訪問不到
3),推薦使用枚舉保存一組相關的值(至少java5)
(5),繼承接口
1),接口可使用extends關鍵字繼承另外一個接口
2),能夠繼承:抽象方法和默認方法,常量屬性,嵌套類型
3),不能繼承靜態方法
(6),實現接口
1),實現接口的具體類須要使用implements關鍵字,而且須要重寫接口中全部的抽象方法。eg:public class Fish implements Swimable{}
2),實現接口的抽象類能夠重寫接口中的部分抽象方法。
3),一個類能夠實現多個接口,可是隻能繼承一個類,並且應先繼承後實現。
4),接口能夠做爲數據類型用來聲明變量。
5),接口也能夠繼承接口。
********************************************************************
19,面向對象的三大特徵:封裝,繼承,多態
(1),封裝:將實現的代碼或屬性放在一個類或方法中,不讓外部代碼隨意訪問。
好處:安全。
使用訪問控制修飾符 private
(2),繼承:子類會將父類的部分屬性或方法繼承下來。
好處:作到代碼重用,提升系統的維護性能
使用關鍵字:extends
(3),多態:在不一樣的場景下,類或方法有不一樣的指向。
好處:代碼量能夠減小
體現:1),方法上的多態:重寫和重載
2),類的多態:類做爲方法的參數或返回值類型
********************************************************************
20,接口與抽象類的區別?
1),語法上,接口是使用interface聲明,使用implements實現,
抽象類是使用abstract聲明,使用extends繼承。
2),特定,接口不能有具體的方法,屬性都是靜態常量,
抽象類能夠有構造方法、抽象方法、普通方法,還有屬性。
3),設計上,表達某種能力使用接口,

********************************************************************
21,方法重寫與重載的區別?
方法重寫是在子類中對父類的方法從新實現一遍,即在子類中對父類中某方法的默認邏輯進行修改。方法名和參數列表都相同。
方法重載是在一個類中,具備相同的方法名,可是參數列表不一樣的方法。
                                                  
   爲了這個東西,從早上10點弄到如今,除了中午下午吃飯時間,一直沒間斷,好累...
                                                   A_zhi
							                2016/8/28/22/50
******************** 持 續 修 改、補 充... ***************************
相關文章
相關標籤/搜索