พื้นฐานโปรแกรมภาษาจาวา

72,374 views

Published on

Slide สำหรับบทที่ 2 ของ เอกสารการสอนการเขียนโปรแกรมภาษาจาวาเบื้องต้น http://www.thaijavadev.com

16 Comments
83 Likes
Statistics
Notes
No Downloads
Views
Total views
72,374
On SlideShare
0
From Embeds
0
Number of Embeds
2,198
Actions
Shares
0
Downloads
0
Comments
16
Likes
83
Embeds 0
No embeds

No notes for slide

พื้นฐานโปรแกรมภาษาจาวา

  1. 1. บทท 2 พนฐานโปรแกรมภาษาจาวา (Overview of Java Programming Language) ผศ..ธนศา เครอไวศยวรรณ คณะเทคโนโลย*สารสนเทศ สถาบ.นเทคโนโลย*พระจอมเกล3าเจ3าค4ณทหารลาดกระบ.ง
  2. 2. วตถประสงค  แนะนาสญลกษณและคาต9างๆทใช%ในภาษาจาวา  แนะนาข%อม(ลค)าคงทและชน*ดข%อม(ลแบบพนฐานทใช%ในภาษาจาวา  แนะน<าการประกาศและคาสงกาหนดค)าตวแปร  แนะนาตวดาเน*นการประเภทต9างๆ  อธ*บายการแปลงชนดข3อมAล  แนะน<าชนดข3อมAลแบบอ3างอง  แนะน<าค<าส.Bงท*Bใช3ในการร.บข3อมAลและค<าส.งท*Bใช3ในการแสดงผล B
  3. 3. ไวยากรณภาษาจาวา (Java Syntax)  ค<าหรอข3อความท*Bสามารถเข*ยนในโปรแกรมภาษาจาวาจะต3องเปIนค<าหรอ ข3อความในรAปแบบใดรAปแบบหนJBงของประเภทต9างๆเหล9าน*K • คอมเมLนตM (Comment) • Identifier • คยเว*รด (Keywords) • สญลกษณแยกคา (Separators) • ช)องว)าง (Whitespace) • ข%อม(ลค)าคงท (Literals)
  4. 4. คอมเม2นต  คอมเม2นตคอข%อความทแทรกอย()ในโปรแกรม  คอมเมLนตMเข*ยนไว3เพอ B • อธบายโปรแกรม • ให3ผA3อ9านเข3าใจโปรแกรมง9ายยBงขJKน • ช9วยท<าให3การแก3ไขและปร.บปร4งโปรแกรมเปIนไปได3ง9ายขJKน  ภาษาจาวาก<าหนดรAปแบบของการเข*ยนคอมเมLนตMไว3สามรAปแบบด.งน*K • // This is a comment คอมเม2นตสาหรบข%อความบรรทดเดยว • /* This is also a comment */ คอมเม2นตส<าหร.บข%อความต.งแต9หน3งบรรทดขJKนไป K • /** This is a comment for documentation */ คอมเมLนตMส<าหร.บข3อความท*Bตองการสร3างเปIนไฟลMเอกสารท*BเปIนไฟลMประเภท HTML 3
  5. 5. ต.วอย9างโปรแกรม /* This program is to show how to write comments */ public class CommentDemo { // Main method public static void main(String args[]) { /** This is a comment for documentation */ System.out.println("Document"); } }
  6. 6. Identifier  identifier คอชอทตงข3นในภาษาจาวา ซ3งอาจเป5นชอของคลาส ชอของ ตวแปร หรอชอของเมธอด  identifier จะต%องเป5นไปตามกฎการตงชอดงน • identifier จะต%องข3นต%นด%วยอกขระ A-Z, a-z, _ หรอ $ เท)านน • identifier ทประกอบไปด%วยตวอกขระมากกว)าหน3งตว ตวอกขระหลงจากตวแรกนนจะ ต%องเป5นตวอกขระข%างต%น หรอเป5นตวเลข 0 ถ3ง 9 เท)านน • identifier จะต%องไม)ตรงกบคยเว*รด  identifier ในภาษาจาวาเป5น case sensitive ท<าให3 myVariable แตกต9าง จาก MyVariable
  7. 7. ต.วอย9างของ Identifier ถAกต3อง ไม9ถAกต3อง • MyVariable • My Variable • _MyVariable • 9pns • $x • a+c • • Hello'World This_is_also_a_variable • public
  8. 8. หลกการตงชอทปฏ*บต*กนโดยทวไป  การต.KงชBอของคลาส • จะขJKนต3นด3วยต.วอ.กษรพมพMใหญ9แล3วตามด3วยต.วอ.กษรพมพMเลLกหรอต.วเลข โดยจะใช3 ต.วอ.กษรพมพMใหญ9เฉพาะอ.กษรน<าของแต9ละค<าท*BตามมาในชBอ • ควรเปIนค<านาม • ต.วอย9างเช9น Sample, HelloWorld, Student หรอ GraduateStudent เปIนต3น  การต.KงชBอของต.วแปร • จะขJKนต3นด3วยต.วอ.กษรพมพMเลLก โดยจะใช3ตวอ.กษรพมพMใหญ9เฉพาะอ.กษรน<าของ . แต9ละค<าท*ตามมาในชอ B B • ควรเปIนค<านามหรอเปIนชอส.Kนๆ B • ต.วอย9างเช9น x, i, name, id หรอ gpa เปIนต3น
  9. 9. หลกการตงชอทปฏ*บต*กนโดยทวไป  การต.KงชBอเมธอด • จะใช3หล.กการเด*ยวก.บการต.KงชBอต.วแปร แต9ควรเปIนค<ากรยา • ต.วอย9างเช9น getName, setName หรอ showDetails เปIนต3น  การต.KงชBอค9าคงท*B • จะใช3ต.วอ.กษรพมพMใหญ9ท.Kงหมด และจะแยกค<าโดยใช3เครBองหมาย _ (underscore) • ควรเปIนค<านาม • ต.วอย9างเช9น MIN_GPA เปIนต3น
  10. 10. คยเว*รด  คยเว*รดคอชBอท*ม*ความหมายพเศษในภาษาจาวา B  ค*ยMเวรMดท4กต.วจะเปIนต.วอ.กษรต.วพมพMเลLก  ค*ยMเวรMด goto และ const • เปIนค*ยเวรMดท*Bไม9ได3ตรงก.บค<าส.Bงใดในภาษาจาวา M  ค<าว9า true และ false • ไม)ได%เป5นคยเว*รดในภาษาจาวา แต)จะเป5นข%อม(ลค)าคงทชน*ดตรรกะ  ค<าว9า null • ไม)ได%เป5นคยเว*รดในภาษาจาวา แต)จะเป5นข%อม(ลค)าคงทของตวแปรทมชน*ดข%อม(ลเป5น ประเภทอ%างอ*ง
  11. 11. คยเว*รดท*ใช3ในภาษาจาวา B abstract continue for new switch assert default goto package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while
  12. 12. ณM สญลกษณ แยกคา ส.ญล.กษณMแยกค<า หน3าท*B ; เพBอระบ4การสKนส4ดของค<าส.งต9างๆ B () ส<าหร.บต9อท3ายเมธอดหรอค<าส.Bงเช9น if,for , ส<าหร.บแยกต.วแปรหรอค<าส.Bง . เพBอใช3ในการระบ4ค4ณล.กษณะหรอเมธอดของ ออปเจLค หรอใช3ในการระบ4แพคเกLจ {} เพBอระบ4บลLอกค<าส.Bง
  13. 13. ช)องว)าง  โปรแกรมภาษาจาวาสามารถท*Bจะม*ช9องว9างเพBอท*Bแยกค<า ประโยค หรอค<าส.ง B ต9างๆภายในโปรแกรมได3  รAปแบบของช9องว9างประกอบด3วย • ช9องว9าง (กดค*ยM Space บนค*ยMบอรMด) • แทLป (กดค*ยM Tab บนค*ยMบอรMด) • การขJKนบรรท.ดใหม9 (กดค*ยM Enter บนค*ยบอรMด) M
  14. 14. ข3อมAลค9าคงท*B  ข3อมAลค9าคงท*คอค<าท*Bใช3แสดงข3อมAลท*BเปIนต.วเลข ต.วอ.กขระ ข3อความ หรอค9า B ทางตรรกะ  ข3อมAลค9าคงท*แบ9งออกเปIน 5 ประเภทด.งน*K B • ตรรกะ (boolean) • ต.วอ.กขระ (character) • ต.วเลขจ<านวนเตLม (integral) • ต.วเลขทศนยม (floating point) • ข3อความ (string)
  15. 15. ชน*ดข%อม(ลแบบพนฐาน  ชนดข3อมAลในภาษาจาวาแบ9งเปIนสองประเภทใหญ9ๆคอ • ชนดข3อมAลแบบพKนฐาน (primitive data type) • ชนดข3อมAลแบบอ3างอง (reference data type)  ชน*ดข%อม(ลแบบพนฐานแบ9งออกเปIน 4 ประเภทด.งน*K • ชนดข%อม(ลตรรกะ (Logical) คอชน*ด boolean • ชนดข%อม(ลอกขระ (Textual) คอชน*ด char • ชนดข%อม(ลต.วเลขจานวนเต2ม (Integral) คอชน*ด byte,short,int และ long • ชนดข%อม(ลต.วเลขทศน*ยม (Floating point) คอชน*ด float และ double
  16. 16. ขนาดและช9วงค9าของชนดข3อมAลแบบพนฐาน K ชน*ดข3อมAล ขนาด (บต) ช)วงค)า boolean 1 true หรอ false char 16 'u0000' ถJง 'uFFFF' byte 8 -128 ถJง +127 short 16 -32,768 ถJง +32,767 int 32 -231 ถJง +231-1 long 64 -263 ถJง +263-1 float 32 -3.40E+38 ถJง +3.40E+38 double 64 -1.80E+308 ถJง +1.80E+308
  17. 17. ข%อม(ลชน*ดตรรกะ  ข%อม(ลชน*ดตรรกะมข%อม(ลค)าคงทอย() 2 ค)าคอ • true และ false  ตวอย)างเช9น คาสง • boolean flag = true; เป5นการกาหนดตวแปรท*Bชอว)า flag ให%ม*ชนดข3อมAลเปIน boolean โดยกาหนดให%มค)าเป5น true
  18. 18. ข%อม(ลชน*ดตวอกขระ  ข3อมAลชนดต.วอ.กขระใช3เพBอแสดงต.วอ.กขระหนJงต.ว B ซJBงถAกเกLบอยA9ในรAปของ มาตรฐาน Unicode ขนาด 16 บต  โดยจะม*ค9าต.งแต9 ‘u0000’ ถJง ‘uFFFF’ K  ต.วอย9างเช9น ค<าส.ง B • char letter = ‘u0041'; เปIนการประกาศต.วแปรท*Bชอว9า letter ให3เปIนข3อมAลชนด char B โดยม*ค9าเปIน u0041 ซJBงม*คาเท9าก.บต.วอ.กษร A 9  ต.วอย9างเช9น ค<าส.ง B • char letter = ‘A’; เปIนการประกาศต.วแปรท*Bชอว9า letter ให3เปIนข3อมAลชนด char B โดยม*ค9าเปIนต.วอ.กษร A เช9นเด*ยวก.บค<าส.Bงก9อนหน3าน*K
  19. 19. อกขระพเศษท*นยมใช3ทวไป B .B อ.กขระ Unicode ความหมาย 'b' 'u000B' Backspace 't' 'u0009' Tab 'n' 'u000A' New line 'r' 'u000D' Return '' 'u005C' Backslash ''' 'u0027' Single quote '"' 'u0022' Double quote
  20. 20. ข%อม(ลชน*ดต.วเลขจานวนเต2ม  มชน*ดข%อม(ลพนฐาน 4 ชน*ดคอ • byte, short, int, long  โดยท.วไปข%อม(ลชน*ดต.วเลขจ<านวนเตLมจะถAกก<าหนดให3ม*ชนดข3อมAลเปIน B int  ข%อม(ลค)าคงทสามารถเข*ยนได3สามแบบด.งน*K • เลขฐานสบคอการเข*ยนเลขจ<านวนเตLมท.วไป อาทเช9น -121 และ 75362 เปIนต3น B • เลขฐานแปดคอการเข*ยนเลขจ<านวนเตLมท*BขJKนต3นด3วยเลข 0 แล3วตามด3วยต.วเลข ต.งแต9 0 ถJง 7 อาทเช9น 016 (ม*ค9าเท9าก.บ 14 ในเลขฐานสบ) K • เลขฐานสบหกคอการเข*ยนเลขจ<านวนเตLมท*ขJKนต3นด3วย 0x หรอ 0X แล3วตามด3วย B ต.วเลขต.งแต9 0 ถJง 9 หรอต.วอ.กษร A ถJง F อาทเช9น 0xA2 (ม*ค9าเท9าก.บ 162 ใน K เลขฐานสบ)
  21. 21. ข%อม(ลชน*ดต.วเลขจานวนเต2ม  ข%อม(ลค)าคงทของเลขจานวนเต2มทเป5นชน*ด long จะมตวอกษร l หรอ L ต)อ ท%าย อาท*เช)น • 2l หมายถ3ง เลขฐานส*บทมค)าเป5น 2 ซ3งเป5นข%อม(ลชน*ด long • 077L หมายถ3ง เลขฐานแปดทเป5นข%อม(ลชน*ด long • 0xBAACL หมายถ3ง เลขฐานส*บหกทเป5นข%อม(ลชน*ด long
  22. 22. ข%อม(ลชน*ดตวเลขทศน*ยม (floating point)  ข%อม(ลชน*ดตวเลขทศน*ยมจะเป5นเลขทมเครองหมายจดทศน*ยม อาท*เช)น • 3.14 หรอ 3.0  มชน*ดข%อม(ลพนฐาน 2 ชน*ด คอ double และ float  โดยทวไปข%อม(ลชน*ดต.วเลขทศนยมจะถAกกาหนดให%ม*ชน*ดข%อม(ลเปIน double  สามารถเข*ยนในรAปแบบของเลขยกก<าล.งสบ (exponential form) ได3โดยใช3 ต.วอ.กษร E หรอ e ระบ4จ<านวนท*เปIนเลขยกก<าล.งสบ อาทเช9น B • 6.02E23 หรอ 2e-7
  23. 23. ข%อม(ลชน*ดตวเลขทศน*ยม  ข%อม(ลชนดต.วเลขทศน*ยมทม*ชน*ดข3อมAลเปIน float จะมตวอกษร F หรอ f ต)อท%าย อาท*เช)น • 2.718F หรอ 3.14f  ข%อม(ลชนดต.วเลขทศน*ยมทม*ชน*ดข3อมAลเปIน double จะมตวอกษร D หรอ d ต)อท%าย อาท*เช)น • 2.718D (โดยทวไปไม)จาเป5นต%องใส)ตวอกษร D เพราะข%อม(ลชนดต.วเลขทศน*ยมจะ กาหนดให%เป5น double อยA9แล3ว)
  24. 24. ตวแปร (Variable)  ต.วแปรคอข3อมAลท*Bสามารถเปล*Bยนแปลงค9าได3ในโปรแกรมโดยใช3ค<าส.ง B ก<าหนดค9า  ค<าส.Bงในการประกาศต.วแปรของภาษาจาวาม*รปแบบด.งน*K A dataType variableName[,variableName];  ต.วอย9างเช9น ค<าส.ง B int amount; double x,y; float price,wholeSalePrice;
  25. 25. คาสงกาหนดค)า (Assignment Statement)  ค<าส.Bงก<าหนดค9าจะเปIนค<าส.Bงท*Bใช3ในการเปล*Bยนแปลงค9าของต.วแปร  ค<าส.Bงก<าหนดค9า (assignment statement) ซJBงม*รปแบบด.งน*K A variableName = expression;  ต.วอย9างเช9น x = 1; radius = 3.14; c = ‘a’; y = x+4*3; amount = 121+14;
  26. 26. ค<าส.งประกาศและก<าหนดค9าต.วแปร B  เราสามารถท*Bจะประกาศและก<าหนดค9าเรBมต3นของต.วแปรภายในค<าส.ง B เด*ยวก.น โดยม*รAปแบบค<าส.Bงด.งน*K dataType variableName = expression [,variableName = expression];  ต.วอย9างเช9น int amount = 123; float price = 12.0f; double x = 4.0, y = 2.5;
  27. 27. ตวอย)างโปรแกรม public class VariableAssignDemo { public static void main(String args[]) { int x,y; boolean b1; float z = 3.414f; /* The program will not be compiled successfully if a character f is missing */ double w; x = 5; y = 4; b1 = (x > y); w = x * 3.2; System.out.println("x = " + x + " y = " + y); System.out.println("b1 = " + b1); System.out.println("z = " + z + " w = " + w); } }
  28. 28. ค9าคงท*B  การประกาศค9าคงท*Bในภาษาจาวาท<าได3โดยการใส9ค*ยMเวรMด final หน3าค<าส.ง B ประกาศชBชB อ โดยม*รปแบบด.งน*K A final dataType CONSTANT_NAME = expression;  ต.วอย9างเช9น ค<าส.ง B final int MINIMUM = 4; final double MIN_GPA = 2.00;
  29. 29. ตวอย)างโปรแกรม public class ConstantDemo { public static void main(String args[]) { final int MAXIMUM = 10; final double MIN_GPA; System.out.println("Maximum is " + MAXIMUM); MIN_GPA = 2.00; System.out.println("Minimum GPA is " + MIN_GPA); // MIN_GPA = 3.00; //illegal } }
  30. 30. ขอบเขตของต.วแปรและค9าคงท*B  ต.วแปรและค9าคงท*BซงประกาศขJKนจะสามารถใช3งานภายในบลLอกค<าส.ง ({ }) ท*B JB B ประกาศเท9าน.น K  ภาษาจาวาแบ9งต.วแปรและค9าคงท*BเปIนสองประเภทคอ • ต.วแปรหรอค9าคงท*ทเปIนค4ณล.กษณะของออปเจLคหรอค4ณล.กษณะของคลาส B *B • ต.วแปรหรอค9าคงท*ทอยA9ในบลLอกของเมธอดท*Bเร*ยกว9าค9าคงท*Bภายใน (local constant) B *B หรอต.วแปรภายใน (local variable)
  31. 31. ค9าเรBมต3นอ.ตโนม.ตของต.วแปร  ต.วแปรท*BเปIนค4ณล.กษณะของออปเจLคหรอค4ณล.กษณะของคลาสจะถAก ก<าหนดค9าเรBมต3นให3โดยอ.ตโนม.ต ชน*ดข3อมAล ค9าเรBมต3น boolean false byte 0 short 0 int 0 long 0L float 0.0f double 0.0 char 'u0000' คลาส null
  32. 32. ตวอย)างโปรแกรม public class VariableScopeDemo { public int i; // object variable public void method1() { int j = 4; // local variable int k = 2; // another local variable } public void method2() { int j = 0; // local variable System.out.println(i); // calling an object variable i // System.out.println(k); // illegal } }
  33. 33. ตวดาเน*นการ (Operator)  นพจนMภาษาจาวาอาจจะประกอบด3วยข3อมAลค9าคงท*B ต.วแปร หรอค9าคงท*B ต9างๆ โดยจะม*ต.วด<าเนนการต9างๆไว3เพอค<านวณหาผลล.พธMทเปIนชนด B *B ข3อมAลต9างๆ  ต.วด<าเนนการในภาษาจาวาแบ9งออกเปIน 4 ประเภทคอ • ตวดาเน*นการทางคณ*ตศาสตร (Arithmetic Operator) • ตวดาเน*นการแบบสมพนธ (Relational Operator) • ตวดาเน*นการทางตรรกศาสตร (Logical Operator) • ตวดาเน*นการแบบบ*ต (Bitwise Operator)
  34. 34. ตวดาเน*นการทางคณ*ตศาสตร เครองหมาย ความหมาย ต.วอย9างนพจนM + บวก a+b - ลบ a-b * คAณ a*b / หาร a/b % เศษจากการหาร a%b
  35. 35. ตวดาเน*นการทางคณ*ตศาสตรแบบย)อ เครองหมาย ตวอย)าง ความหมาย += x+=3 x = x+3 -= x-=3 x = x-3 *= x*=3 x = x*3 /= x/=3 x = x/3 %= x%=3 x = x%3
  36. 36. ตวดาเน*นการเพ*มค)าและลดค)า  ตวดาเน*นการเพอบวกค)าทละ 1 หรอลดค)าทละ 1  เครองหมาย ++ หรอ --  ตวอย)าง • x++ คอ x = x+1 • ++x คอ x = x+1 • x-- คอ x = x-1 • --x คอ x = x-1  ถ%าวางเครองหมายไว%ข%างหน%า โปรแกรมจะคานวณค)าก)อนแล%วจ3งทาคาสง  ถ%าวางเครองหมายไว%ข%างหลง โปรแกรมจะคานวณค)าหลงจากทาคาสง
  37. 37. ตวอย)างโปรแกรม public class IncrementDemo { public static void main(String args[]) { int x; int y; x = 5; y = x++; System.out.println("x = "+x+" y = "+y); y = ++x; System.out.println("x = "+x+" y = "+y); } } x = 6 y = 5 ผลล.พธMทได3จากการร.นโปรแกรม *B x = 7 y = 7
  38. 38. ตวดาเน*นการแบบส.มพ.นธM เครองหมาย ความหมาย ตวอย)าง ผลล.พธM < น3อยกว9า 3<4 true <= น3อยกว9าหรอเท9าก.บ 3<=4 true > มากกว9า 3>4 false >= มากกว9าหรอเท9าก.บ 3>=4 false == เท9าก.บ 3==4 false != ไม9เท9าก.บ 3!=4 true
  39. 39. ตวอย)างโปรแกรม public class BooleanDemo { public static void main(String args[]) { int x = 5; int y = 4; boolean b1; b1 = (x!=y); System.out.println("x not equal to y is "+b1); System.out.println("y less than 0 is "+(y<0)); } }
  40. 40. ตวดาเน*นการทางตรรกศาสตรM เครBองหมาย ความหมาย ! กล.บค9าทางตรรกะ && หรอ & AND ค9าทางตรรกะ || หรอ | OR ค9าทางตรรกะ ^ Exclusive-OR ค9าทางตรรกะ
  41. 41. ตวอย)างการใช3ตวดาเน*นการทางตรรกศาสตรM น*พจน ผลลพธ (7>6) && (2<1) false (7>6) || (2<1) true !(7>6) false
  42. 42. ผลล.พธMของการกล.บค9าทางตรรกะ op !op true false false true
  43. 43. ผลล.พธMของการ AND ค9าทางตรรกะ op1 op2 op1 && op2 true true true true false false false true false false false false
  44. 44. ผลล.พธMของการ OR ค9าทางตรรกะ op1 op2 op1 || op2 true true true true false true false true true false false false
  45. 45. ผลล.พธMของ Exculsive ORค9าทางตรรกะ op1 op2 op1 ^ op2 true true false true false true false true true false false false
  46. 46. ตวดาเน*นการแบบบ*ต  ตวดาเน*นการแบบบ*ตของเลขจานวนเต2ม ตวดาเน*นการ ความหมาย ~ Complement & AND | OR ^ XOR  ตวดาเน*นการแบบ shift บ*ต ตวดาเน*นการ ความหมาย >> signed right shift >>> unsigned right shift << left shift
  47. 47. ลาดบความสาคญของตวดาเน*นการ ลาดบท เร*ยงจาก ตวดาเน*นการ 1 ขวาไปซ3าย (R to L) ++, --, +, -, ~, ! (data type) 2 ซ3ายไปขวา (L to R) *, /, % 3 ซ3ายไปขวา (L to R) +, - 4 ซ3ายไปขวา (L to R) <<, >>, >>> 5 ซ3ายไปขวา (L to R) <, >, <=, >=, instanceof 6 ซ3ายไปขวา (L to R) ==, != 7 ซ3ายไปขวา (L to R) &
  48. 48. ลาดบความสาคญของตวดาเน*นการ ลาดบท เร*ยงจาก ตวดาเน*นการ 8 ซ3ายไปขวา (L to R) ^ 9 ซ3ายไปขวา (L to R) | 10 ซ3ายไปขวา (L to R) && 11 ซ3ายไปขวา (L to R) || 12 ขวาไปซ3าย (R to L) ?: =, +=, -=, *=, /=, %=, <<=, 13 ขวาไปซ3าย (R to L) >>=, >>>=, &=, ^=, |=
  49. 49. ต.วอย9าง ค<าส.Bง x = 2+3*4-(7+2); ค<านวณหาผลล.พธMตามล<าด.บด.งน*K  ค<านวณหาผลล.พธMค9า 7+2 ท<าให3ได3 x = 2+3*4-9  ค<านวณหาผลล.พธMค9า 3*4 ท<าให3ได3 x = 2+12-9  ค<านวณหาผลล.พธMค9า 2+12 ท<าให3ได3 x = 14-9  ค<านวณหาผลล.พธMค9า 14-9 ท<าให3ได3 x=5
  50. 50. การแปลงชนดข3อมAล  ในกรณ*ทต.วถAกด<าเนนการท.Kงสองม*ชนดข3อมAลท*Bตางก.น ภาษาจาวาจะม*หล.ก *B 9 การแปลงชนดข3อมAล (type conversion) ด.งน*K • ถ3าต.วถAกด<าเนนการต.วหนJBงม*ชนดข3อมAลเปIน double ต.วถAกด<าเนนการอ*กต.วหนJง B จะถAกแปลงให3ม*ชนดข3อมAลเปIน double โดยอ.ตโนม.ต • ถ3าต.วถAกด<าเนนการท.งสองไม9ได3ม*ชนดข3อมAลเปIน double แต9ม*ต.วถAกด<าเนนการต.ว K หนJBงท*ม*ชนดข3อมAลเปIน float ต.วถAกด<าเนนการอ*กต.วหนJBงจะถAกแปลงให3ม*ชนด B ข3อมAลเปIน float โดยอ.ตโนม.ต • ถ3าต.วถAกด<าเนนการท.งสองไม9ได3ม*ชนดข3อมAลเปIน double หรอ float แต9ม*ตวถAก K . ด<าเนนการต.วหนJBงท*Bม*ชนดข3อมAลเปIน long ต.วถAกด<าเนนการอ*กต.วหนJBงจะถAกแปลง ให3ม*ชนดข3อมAลเปIน long โดยอ.ตโนม.ต
  51. 51. การแปลงชนดข3อมAล  กรณ*อBนๆ ต.วถAกด<าเนนการท.Kงสองจะแปลงให3ม*ชนดข3อมAลเปIน int  ตวอย)าง byte b1, b2, b3; b1 = 2; b2 = 4; b3 = b1+b2; //illegal • คาสงกาหนดค)า b3 ไม)ถ(กต%องเนองจาก b1+b2 จะให%ค)าข%อม(ลท*ม*ชน*ดข3อมAลเป5น int B
  52. 52. การแปลงชนดข3อมAล  การแปลงชนดข3อมAลม*สองรAปแบบคอ • การแปลงข3อมAลท*กว3างขJKน (widening conversion) คอการแปลงจากชนดข3อมAลท*ม* B B ขนาดเลLกกว9าไปเปIนชนดข3อมAลท*Bม*ขนาดใหญ9กว9า • การแปลงข3อมAลท*แคบลง (narrowing conversion) คอการแปลงจากชนดข3อมAลท*ม* B B ขนาดใหญ9กว9าไปเปIนชนดข3อมAลท*ม*ขนาดเลLกลง ซJBงอาจม*ผลให3เส*ยความละเอ*ยด B ของข3อมAลบางส9วนไป
  53. 53. หล.กการการแปลงชนดข3อมAล  ชนดข3อมAลต.วเลขจ<านวนเตLมสามารถแปลงให3เปIนชนดข3อมAลต.วเลขทศนยม ได3  ชนดข3อมAล float สามารถแปลงให3เปIนชนดข3อมAล double ได3  ชนดข3อมAลต.วเลขจ<านวนเตLมม*ขนาดเร*ยงก.นจากน3อยไปมากด.งน*K byte → short → int → long  ชนดข3อมAล char สามารถแปลงให3เปIนชนดข3อมAล int ได3  ชนดข3อมAล boolean จะไม9ม*ความส.มพ.นธMก.บชนดข3อมAลแบบพKนฐานอBนๆ
  54. 54. ตวอย)างของการแปลงชนดข3อมAล ภาษาจาวาจะปรบชน*ดข%อม(ลให%อตโนมต* ในกรณต)อไปน  กาหนดค)าชน*ดข%อม(ลทเล2กกว)าให%กบตวแปรชน*ดข%อม(ลทใหญ)กว)าอาท*เช)น int i = 4; long l = i; น*พจน i จะถ(กปรบชนดข3อมAลจาก int ให%เป5น long โดยอ.ตโนม.ต  กาหนดค)าชน*ดข%อม(ลจานวนเต2มให%กบจานวนเลขทศน*ยมอาท*เช)น • double x = 3; น*พจน 3 จะถ(กปรบชน*ดข%อม(ลจาก int ให%เป5น double โดยอ.ตโนม.ต  ตวอย)างทไม)ถ(กต%อง int amount = 123L; //illegal float f = 4.0; //illegal
  55. 55. ตวอย)างโปรแกรม public class PromotionDemo { public static void main(String args[]) { int i; long l; float fl = 4.2f; i = 4; l = i; fl = i; double x = fl; fl = 4.2; //illegal } }
  56. 56. Typecasting  เราสามารถแปลงชน*ดข%อม(ลขนาดใหญ) ให%เป5นชน*ดข%อม(ลทเล2กกว)าได%โดยว*ธ การทเรยกว)า typecasting  ร(ปแบบคาสง (target_type)expression;  จะทาให%โปรแกรมสามารถคอมไพลผ)านได%  บางกรณอาจทาให%ข%อม(ลบางส)วนสAญหายไป
  57. 57. ต.วอย9างของ Typecasting  ตวอย)าง int amount = (int) 3.0; • แปลงน*พจนทมค)า 3.0 ข%อม(ลชน*ด double ให%เป5นชน*ด int  ตวอย)างทมการตดข%อม(ลออก int x; double y = 1.25; x = (int) y;
  58. 58. ตวอย)างโปรแกรม public class TypecastingDemo { public static void main(String args[]) { byte b1 = 4; byte b2 = 3; byte b3; b3 = (byte)(b1+b2); float fl; fl = (float)3.2; } }
  59. 59. ชนดข3อมAลแบบอ3างอง  ชนดข3อมAลแบบอ3างองคอออปเจLคในภาษาจาวา โดยแบ9งออกเปIนสองแบบ คอ • ชนดข3อมAลท*BเปIนคลาส • ชนดข3อมAลท*BเปIนอะเรยM  ชนดข3อมAลแบบอ3างองจะม*วธ*การเกLบข3อมAลในหน9วยความจ<าท*Bแตกต9างจาก การเกLบข3อมAลของชนดข3อมAลแบบพKนฐานอาทเช9น ค<าส.Bง int x = 7; String s = new String("Thana");
  60. 60. การประกาศต.วแปรและจองเนอท*Bในหน9วยความจ<า K  อาทเช9นค<าส.Bง int x; Date d; d = new Date(16,8,2002);
  61. 61. คลาส String  String เปIนคลาสท*Bก<าหนดไว3ใน Java API ต.วแปรท*ม*ชนดข3อมAลเปIน B String กLคอออปเจLคชนดหนJง ซJง String ม*ขอแตกต9างจากออปเจLค B B 3 ท.วๆไปด.งน*K B • String เปIนออปเจLคท*Bม*ค9าคงท*ข3อมAลซJBงกLคอข3อความใดๆ ท*BอยAภายในเครBองหมาย B 9 double quote (“ ”) ต.วอย9างเช9น “This is a java course” • String เปIนออปเจLคท*Bสามารถสร3างหรอก<าหนดค9าได3โดยไม9จ<าเปIนต3องใช3ค<าส.Bง new ต.วอย9างเช9น เราสามารถใช3ค<าส.ง B String s = “Thana”; • โดยไม9จ<าเปIนท*Bจะต3องใช3ค<าส.ง B String s = new String(“Thana”);
  62. 62. ต.วอย9างโปรแกรม public class StringDemo { public static void main(Stirng args[]){ String s1 = "Thana"; String s2 = "Thana"; String s3 = new String("Thana"); } }
  63. 63. ค<าอธบายโปรแกรม  กรณ*ท*Bไม9ใช3ค<าส.ง new ภาษาจาวาจะพจารณาจาก String Pool ว9าม*ข3อความ B เดมอยAหรอไม9 9  กรณ*ท*Bใช3ค<าส.ง new ภาษาจาวาจะสร3างข3อความใหม9และจองเนอท*Bในหน9วย B K ความจ<าเสมอ
  64. 64. String เป5นออปเจ2คทเปลยนค)าไม)ได%  ต.วอย9างเช9น ค<าส.ง B String s1; s1 = “Thanachart"; s1 = “Somchai";
  65. 65. ต.วด<าเนนการท*ใช3กบข3อมAลชนด String B .  String เปIนออปเจLคท*ม*ตวด<าเนนการท*ใช3ในการเชBอมข3อความสอง B . B ข3อความเข3าด3วยก.น โดยใช3เครองหมาย + อาทเช9น B String s1 = “Hello” + “ World”;  ต.วด<าเนนการในการเชBอมข3อความสามารถใช3เชBอมข3อมAลชนด String ก.บ ต.วถAกด<าเนนการท*BเปIนชนดข3อมAลอBนๆ ภาษาจาวาจะแปลงชนดข3อมAลด.ง กล9าวให3เปIนชนด String โดยอ.ตโนม.ตอาทเช9น ค<าส.Bง String s1 = “This"; String s2 = s1 + “ is a test ”; String s3 = s1+4;
  66. 66. ค<าส.งอนพ4ตและเอาทMพ4ต B  ออปเจLค System.in เปIนออปเจLคท*Bม*เมธอดส<าหร.บการอ9านข3อมAลทาง อ4ปกรณMอนพ4ตมาตรฐาน ซJงโดยท.BวไปกLคอค*ยบอรMด B M  ออปเจLค System.out เปIนออปเจLคท*Bม*เมธอดส<าหร.บการแสดงข3อมAลออก ทางอ4ปกรณMเอาทMพ4ตมาตรฐานซJBงโดยท.Bวไปคอจอภาพ  ออปเจLค System.err เปIนออปเจLคท*Bม*เมธอดส<าหร.บการแสดงข3อผด พลาด (error) ออกทางอ4ปกรณMท*Bใช3ในการแสดงข3อผดพลาด ซJBงโดยท.วไปจะ B ก<าหนดเปIนจอภาพ
  67. 67. System.out.println  ออปเจLค System.out หมายถJงออปเจLคท*ชBอ out ซJงเปIนค4ณล.กษณะของ B B คลาสท*BชBอ System  ออปเจLคท*ชBอ out B เปIนออปเจLคของคลาส PrintStream ท*Bม*เมธอดท*B นยมใช3ท.Bวไปคอ print(String s) และ println(String s)
  68. 68. ต.วอย9างโปรแกรม public class PrintDemo { public static void main(String args[]) { int x = 3, y = 4, z = 5; System.out.print("x = "+x); System.out.println(" y = "+y); System.out.println("z = "+z); } } x = 3 y = 4 ผลล.พธMท*Bได3จากการร.นโปรแกรม z = 5
  69. 69. การร.บข3อมAลเข3ามาทาง Command Line  เมธอดท*BชBอ main() จะม* argument เปIน String args[] ซJBงสามารถท จะรบ argument ทส)งผ)านมาจาก command line ได%  ต.วอย9างเช9น public class Sample { public static void main(String args[]) { System.out.println(“My name is ” + args[0] + “ and I am a ” + args[1]); } }  ถ%าป:อนอนพ4ตตรง command line เป5น java Sample Tommy boy  จะได%ผลล.พธMคอ My name is Tommy and I am a boy
  70. 70. สร4ปเนอหาของบท K  คอมเมLนตM คอข3อความท*BแทรกอยA9ภายในโปรแกรมซJBงคอมไพเลอรMจะไม9แปล ข3อความน*ให3เปIนส9วนหนJงของโปรแกรม K B  identifier คอชBอท*ตงขJนในภาษาจาวา ซJงอาจเปIนชBอของคลาส B .K K B ชBอของ ต.วแปร ชBอของเมธอด หรอชBอของค9าคงท*B ซJงจะต3องเปIนไปตามกฎการต.ง B K ชBอ  การต.KงชBอในภาษาจาวา • ส<าหร.บคลาส นยมขJKนต3นด3วยต.วอ.กษรพมพMใหญ9 • ส<าหร.บเมธอดและต.วแปร นยมขJKนต3นด3วยต.วอ.กษรพมพMเลLก • ถ3าชBอท*ตงขJKนม*มากกว9า 1 ค<า นยมขJKนต3นค<าใหม9ด3วยต.วอ.กษรพมพMใหญ9 B .K • ต3องไม9ตรงก.บค*ยเวรMด M
  71. 71. สร4ปเนอหาของบท K  ค*ยMเวรMดคอชBอท*Bม*ความหมายพเศษในภาษาจาวา คอมไพเลอรMของภาษา จาวาจะเข3าใจความหมายและค<าส.งท*Bจะต3องด<าเนนการส<าหร.บค*ยเวรMดแต9ละ B M ต.ว  ข3อมAลค9าคงท*คอค<าท*Bใช3แสดงข3อมAลท*BเปIนต.วเลข ต.วอ.กขระ ข3อความ หรอค9า B ทางตรรกะ  ชนดข3อมAลในภาษาจาวาแบ9งเปIนสองประเภทคอ ชนดข3อมAลแบบพKนฐาน และชนดข3อมAลแบบอ3างอง  ชนดข3อมAลแบบพKนฐานท*Bใช3ในภาษาจาวาม*ท.Kงหมด 8 ชนดคอ char,byte, short,int,long,float,double และ boolean
  72. 72. สร4ปเนอหาของบท K  ข3อมAลท*BเกLบอยA9ในโปรแกรมแบ9งเปIนสองประเภทคอต.วแปรและค9าคงท*B ซJBง ต.วแปรคอข3อมAลท*Bสามารถเปล*Bยนแปลงค9าได3ในโปรแกรมโดยใช3ค<าส.ง B ก<าหนดค9า ส9วนค9าคงท*Bคอข3อมAลท*Bก<าหนดค9าได3เพ*ยงคร.งเด*ยวและไม9 K สามารถเปล*Bยนแปลงค9าได3ในโปรแกรม  ต.วแปรท*Bม*การประกาศชนดข3อมAลแล3วสามารถท*Bจะก<าหนดหรอเปล*Bยนแปลง ค9าได3โดยใช3ค<าส.งก<าหนดค9า B  การประกาศค9าคงท*Bในภาษาจาวาท<าได3โดยการใส9ค*ยMเวรMด final หน3าค<าส.ง B ประกาศชBอ  ค9าคงท*หรอต.วแปรท*BอยA9ภายในบลLอกของเมธอด จะม*ขอบเขตการใช3งานอยA9 B ภายในบลLอกเท9าน.น K
  73. 73. สร4ปเนอหาของบท K  ต.วด<าเนนการท*Bใช3ในภาษาจาวาม*ทงหมด 4 แบบคอ .K • ต.วด<าเนนการทางคณตศาสตรM : +, -, *, /, %, +=, -=, *=, /=, %=, ++ และ -- • ต.วด<าเนนการทางตรรกศาสตรM : <, <=, >, >=, == และ != • ต.วด<าเนนการแบบส.มพ.นธM : !, &&, &, || และ | • ต.วด<าเนนการแบบบต : ~, &, |, ^, >>, >>> และ <<  กรณ*ท*BนพจนMใดๆม*ต.วด<าเนนการมากกว9าหนJงต.ว ภาษาจาวาจะจ.ดล<าด.บ B ความส<าค.ญของต.วด<าเนนการ เพอค<านวณหาผลล.พธMตามล<าด.บความ B ส<าค.ญของต.วด<าเนนการ
  74. 74. สร4ปเนอหาของบท K  ความแตกต9างระหว9างการแปลงข3อมAลโดยอ.ตโนม.ตและ Typecasting • การแปลงข3อมAลโดยอ.ตโนม.ตคอ การท*Bชนดข3อมAลท*Bม*ขนาดเลLกกว9าถAกแปลงให3เปIน ชนดข3อมAลท*Bม*ขนาดใหญ9กว9าโดยอ.ตโนม.ต • Typecasting คอการท*Bจะต3องระบ4ชนดข3อมAลท*Bม*ขนาดใหญ9กว9าให3ก.บนพจนMทม*ชนด *B ข3อมAลขนาดเลLกกว9า  ชนดข3อมAลแบบอ3างองซJBงกLคอออปเจLคในภาษาจาวา โดยแบ9งออกเปIนสอง แบบคอชนดข3อมAลท*BเปIนคลาส และชนดข3อมAลท*BเปIนอะเรยM  ข3อมAลท*BเกLบในหน9วยความจ<าของชนดข3อมAลแบบอ3างอง จะเปIนต<าแหน9ง อ3างองท*BเกLบข3อมAลในหน9วยความจ<า แต9ในกรณ*ของชนดข3อมAลแบบพนฐาน K ข3อมAลท*BเกLบในหน9วยความจ<าจะเปIนค9าของข3อมAลจรงๆ
  75. 75. สร4ปเนอหาของบท K  String เปIนชนดข3อมAลแบบคลาส ไม9ใช9ชนดข3อมAลแบบพนฐาน K  ค<าส.Bงท*Bใช3ในการแสดงผลล.พธMของข3อมAลในภาษาจาวาคอค<าส.ง B System.out.println()  เมธอดท*BชBอ main() จะม* argument เปIน String args[] ซJBงสามารถท จะรบ argument ทส)งผ)านมาจาก command line ได%
  76. 76. แบบฝ<กหด  แบบฝ’กห.ดท*B 1 การประกาศและก<าหนดค9าเรBมต3นของต.วแปรและค9าคงท*B  แบบฝ’กห.ดท*B 2 การใช3ค<าส.Bงก<าหนดค9าและนพจนM • จงเข*ยนโปรแกรมภาษาจาวาเพBอค<านวณหาค9ารากท*Bสองของสมการ ax2 + bx + c = 0 แล3วพมพMผลล.พธMออกทางจอภาพ  แบบฝ’กห.ดท*B 3 การเข*ยนโปรแกรมเพอร.บค9าอนพ4ตผ9านทาง command line B • จงเข*ยนโปรแกรมภาษาจาวาเพBอค<านวณหาค9าพKนท*ของวงกลม โดยม*การร.บค9าร.ศม* B (radius) เข3ามา แล3วพมพMผลล.พธMทได3ออกทางจอภาพ *B

×