|
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.這種寫(xiě)法Outer.Inner i = new Outer().new Inner(); OK! 7.文件里, 8 默認(rèn)是int, 8.0默認(rèn)是double 8.八進(jìn)制是 0開(kāi)頭,不是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.編譯沒(méi)錯(cuò)! java的默認(rèn)import包有哪些??????? AWT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 所有組件flowLayout會(huì)被壓縮為它們的最小尺寸 2. BorderLayout的North,South,West,East,Center就是這個(gè)樣子,四個(gè)單詞大小寫(xiě)區(qū)分,必須這么寫(xiě),否則錯(cuò)????????? 2.1如果只是add,而不寫(xiě)東南西北中,默認(rèn)是中 2.2如果不加component到中,那中就空著 2.3如果某個(gè)方位有個(gè)component,如果你還往上面加component,后來(lái)的會(huì)覆蓋原來(lái)的 3. applet,panel默認(rèn)布局是flowlayout 4. frame,dialog默認(rèn)布局是borderlayout 5. 各種awe類(lèi)的繼承關(guān)系,frame,window,component,...?????????? 6. window,frame,dialog不能被嵌入到容器里.注意:window! 7. action event作用于button和textfeild的回車(chē)時(shí)刻 8. item event作用于list,choice,checkbox的選擇改變時(shí)刻 9. 如果容器不可見(jiàn),新layout管理器后前的component將跟隨這個(gè)新的layout變化,如果容器可見(jiàn),這些component將不受后來(lái)的layout影響 10.gridLayout里的component尺寸一樣 11.gridBagLayout里,component可以占用多個(gè)grid 12.System.exit();在Applet里面不允許調(diào)用. AWT事件 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.事件類(lèi)有 (symantic)語(yǔ)義事件:ActionEvent,AdjustEvent,ItemEvent,TextEvent 低級(jí)事件:ComponentEvent,ContainerEvent,FocusEvent,InputEvent,KeyEvent,MouseEvent,PaintEvent,WindowEvent 2.監(jiān)聽(tīng)器: 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
類(lèi)和對(duì)象(Class and Object) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0.最外層的類(lèi)可以聲明成final: "$file a":< final class a{}> ok!,但是不能是private和static的. 1.overload是同類(lèi)里同樣的方法名,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ò)大,但是不能縮小.比如父類(lèi)private void test(){} 子類(lèi):public void test(){} ,沒(méi)問(wèn)題;如果反了,就死翹翹了! 3.super.super(),靠,錯(cuò)的,沒(méi)這么寫(xiě)的 4.static和非static之間永遠(yuǎn)無(wú)法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",這說(shuō)明什么?說(shuō)明,方法永遠(yuǎn)跟著類(lèi)的原來(lái)面目走;而,變量恰恰相反! 6.一個(gè)非抽象方法死活也別想override成一個(gè)抽象方法 7.override的子類(lèi)的方法拋出的的異常只能是父類(lèi)方法拋出異常的子異常類(lèi),或者無(wú)! 8.構(gòu)造器不能是native,final,static,synchronized的,可以是public,private,什么都沒(méi)有的,呵呵 9.構(gòu)造器函數(shù)里還可以寫(xiě)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的包裝類(lèi) 17. Byte,Interger,Double...所有的跟數(shù)有關(guān)的包裝類(lèi)都是繼承于Number
接口Interface) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.接口的所有方法默認(rèn)都是public,abstract和non-static的 2.接口的所有變量默認(rèn)都是public,static,final的.所以,接口的變量不能改值,在它的實(shí)現(xiàn)類(lèi)里. 3.接口的實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)的方法必須和接口的方法拋出同樣的異常,不許是子類(lèi),這和override不一樣!同樣,如果接口方法沒(méi)有拋,實(shí)現(xiàn)方法也不能拋. 4.實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)的方法必須顯式的聲明成public,什么都不寫(xiě)都不行,啊!!! 5.接口不能聲明成final,要不它怎么被實(shí)現(xiàn)呢(這好像又是廢話啊 6.一個(gè)類(lèi)實(shí)現(xiàn)兩個(gè)接口,如果兩個(gè)接口有相同的方法,實(shí)現(xiàn)類(lèi)就實(shí)現(xiàn)這個(gè)方法,沒(méi)問(wèn)題的. 內(nèi)嵌類(lèi)Inner Class) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.內(nèi)嵌類(lèi)可以訪問(wèn)outer類(lèi)的任何變量,包括私有的. 2.靜態(tài)inner類(lèi),只能訪問(wèn)outer類(lèi)的任何static變量 2.1內(nèi)嵌類(lèi)可以是final,abstract的 3.我靠,方法內(nèi)的內(nèi)嵌類(lèi)不能為static: void test(){ static class A{}} XXXXX!!!! 4.我靠,方法內(nèi)的內(nèi)嵌類(lèi)也不能帶任何modifier,void test(){ public class A{}} XXXXX!!!! 5.我靠,方法內(nèi)的內(nèi)嵌類(lèi)只能訪問(wèn)方法內(nèi)的final變量,但是,可以訪問(wèn)outer類(lèi)的任何變量. 6.匿名類(lèi)不能有構(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í)際上匿名類(lèi)實(shí)現(xiàn)了iii接口;new ABC(){};實(shí)際上是匿名類(lèi)繼承了ABC. 8.??? class A {private A(){System.out.println("a!");}} class B extends A{} 我靠,沒(méi)錯(cuò)!B實(shí)例的時(shí)候會(huì)主動(dòng)調(diào)用父類(lèi)A的構(gòu)造,即使是private的,看來(lái)也沒(méi)問(wèn)題!!! 9.內(nèi)部類(lèi)可以有synchronized方法,那么鎖是這個(gè)內(nèi)部類(lèi),跟外部類(lèi)沒(méi)一點(diǎn)關(guān)系,內(nèi)外分別的,在鎖的問(wèn)題上. 10.外部類(lèi)不能通過(guò)this被訪問(wèn),this這時(shí)候應(yīng)該指的是內(nèi)部類(lèi),享用外部類(lèi)的成員就直接用,不用加任何限定詞 11.如何用this呢?請(qǐng)看: class Outer{ int i; class Inner{ class InnerInner{ void Test(){ Outer.this.i=1; } } } } 看見(jiàn)了吧,類(lèi)名.this.變量名,可以引用到i,第一次看到吧,嘿嘿,孤陋寡聞. 12.注意這兩種寫(xiě)法都可以 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)必須通過(guò)start函數(shù). 2.run函數(shù)不許也只能是public的. 3.線程有優(yōu)先級(jí)從1到10,通過(guò)Thread.setPriority(int);來(lái)改變,不能超過(guò)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),是說(shuō)線程睡覺(jué)1秒,然后,進(jìn)入Ready狀態(tài),注意,不是運(yùn)行狀態(tài),它還要等OS來(lái)調(diào)度來(lái)獲得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...等類(lèi)型包裝類(lèi)都是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,嘿嘿:是"[)"的感覺(jué) 14, trim()連tab都退毛," java ",trim()一下就只剩下"java"了 15. 關(guān)于對(duì)象的科隆,去喳喳API?????????????????????? 16. "abcd".trim(),"abcd" + new String("ef")都是合理的寫(xiě)法 17. StringBuffer的3個(gè)構(gòu)造器: ()初始化容量為16,(int 初始化容量),(String),初始化容量為串長(zhǎng)加上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類(lèi)型不一樣,不能比較 集合: 1.各接口和類(lèi)的關(guān)系,只有最后一個(gè)是類(lèi) 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類(lèi),而且還得跟文件名一樣,包括大小寫(xiě) 3.變量只能是字母,$,_開(kāi)頭,接下來(lái)的第二個(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,} 正確!","和沒(méi)有的效果一樣 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.接下來(lái),byte b=b+10;不可以!!因?yàn)?10+b后的int無(wú)法被自動(dòng)從int轉(zhuǎn)成byte,問(wèn)我,我也不知道為什么!靠! 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必須是類(lèi)/接口,不能是實(shí)例 --------補(bǔ)充------------------------------ 1. byte,short,char 都存在 var = -var;編譯錯(cuò)誤,因?yàn)?這時(shí)候的-var已經(jīng)自動(dòng)轉(zhuǎn)成個(gè)int類(lèi)型了 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 這種寫(xiě)法沒(méi)錯(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; 我靠,沒(méi)問(wèn)題的!!!編譯沒(méi)錯(cuò)! int x = i*j++ + +i++; 這個(gè)也沒(méi)問(wèn)題, 變量修飾符(Modifier) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.最外面一層的類(lèi)不能聲明成protect和pravite的 2.同一個(gè)類(lèi)的兩個(gè)實(shí)例之間可以訪問(wèn)彼此的私有方法和私有變量,酷 3.protect和無(wú)修飾符的具體區(qū)別???????關(guān)于外包可以訪問(wèn)被子類(lèi)訪問(wèn)的是哪個(gè)? 4.成員變量被修飾成final后,必須聲明時(shí)候就賦初值或者在構(gòu)造器里面賦初值,別指望她可以得到default值. 5.抽象方法不能是static的!!! 6.靜態(tài)方法將隨著類(lè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://打出來(lái)的是hi,parent! 7.靜態(tài)方法可以通過(guò)類(lèi)的實(shí)例調(diào)用. new Child().test(); 和 Child.test(); 都OK! 8.transient只能用在類(lèi)的成員變量上,不能用在方法里. 9.transient變量不能是final和static的 10.native方法可以是private,abstractd的 流程控制 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1。不可到達(dá)的語(yǔ)句聲明為錯(cuò):while(false){} ;for(;false{};if(false){}都無(wú)法編譯 2。for(第一部分;的第一部分可以用來(lái)聲明或者賦值,但不能兩者都 3。byte b; switch { case 200: // 200 not in range of byte,因?yàn)?00超過(guò)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,嘿嘿 還有就是看得出來(lái),char和 byte,short之間無(wú)法互相默認(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ì)象可以通過(guò)顯式來(lái)轉(zhuǎn)成一個(gè)數(shù)組.
I/O ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.File類(lèi)的一些重要方法:isFile();isDirectory();String[] list();exists();getAbsolutePath();getParent(); 2.通過(guò)delete();mkdir();rename(File newname);可以操縱文件,但是卻改變不了文件的內(nèi)容 2.1 File類(lèi)無(wú)法改變當(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
|