Java認(rèn)證之精屁總結(jié)
3.switch里面只能是short,int,char,byte的. 4.if (a="a") 編譯錯(cuò), if(a=false)編譯ok,原因是a=false的a代表了個(gè)boolean值 6.這種寫法Outer.Inner i = new Outer().new Inner(); OK! 7.文件里, 8 默認(rèn)是int, 8.0默認(rèn)是double 8.八進(jìn)制是 0開頭,不是O(英文o) 9.byte -128~127 ,-128是二進(jìn)制的多少????????????? 11. -1>>32還是-1, -1>>>32為什么還是-1??????????????????? 12. char c=‘c‘; String s ="s"; s+=c;結(jié)果是 sc!!! 13. boolean b1=true; boolean b2=true; System.out.println(b1|b2); 結(jié)果是true.編譯沒錯(cuò)! java的默認(rèn)import包有哪些??????? AWT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 所有組件flowLayout會(huì)被壓縮為它們的最小尺寸 2. BorderLayout的North,South,West,East,Center就是這個(gè)樣子,四個(gè)單詞大小寫區(qū)分,必須這么寫,否則錯(cuò)????????? 2.1如果只是add,而不寫東南西北中,默認(rèn)是中 2.2如果不加component到中,那中就空著 2.3如果某個(gè)方位有個(gè)component,如果你還往上面加component,后來的會(huì)覆蓋原來的 3. applet,panel默認(rèn)布局是flowlayout 4. frame,dialog默認(rèn)布局是borderlayout 5. 各種awe類的繼承關(guān)系,frame,window,component,...?????????? 6. window,frame,dialog不能被嵌入到容器里.注意:window! 7. action event作用于button和textfeild的回車時(shí)刻 8. item event作用于list,choice,checkbox的選擇改變時(shí)刻 9. 如果容器不可見,新layout管理器后前的component將跟隨這個(gè)新的layout變化,如果容器可見,這些component將不受后來的layout影響 10.gridLayout里的component尺寸一樣 11.gridBagLayout里,component可以占用多個(gè)grid 12.System.exit();在Applet里面不允許調(diào)用. AWT事件 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.事件類有 (symantic)語義事件:ActionEvent,AdjustEvent,ItemEvent,TextEvent 低級(jí)事件:ComponentEvent,ContainerEvent,FocusEvent,InputEvent,KeyEvent,MouseEvent,PaintEvent,WindowEvent 2.監(jiān)聽器: ActionListener,AdjustListener,CompentListener,ContainerListener,FocusListener,ItemListener, KeyListener,MouseListener,MouseMotionListener,TextListener,WindwosListener, 共11個(gè)Listener, 七個(gè)adpter,少的4個(gè)是ActionLisenter,AdjustListener,ItemListener,TextListener,它們只有一個(gè)方法. 3,鼠標(biāo)MouseListener有5個(gè)方法:clicked,pressed,released,entered,exited 4.鼠標(biāo)MouseMotionListener有2個(gè)方法:mouseDragged,mouseMoved
類和對(duì)象(Class and Object) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0.最外層的類可以聲明成final: "$file a":< final class a{}> ok!,但是不能是private和static的. 1.overload是同類里同樣的方法名,override是父子的繼承 2.override的返回結(jié)果必須一樣,否則編譯錯(cuò)哦 The return type of an overriding method is identical to the return type of the method it overrides. 2.1 override的modifier可以擴(kuò)大,但是不能縮小.比如父類private void test(){} 子類:public void test(){} ,沒問題;如果反了,就死翹翹了! 3.super.super(),靠,錯(cuò)的,沒這么寫的 4.static和非static之間永遠(yuǎn)無法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(); } } 結(jié)果是,"say hi,aa",這說明什么?說明,方法永遠(yuǎn)跟著類的原來面目走;而,變量恰恰相反! 6.一個(gè)非抽象方法死活也別想override成一個(gè)抽象方法 7.override的子類的方法拋出的的異常只能是父類方法拋出異常的子異常類,或者無! 8.構(gòu)造器不能是native,final,static,synchronized的,可以是public,private,什么都沒有的,呵呵 9.構(gòu)造器函數(shù)里還可以寫return呢,但后面什么都不許有,甚至null(這不是廢話嗎,哈哈) 10.構(gòu)造器不能返回值.這大家都知道,但如果有個(gè)"構(gòu)造器"反值了,別緊張,它就不是構(gòu)造器嘍,只是個(gè)普通函數(shù) 11.super();this();這兩個(gè)函數(shù)只能在構(gòu)造函數(shù)里調(diào)用. 12,成員變量聲明時(shí)候賦值,比構(gòu)造函數(shù)還早.int i=1; ealier than Test(){} 13.方法的參數(shù)變量可以是final. 14. hashCode返回一個(gè)int 15. void wait() throws InterruptException wait扔InterruptException異常 16. java.lang.Void 是void的包裝類 17. Byte,Interger,Double...所有的跟數(shù)有關(guān)的包裝類都是繼承于Number
接口Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.接口的所有方法默認(rèn)都是public,abstract和non-static的 2.接口的所有變量默認(rèn)都是public,static,final的.所以,接口的變量不能改值,在它的實(shí)現(xiàn)類里. 3.接口的實(shí)現(xiàn)類實(shí)現(xiàn)的方法必須和接口的方法拋出同樣的異常,不許是子類,這和override不一樣!同樣,如果接口方法沒有拋,實(shí)現(xiàn)方法也不能拋. 4.實(shí)現(xiàn)類實(shí)現(xiàn)的方法必須顯式的聲明成public,什么都不寫都不行,啊!!! 5.接口不能聲明成final,要不它怎么被實(shí)現(xiàn)呢(這好像又是廢話啊 6.一個(gè)類實(shí)現(xiàn)兩個(gè)接口,如果兩個(gè)接口有相同的方法,實(shí)現(xiàn)類就實(shí)現(xiàn)這個(gè)方法,沒問題的. 內(nèi)嵌類Inner Class) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.內(nèi)嵌類可以訪問outer類的任何變量,包括私有的. 2.靜態(tài)inner類,只能訪問outer類的任何static變量 2.1內(nèi)嵌類可以是final,abstract的 3.我靠,方法內(nèi)的內(nèi)嵌類不能為static: void test(){ static class A{}} XXXXX!!!! 4.我靠,方法內(nèi)的內(nèi)嵌類也不能帶任何modifier,void test(){ public class A{}} XXXXX!!!! 5.我靠,方法內(nèi)的內(nèi)嵌類只能訪問方法內(nèi)的final變量,但是,可以訪問outer類的任何變量. 6.匿名類不能有構(gòu)造器,但聲明時(shí)候帶參數(shù),相當(dāng)于構(gòu)造器的參數(shù)傳遞. 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(){};} file://classBCD extends ABCD{} compile error,因?yàn)? 看上面就知道,new iii(){};實(shí)際上匿名類實(shí)現(xiàn)了iii接口;new ABC(){};實(shí)際上是匿名類繼承了ABC. 8.??? class A {private A(){System.out.println("a!");}} class B extends A{} 我靠,沒錯(cuò)!B實(shí)例的時(shí)候會(huì)主動(dòng)調(diào)用父類A的構(gòu)造,即使是private的,看來也沒問題!!! 9.內(nèi)部類可以有synchronized方法,那么鎖是這個(gè)內(nèi)部類,跟外部類沒一點(diǎn)關(guān)系,內(nèi)外分別的,在鎖的問題上. 10.外部類不能通過this被訪問,this這時(shí)候應(yīng)該指的是內(nèi)部類,享用外部類的成員就直接用,不用加任何限定詞 11.如何用this呢?請(qǐng)看: 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.線程啟動(dòng)必須通過start函數(shù). 2.run函數(shù)不許也只能是public的. 3.線程有優(yōu)先級(jí)從1到10,通過Thread.setPriority(int);來改變,不能超過10,否則會(huì)出現(xiàn)運(yùn)行異常 4.線程優(yōu)先級(jí)默認(rèn)是5,即NORM_PRIORITY.????????NORM_PRIORITY是Thread的靜態(tài)變量嗎? 5.????Thread.yeild();是靜態(tài)方法,所以,使用格式是Thread.yield();她強(qiáng)迫當(dāng)前的進(jìn)程放棄CUP. 6.sleep(1000),是說線程睡覺1秒,然后,進(jìn)入Ready狀態(tài),注意,不是運(yùn)行狀態(tài),它還要等OS來調(diào)度來獲得CUP.
java.lang.*; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.數(shù)組的科隆: 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=<double random()<1 5.Math,Interger,Boolean...等類型包裝類都是final的,不可繼承 6.int round(float); long round(double);唉,round永遠(yuǎn)返回不了小數(shù)點(diǎn) 7.static double ceil(double) 8.static double floor(double)注意,ceil,floor的只有這個(gè)double版本,什么都轉(zhuǎn)成double! 9.static double sin(double 弧度); 還有cos,tan 10. new String; ?可以是byte[];char[];String;StringBuffer 11. String的一些函數(shù): int length(); char charAt(int); String toUpperCase(); String toLowerCase(); 12. String("Abc").equals(String("abc"))不相等的,不然就不會(huì)有boolean equalsIgnoreCase(String)函數(shù) 13."012345678"是一個(gè)串的順序號(hào)碼,indexOf(‘1‘),indexOf("1")都返回1,subString(1,5)是2345,嘿嘿:是"[)"的感覺 14, trim()連tab都退毛," java ",trim()一下就只剩下"java"了 15. 關(guān)于對(duì)象的科隆,去喳喳API?????????????????????? 16. "abcd".trim(),"abcd" + new String("ef")都是合理的寫法 17. StringBuffer的3個(gè)構(gòu)造器: ()初始化容量為16,(int 初始化容量),(String),初始化容量為串長加上16 18. StringBuffer的一些函數(shù): String toString(); append();reverse();insert();delete(int start,int end);deleteCharAt(int);setLength(int newLength); 19. String s=""; StringBuffer sb=new StringBuffer(); if (s==sb){}編譯錯(cuò)!因?yàn)?s,sb類型不一樣,不能比較 集合: 1.各接口和類的關(guān)系,只有最后一個(gè)是類 Collection:List:vector,ArrayList,LinkedList Map:SortedMap:TreeMap Collection:Set:SortedSet:TreeSet Map:HashTable Collection:Set:HashSet 基礎(chǔ)Base) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.java application的main可以不是public的.但必須是static的 2.一個(gè)文件只能有一個(gè)public類,而且還得跟文件名一樣,包括大小寫 3.變量只能是字母,$,_開頭,接下來的第二個(gè)可以是,數(shù)字 4.chu0061r=‘a(chǎn)‘; char u0063=‘b‘; char c=‘u0063‘;都是合法的 5.1e-5d,合法.e-5d不合法,必須有前面的系數(shù) 6.int[] i[]={null{1,2}}正確! int i[]={1,2,3,} 正確!","和沒有的效果一樣 7.局部array,跟變量一樣,使用前要初始化 8.main方法可以為final 操作符和分配符(Operator and Assignment) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.System.out.printl(1+2+"3");//33 System.out.printl("1"+2+3);//123 2.int i=0; i=i++;i=i++;i=i++; 結(jié)果,i=0! 3.int i[]; index=0; i[index]=index=5; 結(jié)果是,i[0]=5;!!! 4.byte b=10;可以,因?yàn)?10可以被自動(dòng)從int轉(zhuǎn)成byte 5.接下來,byte b=b+10;不可以!!因?yàn)?10+b后的int無法被自動(dòng)從int轉(zhuǎn)成byte,問我,我也不知道為什么!靠! 6.byte b1 = 4; byte b2 = 6; b1 = b1 + b2;錯(cuò)!編譯錯(cuò)!b1 + b2后,必須強(qiáng)制轉(zhuǎn)成byte,b1x1+b2); 7.XOR 一樣的為0,不一樣為1 1,1=0;0,0=0;1,0/0,1=1 8. x == Float.NaN編譯錯(cuò),應(yīng)該是Float.IsNaN 9. x == Double.POSITIVE_INFINITY編譯可以 10.-1是1111.... 1111,<<永遠(yuǎn)右補(bǔ)零,>>正補(bǔ)零,負(fù)補(bǔ)一,>>>恒補(bǔ)零 10.1 -1>>多少位都是-1 ; 1<<31變成了最小負(fù)數(shù),1000....0000 11.最大正數(shù)是01111....1111 12.最小負(fù)數(shù)是1000....0000(-2147483648) 13. a instanceof b,b必須是類/接口,不能是實(shí)例 --------補(bǔ)充------------------------------ 1. byte,short,char 都存在 var = -var;編譯錯(cuò)誤,因?yàn)?這時(shí)候的-var已經(jīng)自動(dòng)轉(zhuǎn)成個(gè)int類型了 2. int/0會(huì)扔出ArithmeticException double,float/0得INF或者-INF 0/0得NaN 3. int a-b-c;是不符合命名規(guī)則的變量名????編譯會(huì)出錯(cuò). 4. char a=‘u0001‘;對(duì)! char b=u0001;編譯錯(cuò)! 5. boolean b1,b2,b3,b4,b5; b1 = b2==b3; b1 = b2<=b3 && b4==b5; b1 = b2==b3==true 都是對(duì)的!靠!變態(tài)! b1 = b2==b3==b4 XXXXXXX編譯錯(cuò)! 6. 1>>1 是0 7. %= <<= =>> =>>>都是合法符號(hào) 8. --1-10*4 這種寫法沒錯(cuò),就是 (--1)-10*4 9. k=1;++k + k++ + +k ;結(jié)果是7,相當(dāng)于 (++2)+(2++)+(+3) 10.標(biāo)號(hào)不能標(biāo)示聲明. hi: if { break hi; file://break hi1;不行,不能向后調(diào)轉(zhuǎn) } file://hi1:不行,不能放在聲明前 int i; hi1: i=1; 11.public static void main(String s[]) throws Exception{}可以噢,main可以扔出異常 12. hi: if(b==true){break hi;} break 標(biāo)號(hào),可以用在if里面.別的任何都不行,包括break,continue 標(biāo)號(hào). 13.int x = i*-j; 我靠,沒問題的!!!編譯沒錯(cuò)! int x = i*j++ + +i++; 這個(gè)也沒問題, 變量修飾符(Modifier) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.最外面一層的類不能聲明成protect和pravite的 2.同一個(gè)類的兩個(gè)實(shí)例之間可以訪問彼此的私有方法和私有變量,酷 3.protect和無修飾符的具體區(qū)別???????關(guān)于外包可以訪問被子類訪問的是哪個(gè)? 4.成員變量被修飾成final后,必須聲明時(shí)候就賦初值或者在構(gòu)造器里面賦初值,別指望她可以得到default值. 5.抽象方法不能是static的!!! 6.靜態(tài)方法將隨著類的變化而變化,看例子: class Parent{ static void test(){System.out.println("hi,parent")}; } class Child extends Parent{ static void test(){System.out.println("hi,child")}; } Parent p = new Child(); p.test(); file://打出來的是hi,parent! 7.靜態(tài)方法可以通過類的實(shí)例調(diào)用. new Child().test(); 和 Child.test(); 都OK! 8.transient只能用在類的成員變量上,不能用在方法里. 9.transient變量不能是final和static的 10.native方法可以是private,abstractd的 流程控制 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1。不可到達(dá)的語句聲明為錯(cuò):while(false){} ;for(;false{};if(false){}都無法編譯 2。for(第一部分;的第一部分可以用來聲明或者賦值,但不能兩者都 3。byte b; switch { case 200: // 200 not in range of byte,因?yàn)?00超過b的范圍,將編譯錯(cuò)誤 4。帶標(biāo)簽的continue回達(dá)到標(biāo)簽的位置,從新進(jìn)入緊接在標(biāo)簽后面的循環(huán) 5。帶標(biāo)簽的break會(huì)中斷當(dāng)前循環(huán),并轉(zhuǎn)移到標(biāo)簽標(biāo)示的的循環(huán)的末尾 轉(zhuǎn)型和上溯(Converting and Casting) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Binary operators convert the smaller(less precise) operand to the type of the larger(more precise) operand. All operators will convert things smaller than ints to ints or larger. This includes char ‘s! 1.byte,char,short默認(rèn)轉(zhuǎn)成int 2.byte->short->int->long->float->double char^ 這是默認(rèn)可以轉(zhuǎn)型的方向,反了必須要顯式cast! 特別注意:long->float是默認(rèn)的,別看long64,float32,嘿嘿 還有就是看得出來,char和 byte,short之間無法互相默認(rèn)轉(zhuǎn)換 3.float f=1/3; OK!float f=1.0/3.0;編譯出錯(cuò),因?yàn)?.0/3.0結(jié)果是double的,噢噢~,錯(cuò)嘍!! 4.int i=1; byte b=i;錯(cuò)!需要顯式cast. final i=1; byte b=i;就ok! 我也不知道為什么,final就可以.而且,據(jù)我實(shí)驗(yàn)只有int和byte的關(guān)系這樣,其他不行. 5.int i[]; Object[] obj=i;錯(cuò)! Object obj=i;對(duì)! 數(shù)組只能轉(zhuǎn)成Object,而不能是Object[] 6.int i[]; Object[] obj;i=(int[])obj; 對(duì)! 對(duì)象可以通過顯式來轉(zhuǎn)成一個(gè)數(shù)組.
I/O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.File類的一些重要方法:isFile();isDirectory();String[] list();exists();getAbsolutePath();getParent(); 2.通過delete();mkdir();rename(File newname);可以操縱文件,但是卻改變不了文件的內(nèi)容 2.1 File類無法改變當(dāng)前目錄,除非重新創(chuàng)建一個(gè)File對(duì)象. 3.InputStreamReader(InputStream in,String encodingName); OutputStreamReader(OutputStream in,String encodingName); Encoding: 8859_1是Latin-1,包含ASCII 4.關(guān)閉close一個(gè)流,就自動(dòng)調(diào)用了flush. 5.System.in,System.out,System.err,由JVM自動(dòng)創(chuàng)建 6.RandomAccessFile(File file,String mode);mode有,r,rw
|