我的Android學習筆記(仍然JAVA)

來源:互聯網
上載者:User

標籤:

物件導向
*是一種認為抽象的編程模型
*複雜問題分解成一個個獨立的小問題,通過單獨解決每個小問題,來解決複雜問題


*理解成“圖紙”
*對事物、演算法、邏輯、概念的抽象
*封裝(將相關的資料、代碼封裝成一個類組件)

對象(執行個體)
*理解成從“圖紙”建立的“產品”
*每個對象佔用獨立的記憶體空間,儲存自己的屬性資料
*每個對象可以獨立控制讓他執行指定方法的代碼

引用
*理解成“遙控器”
*引用變數儲存一個對象的記憶體位址
通過引用,可以找到這個對象的儲存空間,並調用它的成員
*參考型別的特殊值:null
null 空;
表示不引用熱河對象的記憶體位址

構造方法
* 建立執行個體時,執行的特殊方法
new Soldier()
new FlashLight()
new Car()
new Dog()
new Point()
* 一個類,必須有構造方法
* 如果不定義構造方法,
編譯器編譯代碼時,
會添加預設構造方法
class A {
public A() {
}
}
* 構造方法重載
class A {
public A() {
}
public A(int i) {
}
public A(int i, String s) {
}
}
* 構造方法之間調用
this(…)
減少代碼重複

This
* 兩種用法
* 引用當前對象,儲存當前對象的記憶體位址
this.xxx
f(this)
A a = this;
* 構造方法間調用
this(…)
*) 必須是首行代碼

java 的參數傳遞 - 傳值
  • 基本類型變數中的值,是值本身
    main() {
    int a = 10;
    f(a);//取出a的值,傳遞到f()方法的參數變數a
    print(a);//列印 10
    }

    void f(int a) {
    a = 100;
    }

  • 參考型別變數中的值,是記憶體位址
    main() {
    Point a = new Point(3,4);
    f(a);//a的值是記憶體位址,將記憶體位址傳到f()方法
    print(a.x);
    print(a.y);
    }
    f(Point a) {//參數a引用上面同一個對象的地址
    a.x = 30;
    a.y = 40;
    }

    重載 Overload
    *同名不同參

    繼承

  • 作用: 代碼重用、代碼複用
  • 單繼承:
    *)子類,只能有一個父類
    *)父類,可以有多個子類
    *)子類,可以隔層繼承多個父類

  • 重寫 Override
    從父類繼承的方法,
    不滿足子類需要,
    可以在子類中重新編寫這個方法
    *)重寫一個方法時,
    可以用 super.xxx()
    調用父類同一個方法的代碼

  • 建立子類對象
    1)先建立父類對象,執行父類構造方法
    2)再建立子類對象,執行子類構造方法

    *)兩個對象綁定在一起,
    整體作為一個子類對象

    *)調用成員時,
    先找子類,再找父類

  • 建立子類對象時,先執行父類構造方法

    *)預設執行父類無參構造方法
    super()

    *)手動調用父類有參構造
    super(參數)

    Super

    • 兩種用法

      • 重寫時,調用父類同一個方法
        public String toString() {

        super.toString()

        }
    • 手動調用父類構造方法
      super(參數)
      *) 必須是首行代碼

    多態
    *作用:一致的類型
    *類型轉換
    *)向上轉型
    子類對象,轉換成父類類型

    *)向下轉型
    已經轉為父類型的子類對象,再轉回子類型

    *instanceof
    判斷一個對象的類型
    對真實類型,及其父類型判斷,都得到true
    Share s = new Line()
    s instanceof Line true
    s instanceof Share true

    抽象類別
    *作用:
    *)為子類提供通用代碼
    *)為子類提供通用方法的定義

    *抽象類別是半成品類,沒有完成的類
    *抽象類別不能建立執行個體,只能建立他子類的執行個體

    *包含抽象方法的類,必須是抽象類別
    抽象類別中,不一定包含抽象方法

    Final
    *修飾變數,方法和類
    *變數:意味著變數的值不可變,成為“常亮”
    *)基本類型的值,是值本身不可變
    *)參考型別的值,是引用地址不可變
    Final int a = 10; A=11//錯

    Final point a = new point (3.4);
    A.x = 30;對
    A = new point(1,5);錯
    A =null;錯

    *方法:方法不能被子類重寫

    *類:不能被繼承

    Static (靜態)
    *靜態成員屬於類,而不屬於執行個體
    Class soldier{
    Int id;
    }
    *調用靜態成員,應該使用類名調用
    Soldier s1 = new soldier();
    Soldier s2 = new soldier();
    //下面代碼容易誤解
    S1.count = 1;
    S2.count = 2;
    Print(s1.count)

    Soldier count = 3;
    Print(soldier.count);

    *什麼時候使用靜態
    *)使用原則:能不用就不用。
    靜態是“非物件導向”的文法
    *)使用情境:
    *)執行個體間共用的資料
    *)工具方法
    Math.sqrt()
    Integer.parrseint()

    *靜態方法中,不能調用非靜態成員
    Class a{
    Public static void main(String[] arges){
    //f();//錯不能調用非靜態成員
    A a=new A();
    A.f();

       g();}   Static void g(){  }       Void f(){      }

    }

*靜態初始化快
Class A{
Static{

}
}
*)第一次用到A類,載入A類是,只執行一次

常量
*static final
*命名習慣:全大寫,單詞間加底線
Static final int MAX_VALUE = 100;

對象建立過程
Class A{
Int v1 =1;
Static int v2 = 2;
Static{

}
Public A(){
…..
}
}

class B extends A{
Int v3 =3;
Static int v4 = 4;
Static{

}
Public B(){
…..
}
}

B b = new B();
*第一次用到A類和B類
1.載入父類,為父類靜態成員變數分配記憶體
2.載入子類,為子類靜態成員變數分配記憶體
3.執行父類靜態變數賦值運算,並執行靜態初始化塊
4.執行子類靜態變數賦值運算,並執行靜態初始化塊

*再次用到A類和B類
5.建立父類對象,為父類非靜態變數分配記憶體
6.建立子類對象,為子類非靜態變數分配記憶體
7.執行父類非靜態變數賦值運算
8.執行父類構造方法
9.執行子類非靜態變數賦值運算
10.執行子類構造方法

存取控制符
*控制類和類中的成員的存取範圍
類 包 子類 任意
Public 0 0 0 0
Protected 0 0 0
[default] 0 0
Private 0

*)如何選擇存取控制符
原則:盡量使用小範圍
Public 是與其他開發人員的契約,約定公開的東西會保持穩定不變
Private 隱藏。便於代碼的維護和修改,不會對其他程式組件造成影響

介面
*作用:結構設計工具,用來解耦合
*是極端的抽象類別
*用interface代替class關鍵字
*用implement代替 extends關鍵字
*介面中只能定義
*)公開的常量
*)公開的抽象方法
*)公開的內部類、內部介面

*一個類可以同時實現多個介面
Class A implements B,C,D{
}
Class extends B implement C,D,E{
}
*介面之間繼承
一個介面,可以整合多個其他的父介面
Interface A extends B,C,D{
}

內部類
*定義在類內部,方法內部、局部代碼塊內部

*非靜態內部類
*)非靜態內部類,依賴於外部類執行個體存在
*) 非靜態內部類中,不能定義靜態成員
Class A{
Class Inner{
}
}
A a = new A();
A.Inner i = a.new Inner();

*靜態內部類
Class A{
Static class Inner{
}
}
A.Inner i = new A.Inner();

*局部內部類
*)拒不定義的類型,只能在局部代碼塊內使用
Class A{
Weapon f(){
Class Inner implements Weapon{
}
Inner i = new Inner();
Return i;
}
}

A a = new A();
Weapon w = a.f();
W.kill();

*匿名內部類
Weapon w = new Weapon(){…..};
*)大括弧是匿名類
*)new建立匿名類執行個體
*)Weapon是父類型

我的Android學習筆記(仍然JAVA)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.