กฎเกณฑ์ (Rule of Java)
Home  Contents KMArticlesMembersSponsorsAbout us

ปรับปรุง : 2556-06-20 (ปรับ template)
ขอบซ้ายขอบบน
กฎเกณฑ์ (Rule of Java)
    เตรียมสอนจาวา (rule.doc :: 19 สิงหาคม 2548)
  1. 49 Keywords : abstract assert boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while
  2. All keywords start with a lowercase letter.
  3. All six number types in Java are signed, so the can be positive or negative. (byte, short, int, long, float, double)
  4. Primitive data types : byte=1byte, short=2bytes, int=4byte, long=8bytes, float=4bytes, double=8bytes, char=2bytes, boolean
  5. Decimal Literals = 123
  6. Octal Literals = 011 or 077 (081 with compile error)
  7. Hexadecimal Literals = 0x001 or 0xcafe;
  8. Floating-Point Literals = 1.0f or 1.0F
  9. float f = 1.1 (Compile error)
  10. double d = 1.1 or 1.1f
  11. boolean b = true or false (else error)
  12. char c = 'e' or '\u0065'
  13. char use 16 bits ('\u065' and '\u00065' compile error)
  14. c = (char)70000; (ok)
  15. c = 80000 or -1 (compile error of 0 - 65535)
  16. int[] a; or int a[]; or int a[][]; or int[] a[];
  17. Object in the heap is reference variable
  18. Primitive in the stack

    บทที่ 1 : Language Fundamentals
  1. เขียน method main ให้ถูก ไม่งั้น ฟ้อง runtime แต่ args เปลี่ยนได้ และ public กับ static สลับหน้าหลังได้
    class x {
    public static void main(String args) { System.out.println("a"); }
    }
  2. main เรียกใช้ instance variable หรือ method ได้ แต่ instance variable, method ต้องประกาศเป็น static เพราะการเรียกตรงจาก main ต้องเรียก ตัวที่ประกาศเป็น static เท่านั้น
  3. keyword เหมือน reserved word (ผีตัวเดียวกัน)
  4. keyword เป็น identifiers, method, variable ไม่ได้
  5. keyword เป็น lowercase ทั้งหมด และที่เป็นแต่ไม่ใช้คือ goto และ const
  6. keyword มี 49 ตัวแบ่งเป็นดังนี้
    Access Modifiers: private, protected, public
    Class, Method, Variable Modifiers: abstract, class, extends, final, implements, interface, native, new, static, strictfp, synchronized, transient, volatile
    Flow Control: break, case, continue, default, do, else, for, if, instanceof, return, switch, while
    Error Handling: catch, finally, throw, throws, try, assert
    Package Control: import, package
    Primitives: boolean, char, byte, short, int, long, float, double
    Variable Keywords: super, this
    Void: void
    Unused: const, goto
  7. primitive มี 8 แต่มีแค่ 6 ตัวที่มีค่าเป็น positive และ negative
  8. ใช้ keyword เป็นชื่อ class สามารถ compile ได้ แต่ run ไม่ผ่านฟ้อง NoClassDefFoundError
  9. สำหรับ byte มี -128 ถึง 127
  10. char เป็น unsigned 16 bits ค่าอยู่ในช่วง 0 ถึง 65535
  11. ค่าที่เป็นไปได้ของ char คือ 65, 041 เป็นต้น
    class X{
    public static void main(String[] bc) {
    char a = 65; char b = 0101; char c = '\u0041'; char d = 0x0041; char e = 'A';
    System.out.println(""+a+b+c+d+e);
    }}
  12. แบบของตัวเลขโดยปริยาย(Default number) ถ้าเป็นจำนวนเต็มคือ int และมีทศนิยมคือ double ให้ระวังเรื่องขนาด
    wrong : f = 1.5;
    right : f = 1.5f;
    right : f = 1.5F;
  13. เมื่อ b เป็น byte โดย b = 1 + 1 จะไม่มีปัญหา แต่ b = 100 + 100; จะ compile error เรื่อง loss of precision
    wrong : b = 100 + 100;
    wrong : b = (byte)100 + 100;
    right : b = (byte)(100 + 100);
  14. String รับ null ได้ แต่รับ Null ไม่ได้ และ null ไม่ใช่ keyword
  15. String รับ char, 'a', '\u1111' หรือ (String)'a' ก็ไม่ได้
  16. การประกาศอาร์เรย์ ต้องจองมิติแรกไว้ก่อน
    wrong : int[] a[] = new int[][];
    right : int[] a[] = new int[2][];
    right : int a[][] = new int[2][];
    right : int[][] a = new int[2][2];
    right : int[][] a = new int[0][]; (ไม่พบปัญหา แต่คงพบตอน runtime)
  17. อาร์เรย์หลายมิติ คืออาร์เรย์ของอาร์เรย์ จะรับค่าได้เฉพาะ node สุดท้าย ถ้าเป็นมิติแรกก็ต้องรับมาเป็นอาร์เรย์
  18. อาร์เรย์หลายมิติ จะเปลี่ยนจำนวนมิติไม่ได้ แต่เปลี่ยนจำนวนสมาชิกในแต่ละมิติได้
    เช่น อาร์เรย์ 3 มิติ จะสามารถใช้ a[0] = new int [5][1];
    เช่น อาร์เรย์ 3 มิติ จะสามารถใช้ a[1] = new int [2][3];
    wrong : a[0] = 5;
    wrong : a[0][1] = 5;
    right : a[0][1][0] = 5;
    right : a[0][2] = a[0][1];
    บทที่ 2 : Declarations and Access Controls
  1. access modifiers หรือ access level : public, protected, private (Default ไม่ต้องใส่)
  2. class มี modifers ได้เพียง 2 แบบคือ public หรือ default จะใช้ protected หรือ private ไม่ได้
  3. class และ method สามารถใช้ strictfp
  4. method สามารถใช้ native, synchronized
  5. variable สามารถใช้ transient, volatile
  6. final ใช้ได้ทั้ง class, method และ variable
  7. abstract ใช้ได้กับ class และ method
  8. abstract เป็น private หรือ final ไม่ได้
  9. local variable มีได้เฉพาะ final
  10. constant variable ใน interface เป็นได้เฉพาะ public, static และ final เช่น ภาษี
  11. method ใน interface เป็นได้เฉพาะ public และ abstract
    บทที่ 3 : Operators and Assignments
  1. shift operator มี >> และ << เลื่อน bit แบบคิดเครื่องหมาย และ >>> ไม่คิดเครื่องหมาย ซ้ายเป็น 0 ตลอด
  2. ถ้าใช้ <<< จะ compile ไม่ผ่าน
  3. ผลของ 8 >> 1 กับ 8 >>> 1 เหมือนกันคือ 4 (เพราะ 0000-1000 เป็น 0000-0100)
  4. ถ้า -128 คือ 1000-0000
    เมื่อ -128 >> 1 จะได้ -64 คือ 1100-0000 เพราะเวลาคิดจะ complement ได้ 0011-1111 แล้ว + 1 เป็น 0100-0000 = 64
    เมื่อ -128 >> 2 จะได้ -32 คือ 1110-0000 เพราะเวลาคิดจะ complement ได้ 0001-1111 แล้ว + 1 เป็น 0010-0000 = 32
  5. ถ้า -6 คือ 1111-1010
    เมื่อ -6 << 1 จะได้ -12 คือ 1111-0100 เพราะเวลาคิดจะ complement ได้ 0000-1011 แล้ว + 1 เป็น 0000-1100 = 12
    เมื่อ -6 << 2 จะได้ -24 คือ 1110-1000 เพราะเวลาคิดจะ complement ได้ 0001-0111 แล้ว + 1 เป็น 0001-1000 = 24
  6. ถ้า -2 คือ 1111-1110
    เมื่อ -2 >>> 1 จะได้ -1 คือ 1111-1111 เพราะเวลาคิดจะ complement ได้ 0000-0000 แล้ว + 1 เป็น 0000-0001 = 1
  7. ถ้า -127 คือ 1000-0001
    เมื่อ -127 << 1 จะได้ 2 คือ 0000-0010 (เครื่องหมาย คือ bit ที่ 8 หายไป)
    เมื่อ -127 >> 1 จะได้ -64 คือ 1100-0000 เพราะเวลาคิดจะ complement ได้ 0011-1111 แล้ว + 1 เป็น 0100-0000 = 64
    เมื่อ -127 >>> 1 จะได้ -64 คือ 1100-0000 เพราะเวลาคิดจะ complement ได้ 0011-1111 แล้ว + 1 เป็น 0100-0000 = 64 (ไม่เห็น bit ที่ 8 เป็น 0 เลย)
  8. ถ้าใช้ << 33 จะเหมือน << 1 (เพราะ 33 % 32 เหลือ 1)
  9. การ casting ของ shift operator
    wrong : สำหรับ byte ถ้า x = x << 1;
    wrong : สำหรับ byte ถ้า x = (byte)x << 1;
    right : สำหรับ byte ถ้า x = (byte)(x << 1);
  10. + หมายถึง String Concatenation Operator ซึ่งใช้ได้ทั้งตัวเลข และตัวอักษร
  11. System.out.println(1 + 1 + "a" + "a" + 1 + 1); ผลลัพธ์คือ 2aa11
    บทที่ 4 : Flow Control, Exceptions and Assertions
  1. try เฉย ๆ ไม่ได้ ต้องอยู่กับ catch หรือ finally อย่างใดอย่างหนึ่ง
  2. สั่ง return ใน catch จะเลิกทำงานต่อเมื่อออกจาก finally
  3. finally จะทำงาน ไม่ว่าจะเข้า catch หรือไม่ เพราะทำเป็นสิ่งสุดท้ายก่อนออกจาก try
  4. switch รัยได้เฉพาะ byte, short, int และ char รวมถึงตัวแปรที่มี data type ข้างต้นที่เป็น final เท่านั้น
  5. ใน case ต้องมี break เพราะถ้าไม่มีก็จะเลื่อนไปทำ case อื่นโดยไม่ตรวจสอบเลย
  6. default ไม่จำเป็นต้องอยู่ท้ายสุด ขอให้มี case และ default อยู่กับ break ครบคู่เท่านั้น แต่ไม่ครบก็ compile และ run ผ่าน
  7. loop ไม่รู้จบเกิดขึ้นได้ แต่ Ctrl-Break ก็หยุดได้
  8. if (true); สามารถ compile แล้ว run ผ่านด้วย แต่ if (1); compile ไม่ผ่าน
  9. label ต้องใช้กับ loop เช่น for หรือ while ไม่งั้น compilation fail
  10. หลังปิด } ของ try ต้องเป็น catch หรือ finally ไม่งั้น compilation fail
  11. finally หรือ catch ของ try มีซ้ำกันไม่ได้
  12. สามารถ throw ใน try เพื่อแจ้ง error ได้เลย
    class x {
    public static void main(String args[]) {
    try{
    throw new RuntimeException();
    } catch (RuntimeException e) { System.out.println("catch");}
    }}
  13. การปิดแฟ้ม เช่น f.close() ต้องทำใน try เพราะทำใน finally จะเกิด compilation fail
  14. ถ้ามี throw exception ที่ไม่กำหนดใน catch จะเลิกงานหลังพบ error ใน try แล้วมาทำ finally จึงจะ หยุดทำงานเพราะ runtime
  15. assert ใช้ตรวจจับสภาวะไม่พึงประสงค์ ถ้าเป็นเท็จก็จะเป็น runtime พร้อมแสดงข้อความหลังเครื่องหมาย :
    class X {
    public static void main(String args[]) {
    int j = 1;
    assert(j > 1) : "show here";
    }}
    compile: javac -source 1.4 X.java
    run : java -ea X
    run : java -da X
  16. boolean x = false; if (x = true) { x = false; }
    บทที่ 5 : OO, Overloading, Overriding, Constructors, Return Types
  1. override มี name, argument list และ return type เหมือนกัน ส่วน modifier ต้องไม่จำกัดกว่าเดิม และไม่ throw exception มากไปกว่าเดิม
  2. final, constructor ไม่สามารถ override
  3. overload ต้องมี argument list ที่ต่างกัน ส่วน return type ต่างกันก็ได้
  4. มีชื่อเดียวกันซ้ำกันใน class เดียวกัน เรียกว่า overload จึงต้องมี argument ต่างกัน
  5. polymorphism เกี่ยวข้องกับ override ไม่ใช่ overload
  6. IS-A คือ inheritance จากปู่ สู่พ่อ
  7. HAS-A คือ การอ้างอิงซึ่งกันและกันธรรมดา ไม่ใช่การสืบทอด
  8. super และ this ต้องเขียนบรรทัดแรกของ constructor เท่านั้น
  9. Constructor ไม่มี return type ถ้ามีก็ไม่ใช่ constructor
  10. Constructor ไม่สามารถสืบทอด จึงไม่สามารถ Override
    บทที่ 6 : Java.lang, Math Class, Strings and Wrappers
  1. random() ให้ค่าแบบ double ตั้งแต่ 0.0 แต่ไม่ถึง 1.0
  2. xxxValue() ใช้แปลงค่าของ wrapper เป็น primitive
  3. parseXxx() รับ String แล้วเปลี่ยนเป็น primitive
  4. valueOf() รับ String แล้วเปลี่ยนเป็น wrapper
  5. i==1 ต่างกับ s.equals("aa")
  6. NaN (Not a Number) เช่น square root ของค่าติดลบ และ NaN จะไม่เท่ากับอะไรเลย แม้แต่ตัวเอง
  7. NaN is not equal to anything, not even itself.
  8. float ถูกหารด้วย 0 ได้ และค่าจะเป็น Infinity
  9. การสร้าง object แบบ wrapper
    Right: Boolean b = new Boolean(true);
    Right: Boolean b = new Boolean("true");
    Right: boolean b = new Boolean(true).booleanValue();
    บทที่ 7 : Objects and Collections
  1. .equals ใช้เปรียบเทียบทั้งประเภท และ value ต้อง ok ทั้ง 2 ตัว
  2. == ใช้เปรียบเทียบ เฉพาะ value ต่างประเภทกันก็เท่ากันได้ เช่น long และ int
  3. set ซ้ำไม่ได้ และไม่เรียง ใช้ Hashset()
  4. list ซ้ำได้ และมี index ใช้ LinkedList()
  5. map ใช้ key และ key ซ้ำไม่ได้
  6. List : ArrayList Vector LinkedList
  7. Map : HashMap Hashtable LinkedHashMap TreeMap
  8. Set : HashSet LinkedHashSet TreeSet
  9. TreeSet เรียงตามอักษร และไม่ซ้ำ
  10. Vector, HashTable เป็น synchronized methods
  11. ordered คือ เรียงตามการเข้า-ออก
  12. sorted คือ เรียงตามอักษร
  13. เรื่องความเท่ากัน ถ้า equals เท่ากัน hashCode ย่อมเท่ากัน
    Integer x = new Integer(5);
    Integer y = x;
    Integer z = new Integer(5);
    System.out.println(x.equals(y)); // true
    System.out.println(x==y); // true
    System.out.println(x.equals(z)); // true
    System.out.println(x.hashCode() == z.hashCode()); // true
  14. if equals() true,hashCode() == must true. if hashCode() == true, equals() might return true.
  15. java.lang.StringBuffer ไม่สามารถ override equals() และ hashCode()
  16. Request garbage collection with System.gc(); (Recommended) เป็นเพียงร้องขอ แต่อาจไม่ถูกปฏิบัติก็ได้
  17. Object must be considered eligible before they can be garbage collected.
  18. o = null; (ไม่เสมอไปที่ o อ้างอิงจะ eligible)
    บทที่ 8 : Inner Classes
  1. instantiating a static nested class ถูกเรียกด้วย oclass.iclass X = new oclass.iclass();
  2. การเรียก inner class จาก outer class
    oclass mo = new oclass();
    oclass.iclass io = mo.new iclass();
  3. Anonymous inner classes
    class p { public void p1() { System.out.println("p1"); }
    class pn {
    p px = new p() { public void p1() { System.out.println("p2"); } };
    }
  4. local variable ใน method ต้องเป็น final แล้ว inner class จึงจะเรียกใช้ได้
    บทที่ 9 : Threads
  1. thread อาจ blocked/waiting โดย wait(), sleep() หรือ join()
  2. Object class มี wait(), notify() และ notifyAll()
  3. sleep() จะ delay เป็น millisecond คือ 1000 เท่ากับ 1 วินาที
  4. wait(), notify() และ notifyAll() ต้องอยู่ใน synchronized
  5. wait(), sleep() ต้องอยู่ใน try catch
    แนะนำเว็บ (Web Guides)
  1. http://www.perlphpasp.com/class/sl-110.htm หลักสูตรที่ 1
  2. http://www.perlphpasp.com/class/sl-275.htm หลักสูตรที่ 2
  3. http://www.perlphpasp.com/class/javacert.php รายละเอียดโครงการ JavaPiwat
  4. http://maxlearn.eng.ku.ac.th/online_training/java/ (132 + 150 = 282 ชั่วโมง)
    1. ชุดวิชา JAVA web pro 35,000 บาท
    2. ชุดวิชา Advance Java 45,000 บาท (สำหรับ SCJP)
  5. http://www.thaiall.com/class แนะนำจาวาและตัวอย่างข้อสอบ
  6. http://www.thaiall.com/scjp ฝึกสอบ 10 ข้อ
  7. http://lampang.thcity.com/scjp ฝึกสอบ 10 ข้อ
  8. http://www.thaiall.com/quiz ฝึกสอบอย่างง่าย
"Imagination is more important than knowledge" - Albert Einstein
Home
Thaiabc.com
Thainame.net
Lampang.net
Nation university
PHP
MySQL
Visual basic.NET
TabletPC
Linux
Online quiz
Download
Search engine
Web ranking
Add website
Blog : Education
Blog : ACLA
Blog : Lampang
Facebook.com
Twitter.com
About us
My dream
Site map
Sponsor
http://goo.gl/72BPC