類和對象(Class and Object) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0.最外層的類可以聲明成final: "$file a":< final class a{}> ok!,但是不能是private和static的. 1.overload是同類里同樣的方法名,override是父子的繼續 2.override的返回結果必須一樣,否則編譯錯哦 The return type of an overriding method is identical to the return type of the method it overrides. 2.1 override的modifier可以擴大,但是不能縮小.比如父類private void test(){} 子類:public void test(){} ,沒問題;假如反了,就死翹翹了! 3.super.super(),靠,錯的,沒這么寫的 4.static和非static之間永遠無法override! 5. 看程序 public class A{ void test1() throws BaseEx{hi();} void hi(){System.out.println("say hi,a");} } class AA extends A{ void hi(){System.out.println("say hi,aa");} } class test{ static void main(String b[]) throws Exception{ A a = new AA(); a.test1(); } } 結果是,"say hi,aa",這說明什么?說明,方法永遠跟著類的原來面目走;而,變量恰恰相反! 6.一個非抽象方法死活也別想override成一個抽象方法 7.override的子類的方法拋出的的異常只能是父類方法拋出異常的子異常類,或者無! 8.構造器不能是native,final,static,synchronized的,可以是public,private,什么都沒有的,呵呵 9.構造器函數里還可以寫return呢,但后面什么都不許有,甚至null(這不是廢話嗎,哈哈) 10.構造器不能返回值.這大家都知道,但假如有個"構造器"反值了,別緊張,它就不是構造器嘍,只是個普通函數 11.super();this();這兩個函數只能在構造函數里調用. 12,成員變量聲明時候賦值,比構造函數還早.int i=1; ealier than Test(){} 13.方法的參數變量可以是final. 14. hashCode返回一個int 15. void wait() throws InterruptException wait扔InterruptException異常 16. java.lang.Void 是void的包裝類 17. Byte,Interger,Double...所有的跟數有關的包裝類都是繼續于Number
接口Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.接口的所有方法默認都是public,abstract和non-static的 2.接口的所有變量默認都是public,static,final的.所以,接口的變量不能改值,在它的實現類里. 3.接口的實現類實現的方法必須和接口的方法拋出同樣的異常,不許是子類,這和override不一樣!同樣,假如接口方法沒有拋,實現方法也不能拋. 4.實現類實現的方法必須顯式的聲明成public,什么都不寫都不行,啊!!! 5.接口不能聲明成final,要不它怎么被實現呢(這似乎又是廢話啊 6.一個類實現兩個接口,假如兩個接口有相同的方法,實現類就實現這個方法,沒問題的. 內嵌類Inner Class) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.內嵌類可以訪問outer類的任何變量,包括私有的. 2.靜態inner類,只能訪問outer類的任何static變量 2.1內嵌類可以是final,abstract的 3.我靠,方法內的內嵌類不能為static: void test(){ static class A{}} XXXXX!!!! 4.我靠,方法內的內嵌類也不能帶任何modifier,void test(){ public class A{}} XXXXX!!!! 5.我靠,方法內的內嵌類只能訪問方法內的final變量,但是,可以訪問outer類的任何變量. 6.匿名類不能有構造器,但聲明時候帶參數,相當于構造器的參數傳遞. class ABC{} class ABCD{private ABCD(int i){}} ABC test3(){return new ABC(){};} ABCD test4(){return new ABCD(3){};} interface iii{} iii test5(){return new iii(){};} //class BCD extends ABCD{} compile error,因為, 看上面就知道,new iii(){};實際上匿名類實現了iii接口;new ABC(){};實際上是匿名類繼續了ABC. 8.??? class A {private A(){System.out.println("a!");}} class B extends A{} 我靠,沒錯!B實例的時候會主動調用父類A的構造,即使是private的,看來也沒問題!!! 9.內部類可以有synchronized方法,那么鎖是這個內部類,跟外部類沒一點關系,內外分別的,在鎖的問題上. 10.外部類不能通過this被訪問,this這時候應該指的是內部類,享用外部類的成員就直接用,不用加任何限定詞 11.如何用this呢?請看: class Outer{ int i; class Inner{ class InnerInner{ void Test(){ Outer.this.i=1; } } } } 看見了吧,類名.this.變量名,可以引用到i,第一次看到吧,嘿嘿,孤陋寡聞. 12.注重這兩種寫法都可以 Class Outer.Inner i = new Outer().new Inner(); 或者, Class o= new Outer(); Class Outer.Inner i=o.new Inner(); 線程Thread) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?????去看Thread的API!!!! 1.線程啟動必須通過start函數. 2.run函數不許也只能是public的. 3.線程有優先級從1到10,通過Thread.setPriority(int);來改變,不能超過10,否則會出現運行異常 4.線程優先級默認是5,即NORM_PRIORITY.????????NORM_PRIORITY是Thread的靜態變量嗎? 5.????Thread.yeild();是靜態方法,所以,使用格式是Thread.yield();她強迫當前的進程放棄CUP. 6.sleep(1000),是說線程睡覺1秒,然后,進入Ready狀態,注重,不是運行狀態,它還要等OS來調度來獲得CUP.
java.lang.*; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.數組的科隆: int ia[][]={{1,2},null}; int ib[][]=(int[][])ia.clone(); 2.什么是NaN?????然后看ceil(NaN),floor(NaN),... 3.Math.floor(-1.1f);//-2.0 Math.ceil(-1.1f);//-1.0 Math.round(-1.6d)//-2 4.0= 5.Math,Interger,Boolean...等類型包裝類都是final的,不可繼續 6.int round(float); long round(double);唉,round永遠返回不了小數點 7.static double ceil(double) 8.static double floor(double)注重,ceil,floor的只有這個double版本,什么都轉成double! 9.static double sin(double 弧度); 還有cos,tan 10. new String; ?可以是byte[];char[];String;StringBuffer 11. String的一些函數: int length(); char charAt(int); St