scjp的基礎概念

1.我們不能改變一個數組的大小,可以通過new一個新的數組,然後把值賦過去來得一個內容和原來一樣而大小不一樣的數組。

2.當數組越界時,可以編譯,但在運行時會報ArrayIndexOutOfBoundsException的異常。

3.length是數組的一個屬性,而不是方法。

4.數組初始化的方法:

  int[] i = {0,1,2,3,4,5};

  int i[] = {0,1,2,3,4,5};

  int []i = new int[]{0,1,2,3,4,5};

target 2 定義類和變量

1.protected是在同一個包內可見,子類也可見;沒有訪問修飾符的類變量在類內部和同一個包的子類可見,不在同一個包內的

子類不可見。

2.static修飾符可以用於內部類,方法和變量。一個類的所有實例共享類的static部分。

3.static部分不能引用非static變量,否則會編譯錯誤。

4.static方法不能在子類重寫爲非static方法,同樣,static方法也不能重寫爲static方法。但重載是可以的。

5.static方法在子類中不能被重寫,但可以被隱藏(static方法是靜態綁定的)

6.native只能用來修飾方法,不能以代碼塊來結尾,只能以分號。如:public native void fastcalc();

7.abstract可以用在類和方法上。

8.如果一個類含有一個或多個abstract方法,或者繼承了不準備實現的abstract方法,那麼這個類一定要聲明爲abstract,否則編譯錯誤。

9.final可以用在類,方法和變量上。

10.任何final類中的方法,自動成爲final方法。

11.final方法不能在子類中重寫,否則會編譯錯誤。

12.final變量的值不能被修改,並且必須要在一定的時候賦值(定義或構造器中)

13.synchronized保證同一時間只有一個線程訪問方法或程序塊。

14.transient表示一個變量在序列化過程中不能被寫出?

15.volatile它告訴編譯器一個變量可能在線程異步時被修改?

16.方法的返回類型必須緊跟在方法名之前。

17.Everything declared in interface are implicit or explicit public. If you don't put anything there, they are public (not default). No access modifiers other than public allowed.

18.在定義Interface的時候,只能用public(default)修飾.

19.final 變量一定要初始化,否則編譯報錯。可以在定義的時候就初始化,或者在構造器裏初始化,不能在其他的方法內部初始化,否則會報The final field can't be assigned.

20.一個java文件最多只能有一個public類,如果一個java文件中沒有public限定符的類,該文件仍然可以正常運行.

1.修飾interfacemodifier有兩個:publicdefault 如果是default的話,那麼它就和class一樣,只能在包內可見。修飾class的只有publicdefaultabstractfinal,而且abstractfinal不能同時使用。

2.interface裏邊的variables都是public static final的;所有method都是public abstract

3.override rules:方法名、返回類型、參數必須和父類的一樣;Access modifier不能比原來的範圍小;如果父類方法沒throws exception,那麼子類不能throws exception,如果父類方法throws exception,那麼子類可以不throws exception,或throwsexception不能比原來的還要general(父子都可以拋出多個exception,只要父類的exception有一個覆蓋子類的就可以)

4.modifier之間沒有先後順序,如:public static final,final static public.  staticabstract不能並存,所有在interface裏邊的method不能使static的。

5.class內部定義的interfacemodifier只能是publicprotectedprivateabstract&static,並且abstractstatic可以同時存在。

6.class不能implements定義在它內部的interface

target 3 默認的構造器

1.任何被認爲是構造器的方法都沒有返回值。如果一個方法有和類名一樣的名字還有返回值,那麼它不是構造器。

2.如果有了一個帶參數的構造器,那麼無參構造器將被釋放,在程序中就不能new一個無參的實例。

3.構造方法不能是abstract,static,synchronized,nativefinal.

4.當父類定義了帶參的構造器,而沒有定義無參的構造器的時候,new子類的時候一定要明確制定父類的構造器,否則會編譯錯誤。

5.當構造函數有返回值的時候,它就不再是構造函數了,就是一個普通的函數,它可以與構造函數有一樣的參數,或者說他們就毫無關聯了。

6.如果一個類被聲明爲abstract了,那麼即使它沒有一個abstract方法,也不能new那個類的實例。All classes which have abstract method(s) must be declared abstract, but not vice versa.

target 4 重載和重寫

1.在子類中重寫方法時,必須也父類的方法名和返回值一致,否則編譯器會認爲是重載,報有兩個相同方法的異常。如果父類的方法是private的(也就是子類繼承不到的方法),那麼就可以方法名相同,返回類型不同,他們就沒有什麼關係了。

chapter 2 流程控制和差錯處理

target 5 ifswitch語句

1.switch語句的參數必須是byte,char,shortint

2.defaut;語句不一定要放在末尾,放在開始,程序運行的結果是一樣的。滿足條件的還是會先執行。

3.如果case沒有break;語句,那麼它後面的不管條件滿足與否,都會執行。

target 6 循環,continuebreak

1.

chapter 6 重寫、重載、運行時類型和OO

target 3

1.Outer.Inner i = new Outer().Inner();在創建內部類的同時創建了外部類的實例。如果是static inner class,那麼也可以用new Outer.Inner();來創建內部類的實例。

2.成員類無法脫離外部類的實例而存在,它可以訪問外部類中的變量。

3.局部類只有在它的代碼塊和方法中可見。在局部類定義中的代碼只能使用包容塊中的final局部變量或final方法的參數。

4..靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員,但可以有final static成員。

  .靜態內部類的非靜態成員可以訪問外部類的靜態變量,而不可訪問外部類的非靜態變量。

  .非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。

5.定義在類內部的內部類只能用private,protected,public, static, final, abstract

  定義在方法內部的內部類只能用final, abstract

  定義在方法內部的內部類只能訪問方法的final型變量或final型參數

  方法內部的屬性只能聲明爲final

6.所有種類的內部類都可以繼承、都可以實現零個或多個接口,可以繼承和實現Outer類或接口

7.靜態方法內部不能含有靜態內部類。

8.final variables cannot be changed.

 final methods cannot be overridden.

 final classes cannot be inherited.

9.null可以訪問靜態方法或變量,如

class ST {

  static int n = 3;

  static int getInt() {

    return n + 35;

  }

  public static void main(String[] args) {

    ST st = null; // st has the type of ST

    System.out.println(st.n);       // 3

    System.out.println(st.getInt());// 38

    // the above lines are equivalent to the followings

    System.out.println(ST.n);       // 3

    System.out.println(ST.getInt());// 38

  }

}

10.The default constructor implicitly generated by Java compiler should have the same accessibility as the class.

11.Q. What kind of Java methods does not participate polymorphism?

A:Polymorphism for Java method is always there except the following three situations:

   1. The method is declared as final

   2. The method is declared as private

   3. The method is declared as static In those three cases, static binding will be performed by the compiler. Compiler does not have the knowledge, nor care about the method was, is, or will be overridden by none, one, or many subclass(es). The decision is made by the runtime, which is called dynamic binding.

12.靜態綁定的有:field, private method, static method, final method

動態綁定的有:override,In Java, methods are default to dynamic binding, unless they are declared as static, private, or final.

13.當我們用Base類的引用指向Sub類的Instance,我們用該引用當用fieldmethod的時候,編譯器只會檢查Base類有沒有相應的field(static binding)method,沒有的話就會編譯錯誤。

14.當用Integer, Float, Double類型作參數時,傳遞的還是值,不是引用。????

15.只有創建靜態內部類的時候不需要實例化外部類,也不能通過Outer Instance來創建,只能Outer.Inner i = new Outer.Inner();創建。而非靜態內部類就需要外部類的實例來創建,如Outer.Inner i = new Outer().new Inner();

16.class 不可能同時是finalabstract的。

17.申明static方法->定義static方法和執行static塊(從上往下,沒有先後關係)->聲明非靜態方法->定義和執行非靜態塊。

18.整形(byte,char,short,int)和整形相加時如果結果超出範圍(編譯器會計算它的結果)implicitly convert to int; int + float = float; int + double = double. (byte,char,short,int) + long = long; long + float = float; long + double = double; float + double = double.

 

 

Chapter 7  多線程

  1. 創建線程有兩個方法:繼承Thread或實現Runnable接口。可以同時繼承Thread和實現Runnable接口。
  2. run()Thread類和Runnable接口中都被定義爲public void的,override的時候必須寫成public void run(){}的形式。

attachment 1:
1. 當對象被做爲其它對象方法的參數使用時,傳入該對象方法的是對象的地址,在方法中對對象內部變量的重新賦值造成的改變會立即實際改變作用,而對做爲參 數傳入的對象地址重新賦值會在方法調用結束後還原爲原來的地址。基本類型變量做爲方法的參數時,只是傳值進去,方法結束後,變量仍然是原來的值。
2.判斷方法是否覆蓋要看該的方法的返回值和參數是不是精確匹配,如果僅僅是方法的參數發生變化,返回值不變就是重載,如果子類中的同名方法,返回值發生改變將不能編譯,提示類型不兼容。
3. 內部類:內部類如果定義在外部類的方法中,那麼它可以訪問外部類的所有實例變量(無論其訪問控制符是什麼),只能訪問該方法的常量(有final控制 符)。在方法中定義的內部類,必須在方法中創建內部類對象,外部類才能通過該方法訪問內部類。方法中的內部不能是static的,如果一個類中的內部類是 靜態的,那麼它就自動升級爲頂級類,靜態的內部類中的方法,無論靜態還是非靜態的,都只能直接訪問外部類中的靜態變量,在創建外部類對象的實例後,才能訪 問外部類中的非靜態變量。訪問類內部定義的內部類(非方法內定義的),可以用new 外部類().new 內部類(),來創建類的實例。靜態內部類創建實例。outer.inner classname=new outer.inner();
4.賦值語句:先對右邊的語句進行計算後再把值賦給左邊(計算按照運算符的優先級來)。例如:
float f=1/3;//f=0.0
float f=1/3f;//f=0.33333
float f=10;//f=10.0
5. 基本類型取值範圍:char類的取值範圍是0->2e(16)-1,其它整數類型的取值範圍均爲-2e(X)->2e(x)-1,沒有任何後 綴的整數java默認爲int型的,沒有任何後綴的小數默認爲double型的。010是int型的八進制數,0x11是int型的16進制數,如果 double型的也可以使用0x,0,但前提必須這個double型不能是小數或有小數後綴。
1//int,1.0//double,1L//(大小寫均可以)long,1.0F//(大小寫均可以)float,

6. 接口:所有接口中定義的變量均爲public static final常量,public static final可以不寫出來,但在定義時必須對這些常量賦值。所定義的所有方法必須爲public,public也可以不寫出來。接口方法不能用 static,接口可以用abstarct來修飾。
7.構造方法:構造方法沒有返回值,連void也不能有,如果有了就成了普通的方法了。構造方 法調用super時,只能在第一行調用。構造方法不能是靜態的。構造方法只能用public,protected,private三種限定符,但 private定義的構造方法不能在其它類中構造該類的對象,void classname()不是構造方法,但它是一個普通的方法,可以在類中顯式的調用,class.classname();子類中建立子類對象時會首先調 用父類的無參構造方法。如果父類已經有了有參構造方法,java將不會再爲類生成一個默認的無參構造方法,這時必須手動設置一個無參構造方法,以保證建立 子類對象時不會出錯。構造方法不能被子類繼承,例如:class Test extends Thread{};Test t=new Test(runable r);無法編譯,因爲沒有Test(r)這個構造方法。
8.一個java文件最多只能有一個public類,如果一個java文件中沒有public限定符的類,該文件仍然可以正常運行。
9. 靜態方法:靜態方法不能被覆蓋爲非靜態方法,靜態方法如果被覆蓋爲靜態方法,那麼覆蓋的方法將被隱藏。靜態方法中不可調用非靜態方法和變量(原因就是後面 的),靜態方法可以在沒有建立類的實例之前被調用,靜態方法中不用訪問隱式變量this(原因它是非靜態的),非靜態的方法中不能定義靜態的變量。非靜態 的方法也不能覆蓋爲靜態方法。
10.關鍵字:main,sizeof都不是java的keyword。goto,const雖然是keyword,但至少償末使用。true,false,null雖然不是關鍵字,但它們是java定義的常量,也不能做爲變量名。關鍵字全部都是小寫的。
11.String中length()是一個方法不是屬性,而在char[]中,length是屬性而不是方法。
12. 基本類型變量初值問題:如果在方法內定義的變量,必須在使用前賦值。如果在方法外的類變量,在方法內使用時,可以不用賦初值,系統自動就賦了一個該類型的 缺省值。如果是基本類型的數組,無論在方法外還是在方法內,如果沒有賦初值,系統都會自動賦以其缺省值,如果是對象數組,則缺省初值爲null。
13.非靜態的內部類中不能有靜態的方法和變量。
14.多態:一個子類可以被看作是一個父類,並可以強制轉換成父類,但父類不能強制轉換成子類。多態將新創建的子類賦值給父類時,會傳遞一個子類的this指針給該父類對象,如果對該父類對象調用在子類中覆蓋的方法時,會動態的綁定爲子類的方法。例如:
class Super {
    public void T1(){
        System.out.print(”t1”);
    }
}
class A extends Super {
public void T1(){
    System.out.print(”t2”);
}
public static void main(){
    Super s=new A();
    s.T1();//將打印t2
}

但如果是T1是static的,那麼子類中的T1將無法覆蓋父類中的T1,因爲這時子類中的T1在多態綁定時會自動隱藏。
15.垃圾收集:一個程序可建議垃圾收集,runtime.gc(),System.gc()方法可以建議垃圾收集,但不能強制垃圾收集,不同的java開發環境中的垃圾處理機制不太一樣。
16.swicth(i)裏面的i只能接受int以下的基本數據類型,並且從匹配條件開始執行,直到到break或swicth結束。 

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