Java認證 SCJP 之精闢總結 (轉)

amyz發表於2007-08-15
Java認證 SCJP 之精闢總結 (轉)[@more@]

轉載:union.org
Java之精屁總結

3.switch裡面只能是short,int,char,byte的.
4.if (a="a") 編譯錯, if(a=false)編譯ok,原因是a=false的a代表了個boolean值
6.這種寫法Outer.Inner i = new Outer().new Inner(); OK!
7.裡, 8 預設是int, 8.0預設是double
8.八進位制是 0開頭,不是O(英文o)
9.byte -128~127 ,-128是二進位制的多少?????????????
11. -1>>32還是-1, -1>>>32為什麼還是-1???????????????????
12. char c='c'; String s ="s"; s+=c;結果是 sc!!!
13. boolean b1=true; boolean b2=true; System.out.println(b1|b2); 結果是true.編譯沒錯!
?????java的預設import包有哪些???????
AWT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. 所有flowLayout會被為它們的最小尺寸
2. BorderLayout的North,South,West,East,Center就是這個樣子,四個單詞大小寫區分,必須這麼寫,否則錯?????????
2.1如果只是add,而不寫東南西北中,預設是中
2.2如果不加component到中,那中就空著
2.3如果某個方位有個component,如果你還往上面加component,後來的會覆蓋原來的
3. applet,panel預設佈局是flowlayout
4. frame,dialog預設佈局是borderlayout
5. 各種awe類的繼承關係,frame,window,component,...??????????
6. window,frame,dialog不能被嵌入到容器裡.注意:window!
7. action event作用於button和textfeild的回車時刻
8. item event作用於list,choice,checkbox的選擇改變時刻
9. 如果容器不可見,新layout管理器後前的component將跟隨這個新的layout變化,如果容器可見,這些component將不受後來的layout影響
10.gridLayout裡的component尺寸一樣
11.griagLayout裡,component可以佔用多個grid
12.System.exit();在Applet裡面不允許.
AWT事件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.事件類有
(symantic)語義事件:ActionEvent,AdjustEvent,ItemEvent,TextEvent
低階事件:ComponentEvent,ContainerEvent,FocusEvent,InputEvent,KeyEvent,MouseEvent,PaintEvent,WindowEvent
2.器:
ActionListener,AdjustListener,CompentListener,ContainerListener,FocusListener,ItemListener,
KeyListener,MouseListener,MouseMotionListener,TextListener,WindwosListener, 共11個Listener,
七個adpter,少的4個是ActionLisenter,AdjustListener,ItemListener,TextListener,它們只有一個方法.
3,滑鼠MouseListener有5個方法:clicked,pressed,released,entered,exited
4.滑鼠MouseMotionListener有2個方法:mouseDragged,mouseMoved

類和(Class and )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0.最外層的類可以宣告成final: "$file a":< final class a{}> ok!,但是不能是private和static的.
1.overload是同類裡同樣的方法名,overr是父子的繼承
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(){};}
file://classBCD 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的!!!!
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); String toUpperCase(); String toLowerCase();
12. String("Abc").equals(String("abc"))不相等的,不然就不會有boolean equalsIgnoreCase(String)函式
13."012345678"是一個串的順序號碼,indexOf('1'),indexOf("1")都返回1,subString(1,5)是2345,嘿嘿:是"[)"的感覺
14, trim()連tab都退毛," java ",trim()一下就只剩下"java"了
15. 關於物件的科隆,去喳喳API??????????????????????
16. "abcd".trim(),"abcd" + new String("ef")都是合理的寫法
17. StringBuffer的3個構造器: ()初始化容量為16,(int 初始化容量),(String),初始化容量為串長加上16
18. StringBuffer的一些函式: 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){}編譯錯!因為,s,sb型別不一樣,不能比較
集合:
1.各介面和類的關係,只有最後一個是類
Collection:List:vector,ArrayList,LinkedList
Map:SortedMap:TreeMap
Collection:Set:SortedSet:TreeSet
Map:HashTable
Collection:Set:HashSet
基礎Base)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.java application的main可以不是public的.但必須是static的
2.一個檔案只能有一個public類,而且還得跟檔名一樣,包括大小寫
3.變數只能是字母,$,_開頭,接下來的第二個可以是,數字
4.chu0061r='a'; char u0063='b'; char c='u0063';都是合法的
5.1e-5d,合法.e-5d不合法,必須有前面的係數
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++; 結果,i=0!
3.int i[]; index=0; i[index]=index=5; 結果是,i[0]=5;!!!
4.byte b=10;可以,因為,10可以被自動從int轉成byte
5.接下來,byte b=b+10;不可以!!因為,10+b後的int無法被自動從int轉成byte,問我,我也不知道為什麼!靠!
6.byte b1 = 4; byte b2 = 6; b1 = b1 + b2;錯!編譯錯!b1 + b2後,必須強制轉成byte,b1x1+b2);
7.XOR 一樣的為0,不一樣為1 1,1=0;0,0=0;1,0/0,1=1
8. x == Float.NaN編譯錯,應該是Float.IsNaN
9. x == Double.POSITIVE_INFINITY編譯可以
10.-1是1111.... 1111,<>正補零,負補一,>>>恆補零
10.1 -1>>多少位都是-1 ; 1<<31變成了最小負數,1000....0000
11.最大正數是01111....1111
12.最小負數是1000....0000(-2147483648)
13. a instanceof b,b必須是類/介面,不能是例項
--------補充------------------------------
1. byte,short,char 都存在 var = -var;編譯錯誤,因為,這時候的-var已經自動轉成個int型別了
2. int/0會扔出ArithmeticException
double,float/0得INF或者-INF
0/0得NaN
3. int a-b-c;是不符合命名規則的變數名????編譯會出錯.
4. char a='u0001';對! char b=u0001;編譯錯!
5. boolean b1,b2,b3,b4,b5;
b1 = b2==b3;
b1 = b2<=b3 && b4==b5;
b1 = b2==b3==true
都是對的!靠!變態!
b1 = b2==b3==b4 XXXXXXX編譯錯!
6. 1>>1 是0
7. %= <<= =>> =>>>都是合法符號
8. --1-10*4 這種寫法沒錯,就是 (--1)-10*4
9. k=1;++k + k++ + +k ;結果是7,相當於 (++2)+(2++)+(+3)
10.標號不能標示宣告.
hi:
if {
break hi;
file://break hi1;不行,不能向後調轉
}
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 標號,可以用在if裡面.別的任何都不行,包括break,continue 標號.
13.int x = i*-j; 我靠,沒問題的!!!編譯沒錯! int x = i*j++ + +i++; 這個也沒問題,
變數修飾符(Modifier)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.最外面一層的類不能宣告成protect和pravite的
2.同一個類的兩個例項之間可以訪問彼此的私有方法和私有變數,酷
3.protect和無修飾符的具體區別???????關於外包可以訪問被子類訪問的是哪個?
4.成員變數被修飾成final後,必須宣告時候就賦初值或者在構造器裡面賦初值,別指望她可以得到default值.
5.抽象方法不能是static的!!!
6.靜態方法將隨著類的變化而變化,看例子:
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.靜態方法可以透過類的例項呼叫.
new Child().test(); 和 Child.test(); 都OK!
8.transient只能用在類的成員變數上,不能用在方法裡.
9.transient變數不能是final和static的
10.native方法可以是private,abstractd的
流程控制
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。不可到達的語句宣告為錯:while(false){} ;for(;false{};if(false){}都無法編譯
2。for(第一部分;的第一部分可以用來宣告或者賦值,但不能兩者都
3。byte b; switch  { case 200: // 200 not in range of byte,因為200超過b的範圍,將編譯錯誤
4。帶標籤的continue回達到標籤的位置,從新進入緊接在標籤後面的迴圈
5。帶標籤的break會中斷當前迴圈,並轉移到標籤標示的的迴圈的末尾
轉型和上溯(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預設轉成int
2.byte->short->int->long->float->double
char^
這是預設可以轉型的方向,反了必須要顯式cast! 特別注意:long->float是預設的,別看long64,float32,嘿嘿
還有就是看得出來,char和 byte,short之間無法互相預設轉換
3.float f=1/3; OK!float f=1.0/3.0;編譯出錯,因為1.0/3.0結果是double的,噢噢~,錯嘍!!
4.int i=1; byte b=i;錯!需要顯式cast.
final i=1; byte b=i;就ok! 我也不知道為什麼,final就可以.而且,據我實驗只有int和byte的關係這樣,其他不行.
5.int i[]; Object[] obj=i;錯! Object obj=i;對! 陣列只能轉成Object,而不能是Object[]
6.int i[]; Object[] obj;i=(int[])obj; 對! 物件可以透過顯式來轉成一個陣列.

I/O
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.File類的一些重要方法:iile();isDirectory();String[] list();exists();getAbsolutePath();getParent();
2.透過delete();mkdir();rename(File newname);可以操縱檔案,但是卻改變不了檔案的內容
2.1 File類無法改變當前目錄,除非重新建立一個File物件.
3.InputStreamReader(InputStream in,String encodiame);
OutputStreamReader(OutputStream in,String encodingName);
Encoding: 8859_1是Latin-1,包含ASCII
4.關閉close一個流,就自動呼叫了flush.
5.System.in,System.out,System.err,由JVM自動建立
6.RandomAccessFile(File file,String mode);mode有,r,rw

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958166/,如需轉載,請註明出處,否則將追究法律責任。

相關文章