java 學習筆記1

1、java多線程資料:

http://ifeve.com/java-concurrency-thread-directory/

 

2、enum 類,單例模式

必須提供一個私有得構造函數,並且提供一個無任何修飾符的構造函數:  adapterGateeay();private Gateway() {}

 

3、繼承類初始化順序(構造器也是static方法,儘管static關鍵字沒有顯示地寫出來。因此更確切地講,類是在其任何static成員被訪問時加載的)

1)調用類的static的方法是,首先加載static 的成員,從父類到子類一次類推

2)創建類的對象時,首先加載父類:先是普通成員變量,然後是構造方法;接着是子類:先是普通成員變量,然後是構造方法

例子如下:

package chapter07;

import staticutil.Print.*;

 

class Insect {

privateint i=9;

privateint m = printInit("Insect.m initialized");

protectedint j;

Insect(){

print("i="+ i + ", j=" + j);

j=39;

}

privatestatic int x1 = printInit("static Insect.x1 initialized");

staticint printInit(String s){

print(s);

return47;

}

}

public class Bettleextends Insect {

privateint k = printInit("Bettle.k initialized");

publicBettle(){

print("k="+ k);

print("j="+ j);

}

privatestatic int x2 = printInit("static Bettle.x2 initialized");

publicstatic void main(String[] args){

print("Bettleconstructor");

Bettleb = new Bettle();

}

}

 

static Insect.x1initialized

static Bettle.x2initialized

Bettle constructor

Insect.m initialized

i=9, j=0

Bettle.k initialized

k=47

j=39

 

4、訪問修飾符範圍public>protected>默認(fridenly)>private

1)public 所有的類都能訪問

2)protected 同一個包內可以訪問,繼承的子類可以訪問

3)默認不加修飾符,只是包內訪問權限

4)private 只在本類中可以訪問

 

5、static關鍵字的作用

1)修飾變量:只類加載時被初始化,屬於類級別的範圍,所有對象共享此變量,切值加載一次

2:修飾方法:不需要創建對象即可訪問的方法

 

6、final關鍵字的作用

1)修飾變量:說明該對象的變量在初始化後不能再改變,不同對象可以有不同的值;如果是引用類型只引用的地址不可變

2)修飾方法:說明該方法不能被繼承,private修飾的方法默認是final的

3)修飾類:說明該類不能被繼承,由於不能被繼承隱式指定final的所有方法爲final的

 

7、動態綁定

1)java中除static方法和final方法(private方法屬於final方法)之外,其他所有方法都是動態綁定

2)變量是在編譯時確定的

classSuper {

  public int field = 0;

  public int getField() { return field; }

}

 

classSub extends Super {

  public int field = 1;

  public int getField() { return field; }

  public int getSuperField() { returnsuper.field; }

}

 

publicclass FieldAccess {

  public static void main(String[] args) {

    Super sup = new Sub(); // Upcast

    System.out.println("sup.field = "+ sup.field +

      ", sup.getField() = " +sup.getField());

    Sub sub = new Sub();

    System.out.println("sub.field = "+

      sub.field + ", sub.getField() =" +

      sub.getField() +

      ", sub.getSuperField() = " +

      sub.getSuperField());

  }

}/* Output:

sup.field= 0, sup.getField() = 1

sub.field= 1, sub.getField() = 1, sub.getSuperField() = 0

*///:~

 

//:polymorphism/StaticPolymorphism.java

//Static methods are not polymorphic.

classStaticSuper {

  public static String staticGet() {

    return "Base staticGet()";

  }

  public String dynamicGet() {

    return "Base dynamicGet()";

  }

}

 

classStaticSub extends StaticSuper {

  public static String staticGet() {

    return "Derived staticGet()";

  }

  public String dynamicGet() {

    return "Derived dynamicGet()";

  }

}

 

publicclass StaticPolymorphism {

  public static void main(String[] args) {

    StaticSuper sup = new StaticSub(); //Upcast

    System.out.println(sup.staticGet());

    System.out.println(sup.dynamicGet());

  }

}/* Output:

BasestaticGet()

DeriveddynamicGet()

*///:~

 

8、抽象類

1)關鍵字abstract,在抽象類中可以包含一個或多個抽象方法,也可以不包含抽想方法

2)抽象類不可以創建具體對象,只能創建子類對象

 

9、接口(interface)

1)所有變量都隱含是static和final的

2)所有方法都隱含是public abstract的,即使不寫

 

10、內部類

1)內部類可以訪問外部類的所有成員方法

2)創建內部類之前必須創建外部類對象,通過外部類對象創建內部類:.new

publicclass DotNew {

  public class Inner {}

  public static void main(String[] args) {

    DotNew dn = new DotNew();

    DotNew.Inner dni = dn.new Inner();

  }

}///:~

3)內部類返回外部類對象用.this

publicclass DotThis {

  void f() {System.out.println("DotThis.f()"); }

  public class Inner {

    public DotThis outer() {

      return DotThis.this;

      // A plain "this" would beInner's "this"

    }

  }

  public Inner inner() { return new Inner(); }

  public static void main(String[] args) {

    DotThis dt = new DotThis();

    DotThis.Inner dti = dt.inner();

    dti.outer().f();

  }

}/* Output:

DotThis.f()

*///:~

4)匿名內部類,調用用參數的構造器,public class Parcel8 {

  public Wrapping wrapping(int x) {

    // Base constructor call:

    return new Wrapping(x) { // Passconstructor argument.

      public int value() {

        return super.value() * 47;

      }

    }; // Semicolon required

  }

  public static void main(String[] args) {

    Parcel8 p = new Parcel8();

    Wrapping w = p.wrapping(10);

  }

}///:~

publicclass Wrapping {

  private int i;

  public Wrapping(int x) { i = x; }

  public int value() { return i; }

}///:~

使用外部定義的對象例子,需要final修飾參數

publicinterface Destination {

  String readLabel();

}///:~

publicclass Parcel9 {

  // Argument must be final to use inside

  // anonymous inner class:

  public Destination destination(final String dest) {

    return new Destination() {

      private String label = dest;

      public String readLabel() { return label;}

    };

  }

  public static void main(String[] args) {

    Parcel9 p = new Parcel9();

    Destination d =p.destination("Tasmania");

  }

}///:~

5)嵌套類,不需要內部類對象與外圍類對象之間有聯繫,可以將內部類聲明爲static

 

11、java泛型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章