ภาษาจาวา
ความรู้เกี่ยวกับภาษาจาวา
ภาษาจาวาถือกำเนิดขึ้นจากความต้องการที่จะสร้างคอมไพเลอร์ภาษาคอมพิวเตอร์ซึ่งเป็นอิสระจาก Hardware รุ่นใดรุ่นหนึ่ง หรือยี่ห้อใดยี่ห้อหนึ่ง โดยจุดประสงค์แรกนั้นต้องการที่จะใช้เขียนโปรแกรม เพื่อควบคุมอุปกรณ์เครื่องใช้ไฟฟ้า และอุปกรณ์อิเล็กทรอนิคส์ต่างๆ เช่น เตาอบ, เครื่องซักผ้า, โทรศัพท์, มือถือ, Set Top Box ของเคเบิ้ลทีวี ฯลฯ ด้วยเหตุนี้ โดยการนำของ James Gosling หัวหน้า กลุ่ม Green Group แห่งบริษัท Sun Microsystems จึงได้เริ่มโครงการพัฒนาภาษาดังกล่าวอย่างจริงจัง ในปี 1991 โดยขั้นแรกชื่อว่า ภาษา Oak แต่หลังจากที่ไม่ประสบความสำเร็จในการนำไปใช้งานตามความคิดริเริ่มดังกล่าว ประกอบกับบริษัท Sun Microsystems เริ่มมองเห็นความจำเป็นที่ต้องมีภาษาที่สร้างโปรแกรมบนเครื่องหนึ่งแต่สามารถนำไปใช้งานบนเครื่องใดๆ ก็ได้ (Write Once Run Anywhere) บริษัทจึงได้นำเอาภาษา Oak มาพัฒนาต่อให้เป็นภาษาแบบ Object Oriented จนได้ภาษา จาวาขึ้นในปี 1995 และปัจจุบันได้มีหลายบริษัทพัฒนาภาษา จาวาขึ้นมาเป็นผลิตภัณฑ์ของตัวเองทั้ง Visual J++ (Microsoft) Visual Cafe (Sysmantec) และ Jbuilder (Borland) เป็นต้น
จาวาเป็นภาษา Object Oriented
ในอดีตที่ผ่านมาหลายภาษาได้อ้างตัวว่าเป็น Object Oriented เช่น C++ แต่แท้จริงแล้วยังไม่มีภาระใดที่ทำให้ผู้ใช้ได้รับประโยชน์จากคุณสมบัติที่เป็น Object Oriented ของภาษาได้อย่างแท้จริง โดยเฉพาะอย่างยิ่งคุณสมบัติความเข้ากันได้ หรือทำงานได้ทุก Plateform ของภาษาแบบ Object Oriented ทั้งนี้เพราะแต่ละภาษามี Object Model ที่ไม่เอื้ออำนวยให้เกิดประสิทธิภาพสูงสุดดังกล่าวได้ แต่ภาษาจาวาได้ถูกออกแบบให้เป็นภาษาแบบ Object Oriented โดยแท้จริงโดยทุกส่วนของจาวา จะถือเป็น Object ทั้งหมด ไม่ว่า class, function หรือว่า array ล้วนแล้วแต่เป็นออบเจ็กต์ทั้งสิ้น จะมียกเว้นอยู่อย่างเดียวคือชนิดของข้อมูล ซึ่งถือเป็นออบเจ็กต์โดยรายละเอียดของชนิดของข้อมูล
ภาษา จาวาไม่ยึดติดกับ Platform (Platform Independent)
source code จาวาจะถูกคอมไพล์เป็น .class หรือชุดคำสัง JVM(Java Vitual Machine) ก่อน เมื่อมีการเรียกใช้จึงจะถูกดาวน์โหลดลงบนเครื่องลูกข่ายแล้วถูกแปลด้วย Interpreter อีกทีหนึ่งเพื่อให้มันทำงาน ดังนั้นเครื่องลูกข่ายใดๆ ก็ตามที่มี Virtual Processer ซึ่งเป็น Interpreter ที่ใช้แปลภาษา JVM อยู่จะสามารถเรียกใช้งานภาษาจาวาได้เลยไม่ต้องมีการคอมไพล์โปรแกรมภาษา
จาวาอีกครั้ง
ข้อดีของภาษาเชิงวัตถุ
- ภาษาเชิงวัตถุนั้นเราสามารถสร้างเพื่อเลียนแบบการทำงานของสิ่งต่างๆในโลกนี้ได้ดีกว่าและง่ายกว่ามาก โดยภาษา จาวานั้นสร้างขึ้นมาโดยใช้หลักการเขียนโปรแกรมแบบเดียวกับภาษา C ทำให้ผู้เขียนภาษา จาวายิ่งมีพื้นฐาน C มาก่อน จะสามารถเขียน จาวาได้อย่างรวดเร็ว
- ภาษาเชิงวัตถุนั้นมีความสามารถในการนำกลับมาใช้ใหม่ได้ดีกว่าภาษาเชิงกระบวนการ เพราะผู้ใช้ไม่ต้องรู้กระบวนการ และโครงสร้างของข้อมูลในการผ่าน Parameter ในแต่ละฟังก์ชันเหมือนภาษาเชิงกระบวนการ
- จาวาไม่ใช้ Pointer และ จาวาไม่ให้ผู้เขียนโปรแกรมจับจองหรือปล่อยให้เนื้อที่หน่วยความจำ (Allocate/Deallocate) ด้วยตัวเองเพื่อป้องกันปัญหาที่จะเกิดขึ้นกับระบบคอมพิวเตอร์เมื่อมีการจอง (Allocate) หรือคืน (Deallocate) หน่วยความจำบ่อยๆ โดย จาวาจะจัดการเรื่องนี้ให้เอง
- โปรแกรมภาษาเชิงวัตถุ นั้นมีความกระทัดรัดเหมาะสมที่จะใช้งานบนอินเตอร์เน็ต เพราะใช้เวลาในการดาวน์โหลดโปรแกรมน้อยกว่า
- ภาษา จาวานั้นปลอดภัยจากการนำภาษาไปเขียนเป็นโปรแกรมไวรัสเพื่อเล่นงานเครือข่ายคอมพิวเตอร์
จาวาแอพเพลต
แอพเพลต คือโปรแกรมขนาดเล็กที่สร้างขึ้นด้วยภาษา จาวาสามารถถูกเรียกใช้งานบน เว็บบราวเซอร์ โดยผ่านทาง HTML Page โปรแกรมภาษา จาวาที่เป็น แอพพลิเคชั่นได้ จะเป็น Standalone โปรแกรมที่สามารถทำงานได้โดยไม่ต้องอาศัยโปรแกรมอื่นสามารถควบคุมการดำเนินการของตัวเองได้แต่โปรแกรมที่เป็น แอพเพลต จะทำงานภายใต้ เว็บบราวเซอร์ โดยไม่สามารถควบคุมการดำเนินการของตัวเองได้ทั้งหมด
โปรแกรมของ แอพเพลต เมื่อถูกคอมไพล์แล้วจะได้เป็นไฟล์ .class แต่จะไม่สามารถทำงานได้โดย จาวาinterpreter (Java.exe) เหมือนโปรแกรมที่เป็น แอพพลิเคชั่นได้ การเรียกให้ แอพเพลต ทำงานนั้นจะต้องทำภายใน HTML Page เท่านั้นโดยใช้ แอพเพลต Tag และ แอพเพลต นั้นจะต้องทำงานภายใต้สภาพแวดล้อมของ บราวเซอร์ เช่น Netscape Navigator, Microsoft Internet Exporler หรือ HotJavaซึ่งทั้งหมดเป็น บราวเซอร์ ที่มี จาวาinterpreter อยู่ภายใน
Class Applet
Class Applet ซึ่งเก็บไว้ใน packagge java.applet ที่มากับ Compiler ใช้สำหรับสร้าง แอพเพลต ทุกโปรแกรมที่เป็น แอพเพลต ต้องมีประโยค import java.applet.*; เพื่อให้คอมไพเลอร์มองเห็นคลาส แอพเพลต ซึ่งภายในจะคลาสที่กำหนดคุณสมบัติต่างๆของ แอพเพลต เช่น init() ,start() ,stop() ,paint() เป็นต้น และประโยค import java.awt.*; เพื่อให้คอมไพเลอร์มองเห็นคลาสที่เรียกว่า Abstract Window Toolkit (AWT) ซึ่งภายในคราสนี้จะรวบรวมคลาสเกี่ยวกับ graphic และ graphic user interface (GUI) ภายในคลาส แอพเพลต ถูกกำหนดไว้ใน java.applet package ดังนี้
public class applet extends Panel {
public void destory();
public appletContext getappletContext();
public String getAppletInfo();
public AudioClip getAudioClip(URL url)
public AudioClip getAudioClip(URL url,String name)
public URL getCodeBase();
public URL getDocumentBase();
public Image getImage(URL url);
public Image getImage(URL url,String name);
public Locale getLocale();
public String getParameter(String name);
public String [] [] getParameterInfo();
public void init();
public boolean isActive();
public void play(URL url);
public void play(URL url,String name);
public void resize(int width,int height);
public void resize(Dimention d);
public final void setStub(appletStub stub);
public void showStatus(String msg);
public void start();
public void stop();
}
แอพเพลต Life Cycle
ช่วงชีวิตของ แอพเพลต แบ่งออกเป็นสถานะต่างๆดังนี้ init, start, pain ,wait, suspended, stop, และ destroy ทุกๆ แอพเพลต จะดำเนินการผ่านสถานะเหล่านี้ โดยบางส่วนจะเป็นไปอย่างอัตโนมัติและบางส่วนจะอยู่ภายใต้การควบคุมของผู้ใช้ที่เรียกดู แอพเพลต นั้น ช่วงชีวิตของ แอพเพลต แสดเป็นรูปการเปลี่ยนสถานะได้ดังนี้
แอพเพลต Life Cycle
จากรูปเมื่อเริ่มต้น แอพเพลต ถูกสร้างโดยการ new() เหมือน instances ทั่วไปก็จะเริ่มทำงานทันทีคือ
1. เข้าสู่สถานะ init แล้วเข้าสู่สถานะ start จากนั้นจะเข้าสู่สถานะ paint และเข้าสู่สถานะ wait ซึ่งจะหยุดรอเหตุการณ์ (Event) หรือสัญญาณจากผู้ใช้ (คืออินพุตเข้าทาง mouse , keybord หรือ graphics user interface ) ที่เข้ามาทำให้เกิดการทำงานของ method ทำกำหนดไว้สำหรับจัดการกับเหตุการณ์นั้น เมื่อเสร็จแล้วก็จะเข้าสู่สถานะ wait เพื่อรอเหตุการณ์อื่นอีกต่อไป
2. ระหว่าง แอพเพลต อยู่ในสถานะ wait อยู่ หากผู้ใช้เปลี่ยนแปลง เว็บ page จนทำให้
· พื้นที่แสดงผลของ แอพเพลต นั้นต้องมีการวาดรูปใหม่ เช่นเมื่อ แอพเพลต ถูกย้าย (move ) เปลี่ยนขนาด (resize) ขยายขนาด (maximize) หรือ window อื่นมาทับ แอพเพลต แล้วนำ window นั้นออกไป บราวเซอร์ จะออกคำสั่งให้ แอพเพลต ทำการวาดอีกครั้งโดยเรียก repaint() ซึ่งจะส่งผลให้ แอพเพลต เข้าสู่สถานะ paint และทำการว่าพื้นที่แสดงผลของ แอพเพลต นั้นอีกครั้ง เมื่อเสร็จแล้วจะเข้าสู่สถานะ wait เพื่อรอเหตุการณ์อื่นอีกต่อไป
· พื้นที่แสดงผลของ แอพเพลต นั้นไม่ปรากฏใน เว็บ page ปัจจุบัน เช่น เมื่อผู้ใช้เลื่อน page ไปดูหน้าอื่น หรือกดปุ่ม minimize จะทำให้ บราวเซอร์ ออกคำสั่งให้ แอพเพลต เข้าสู่สถานะ stop และไปสู่สถานะ suspended ซึ่ง แอพเพลต จะหยุดรอในสถานะนี้โดยไม่ยอมรับอินพุตจากผู้ใช้ และไม่ตอบโต้ใดๆจนกว่าพื้นที่แสดงผลของ แอพเพลต นั้นจะถูกทำให้กลับมาปรากฏอีกครั้ง บราวเซอร์ ก็จะออกคำสั่งให้ แอพเพลต เข้าสู่สถานะ start,paintและ wait เพื่อเริ่มทำงานอีก
3. ระหว่าง แอพเพลต อยู่ในสถานะ wait หากผู้ใช้กดปุ่ม Close ของ บราวเซอร์ เพื่อหยุดการทำงาน จะทำให้ แอพเพลต เข้าสู่สถานะ stop และ destoryแล้วสิ้นสุดการทำงาน
ข้อสังเกต เกี่ยวกับช่วงชีวิตของ แอพเพลต พอสรุปได้ดังนี้
· เมื่อเริ่มต้นทำงาน แอพเพลต จะเข้าสู่สถานะ init ,start , และ paint
· ตอนถูกทำลายก็จะเข้าสู่สถานะ stop และ destroy
· แอพเพลต หนึ่งจะผ่ายเข้าสู่สถานะ init และ destroy ครั้งเดียว นั่นคือผ่านการ init เมื่อตอนเริ่มต้นการทำงานครั้งแรกและเมื่อผ่านการ destroy แล้วจะไม่สามารถ กลับมาทำงานอีก
· แอพเพลต หนึ่งจะผ่านสถานะ start หรือ stop ได้หลายครั้งขึ้นอยู่กับการควบคุม ของผู้ใช้ที่ดู แอพเพลต นั้น
· แอพเพลต จะหยุดรอเหตุการณ์อยู่ในสถานะ wait หรือ suspended ได้เป็นเวลานานๆส่วนสถานะอื่นนั้น แอพเพลต จะผ่านเข้าไปทำงานแล้วผ่านออกไป ทันที
ในการสร้างโปรแกรมของ แอพเพลต เราสามารถกำหนดรูปแบบการทำงานในสถานะต่างๆ ที่กล่าวมา เมื่อ แอพเพลต ดำเนินการผ่านคลาส แอพเพลต ก็จะมี method ชื่อเหมือนกันกับสถานะคือ init(), start(), paint (), stop();และ destroy();สำหรับกำหนดการทำงานเมื่อตอน แอพเพลต นั้นเข้าสู่สถานะนั้นๆ การสร้างคลาส แอพเพลต เราควรทำการ override methoe: init() , start() , paint(), stop(), และ destroy(), แต่ไม่ควรเขียนโปรแกรมที่เรียก method เหล่านี้โดยตรง แม้ว่าที่จริงแล้วสามารถทำได้ แต่โดยปรกติเราจะปล่อยให้ บราวเซอร์ เป็นผู้เรียก method เหล่านี้ เงื่อนไขที่แต่ละ method เหล่านี้จะถูกเรียกใช้มีดังนี้
· init() จะถูกเรียกเมื่อแอพเพลตถูกเรียกทำงานเป็นครั้งแรกและครั้งเดียวเท่านั้นจึงเหมาะสำหรับใช้ในการกำหนดค่าเริ่มต้นให้แก่ตัวแปรในแอพเพลตนั้น
· start() จะถูกเรียกหลังการทำงานของ init() เป็นการเริ่มทำงานตามที่เรากำหนดไว้ และจะถูกเรียกทุกครั้งเมื่อพื้นที่การแสดงผลของแอพเพลตถูกทำให้ปรากฏใน เว็บ page
· paint() โดยปรกติ paint() จะถูกเรียกภายหลังการทำงานของ start() และจะถูกเรียกเมื่อ บราวเซอร์ ต้องการวาดพื้นที่แสดงผลของ แอพเพลต นั้นใหม่ ซึ่งอาจเกิดขึ้นได้หลายกรณีเช่น พื้นที่แสดงผลของ แอพเพลต นั้นถูกwindow วาดทับ และเมื่อ window นั้นถูกนำออกไปแล้ว paint() ก็จะถูกเรียกให้ทำงาน หรือในกรณีที่ เว็บ page นั้นถูก minimize (หรือ maximize) และเมื่อถูกนำกลับมาอีก paint() ก็จะถูกเรียกเช่นกัน paint() มี Graphics gเป็นพารามิเตอร์ ซึ่งเป็นข้อมูลที่เกี่ยวข้องกับสภาวะแวดล้อมทาง graphics ของ แอพเพลต ที่กำลังทำงานอยู่ สังเกตว่า บราวเซอร์ จะมี Graphic g ซึ่ง paint() สามารถวาดลงใน Graphics g นี้แต่ในโปรแกรมของ แอพเพลต ไม่มีข้อมูล Graphics g นี้จึงไม่สามารถเรียก paint() ได้โดยตรง หากเราต้องการที่จะวาดใหม่ จะต้องเรียก repaint()
· stop() จะถูกเรียกเมื่อ แอพเพลต นั้นถูกเลื่อนไปหน้าอื่นไม่ให้มีพื้นที่การแสดงผลของ แอพเพลต นั้นปรากฏ หรือ เว็บ page นั้นถูก minimize เมื่อใดที่ แอพเพลต ถูก stop() จะทำให้ไม่มีการแสดงผลและไม่สามารถโต้ตอบกับผู้ใช้ได้ แต่ถ้า แอพเพลต นั้นมี threads อยู่ด้วยก็จะยังทำงานต่อไปหากเราต้องการให้ threads เหล่านั้นหยุดทำงานด้วย ก็ต้องเรียก stop() ของ threads เหล่านั้นด้วย
· destroy() จะถูกเรียกเมื่อ แอพเพลต นั้นสิ้นสุดการทำงานแล้ว ซึ่งจะเกิดขึ้นเมื่อ เว็บ page นั้นถูกยกเลิกการทำงาน บราวเซอร์ จะเรียก stop() ก่อนทีจะเรียกdestroy() เมื่อ แอพเพลต ทำงาน destroy() พื้นที่ในหน่วยความจำและทรัพยากรของมันก็จะถูกเก็บกลับคืนไป ไม่สามารถถูก start() ได้อีก
Method ต่างๆใน java.applet
drawString()
เมื่อเราต้องการเขียนข้อความลงในพื้นที่ของ แอพเพลต จะใช้ method ของคลาส Graphics คือ
public void drawString(String msg, int x, int y);
โดย String msg จะเป็นข้อความที่ถูกพิมพ์ที่ตำแหน่งในแนวนอน int x และในแนวตั้ง int y ที่นับจากจุดบนซ้ายสุดเป็นตำแหน่ง 0,0 ข้อความที่ถูกพิมพ์ออกไปจะถูกแสดงเป็นแบบ Graphics ไม่สามารถใช้อักษรควบคุมเช่น ‘\t’, ‘\n’, หรือ‘\r’
showStatus ()
บาง แอพเพลต มีข้อความที่ต้องแสดงตลอดเวลา หากเราวาดข้อความนั้นลงไปในพื้นที่ของ แอพเพลต ด้วย drawString() ข้อความนั้นก็จะไปทับกับรูปภาพหรือข้อความอื่น class Applet จึงมี
public void showStatus(String mgs);
สำหรับแสดงข้อความ String mgs ลงบน status bar ที่อยู่ด้านล่างพื้นที่แสดงผลของ แอพเพลต
paint()
ดังที่ทราบแล้วว่า บราวเซอร์ จะเรียก paint() ให้ทำงาน เมื่อพื้นที่ของ แอพเพลต จะต้องถูกวาดใหม่ ผู้ที่จะโปรแกรมต้องเข้าใจว่า การเขียนโปรแกรมสำหรับ แอพเพลต เป็นความคิดในแบบ event driven programming คือ จะต้องมีเหตุการณ์ มากกระตุ้นให้ paint() ทำงานผู้โปรแกรมเพียงสร้างโปรแกรมของ paint() ที่จะถูกเรียกโดย บราวเซอร์ และไม่ควรเรียก paint() ให้ทำงานโดยตรงถ้าเราต้องการให้ paint() ทำงานจากในโปรแกรมเราสามารถเรียก repaint() หรือ update() methodเหล่านี้จะมาเรียก paint() ให้ทำงานอีกครั้ง ในการเขียน method paint() มีข้อพิจารณาดังนี้
· แม้เราทราบว่า paint() จะถูกเรียกอย่างอัตโนมัติหลังจาก start() แต่ก็อาจถูกเรียกให้ทำงานอีกโดยเรียก repaint() เราไม่อาจระบุเวลาหรือเงื่อนไขว่า paint() จะทำงานเมื่อใด รวมทั้งไม่อาจกำหนดว่า paint() จะถูกเรียกกี่ครั้ง โปรแกรมของ paint() ควรพร้อมทำงานหลังจาก start() ทำงานแล้วเสมอ และถูกเรียกอีกเมื่อใด หรืออีกกี่ครั้งก็ได้
· การทำงานทั้งหมดภายใน paint() ใช้เวลานานเกินไป ที่สำคัญคือ ห้ามมีการทำซ้ำแบบไม่รู้จบ ไม่เช่นนั้นจะขาดการติดต่อกับ แอพเพลต นั้น
· ไม่ควรวาดภาพหลายๆภาพต่อเนื่อง (animation) ในการเรียก paint() หนึ่งครั้ง
repaint()
คลาส commponent มี repaint() ที่เมื่อมีการเรียกให้ทำงาน จะทำให้ paint() ถูกเรียกให้ทำงานด้วย ดังนั้นปรกติเราใช้ repaint() ในการวาดซ้ำ โดยสามารถเรียกได้จากในโปรแกรม เนื่องจาก repaint() ไม่มี Graphics g เป็นพารามิเตอร์ ในการใช้งาน repaint() มีข้อควรระวังดังนี้
· แม้ว่า repaint() จะถูกเรียกใช้เมื่อใดก็ได้ แต่อาจเกิดความผิดพลาดขึ้นได้ถ้ายังไม่มีการกำหนดค่าเริ่มต้นให้เรียบร้อย ปรกติ paint() จะถูกเรียกให้ทำงานเป็นครั้งแรกหลังจากการทำงานของ init() และ start() เราจึงควรออกแบบ repaint() ให้ทำงานหลังจาก init() , start() และ paint() ทำงานไปแล้ว และหลังจากนั้นจะถูกเรียกเมื่อใด และกี่ครั้งก็ได้
· เนื่องจาก paint() จะถูกเรียกเป็นครั้งแรก หลังจาก init() และ start() ดังนั้นเราจึงไม่ควรเรียก repaint() ในส่วนของ init() หรือ start() มิเช่นนั้นแล้ว แอพเพลต จะทำงานผิดพลาด
update()
update() เป็น method ที่กำหนดอยู่ในคลาส Component และถ่ายทอดมาสู่คลาส แอพเพลต เช่นเดียวกับ paint() และ repaint() เมื่อเรียก repaint() แล้ว update() จะถูกเรียกอัตโนมัติก่อนที่จะเรียก paint() คลาส update() มี Graphics g เป็นพารามิเตอร์ เช่นเดียวกับ paint()
getDocumentBase() and getCodeBase()
บาง แอพเพลต จะต้องโหลดไฟล์ เช่นไฟล์เสียงไฟล์ภาพ จาก เว็บsite ที่ให้ Html page หรือแอพเพลต นั้นมา คลาส แอพเพลต จึงมี getDocumentBase() ที่จะให้ URL ของไฟล์ Html page นั้นและ getCodeBase() จะให้ URL ของไดเรกทอรี ที่เก็บโปรแกรม .class ของ แอพเพลต นั้น
พื้นฐานภาษาจาวา
ตัวแปรและชนิดข้อมูล
ตัวแปร (Variable) จะเป็นชื่อของหน่วยความจำสำหรับใช้เก็บข้อมูลชนิดต่างๆ และสามารถนำออกมาใช้ได้ ตัวแปรจะประกอบด้วย
ชื่อ ,ชนิดข้อมูล ,และค่า
ก่อนใช้ตัวแปรต้องประกาศว่าเป็นตัวแปรชนิดข้อมูลอะไร แล้วจึงกำหนดค่าให้มัน จาวามีตัวแปรสามชนิดคือ
· ตัวแปรของ instance (instance variables) หรือตัวแปรของออปเจ็กต์
· ตัวแปรของคลาส (class variables)
· ตัวแปรประเภทโลคอล (local variables) หรือตัวแปรประเภทท้องถิ่น
การประกาศตัวแปร (Declaring Variables)
การใช้ตัวแปรใดๆ ในโปรแกรมของจาวาต้องประกาศก่อนที่จะใช้มัน การประกาศตัวแปรจะประกอบด้วยชนิดข้อมูลและชื่อตัวแปรดังนี้
String Name; // ประกาศ Name เป็นตัวแปรชนิดสตริง
int Salary; // ประกาศ Salary เป็นตัวแปรชนิดจำนวนเต็ม
int myAge, mySalary; // ประกาศ myAge และ my Salary เป็นตัวแปรชนิดจำนวนเต็ม
int myAge=15; // ประกาศ myAge เป็นตัวแปรชนิดจำนวนเต็มและให้มีค่า 15
การตั้งชื่อตัวแปร (Notes on Variable Names)
การตั้งชื่อตัวแปรในภาษาจาวามีกฏเกณฑ์ดังนี้
· เริ่มตันตัวอักษรหรือ underscore (_) หรือเครื่องหมายดอลล่าร์ ($)
· ห้ามเริ่มชื่อตัวแปรด้วยตัวเลข
· ภายหลังที่ใช้อักขระเริ่มตัวแรกขอลตัวแปรแล้ว หลังจากนั้นสามารถใช้ตัวอักษรใดๆหรือตัวเลขหรือสัญลักษณ์ต่างๆได้
การใช้อักษรตัวพิมพ์ใหญ่และอักษรตัวพิมพ์เล็กมีความแตกต่างกัน
ชนิดของตัวแปร (Variable Types)
ชื่อของตัวแปรแต่ละชนิดตัองระบุชนิดของตัวแปรเมื่อเราประกาศก่อนนำไปใช้เก็บข้อมูลแต่ละชนิด ชนิดของตัวแปรแบ่งเป็น 4 ประเภทใหญ่ๆ ดังนี้
· จำนวนเต็ม (integers) ได้แก่ byte, short, int, long
· เลขทศนิยม (floating point numbers) ได้แก่ floating, double
· อักขระ (characters) ได้แก่ char
· บูลีน (boolean) ได้แก่ boolean จะให้ค่า true หรือ false
นิพจน์และตัวดำเนินการ (Expressions and Operators)
นิพจน์ (Expressions) เป็นรูปแบบของคำสั่งแบบธรรมดาในภาษาจาวาซึ่งช่วยดำเนินการส่งค่ากลับ
ตัวดำเนินการ (operators) เป็นสัญลักษณ์พิเศษที่นำไปใช้ในนิพจน์
ตัวดำเนินการเลขคณิต (Arithmetic Operators)
ตัวดำเนินการ
(operator)
|
ความหมาย
|
ตัวอย่าง
|
+
|
การบวก
|
1 + 5
|
-
|
การลบ
|
6 - 4
|
*
|
การคูณ
|
2 * 4
|
/
|
การหาร (Division)
|
12 / 4 (ผลหาร 3)
|
%
|
การหาร (Modulus)
|
15 % 7 (ผลหาร 1 คิดเฉพาะเศษ)
|
ตัวดำเนินการเปรียบเทียบ (Comparison Operators)
ตัวดำเนินการ
|
ความหมาย
|
ตัวอย่าง
|
==
|
เท่ากัน
|
X == 100;
|
!=
|
ไม่เท่ากัน
|
X != 9;
|
<
|
น้อยกว่า
|
X < 9;
|
>
|
มากกว่า
|
X > 2;
|
<=
|
น้อยกว่าหรือเท่ากับ
|
X <= 15;
|
>=
|
มากกว่าหรือเท่ากับ
|
X >= 20;
|
ตัวดำเนินการตรรก (Logical Operators)
ตัวดำเนินการ
|
ความหมาย
|
ตัวอย่าง
|
&&
|
AND
|
X > 2 && x < 10
|
||
|
OR
|
X > 10 || x < 2
|
!
|
NOT
|
! ( x > 6)
|
ตัวดำเนินการบิตไวส์ (Bitwise Operators) ใช้ดำเนินการกับแต่ละบิตในจำนวนเต็ม
ตัวดำเนินการ
|
ความหมาย
|
&
|
Bitwise AND
|
|
|
Bitwise OR
|
^
|
Bitwise XOR
|
<<
|
Left shift
|
>>
|
Right shift
|
>>>
|
Zero fill right shift
|
~
|
Bitwise complement
|
<<=
|
Left shift assignment (x = x << y)
|
>>=
|
Right shift assignment (x = x >> y)
|
>>>=
|
Zero fill right shift assignment (x = x >>> y)
|
X &= y
|
AND assignment (x = x & y)
|
X |= y
|
OR assignment (x = x | y)
|
X ^= y
|
XOR assignment (x = x ^ y)
|
อะเรย์ (Array)
อะเรย์เป็นกลุ่มของตัวแปรต่างๆมิติเดียวหรือหลายมิติเป็นวิธีการที่จะบรรจุรายการของออปเจ็กต์หรือชนิดข้อมูลดั้งเดิม แต่ละอะเรย์จะบรรจุแต่ละสมาชิกที่สามารถแทนค่าหรือเปลี่ยนแปลงได้ เราไม่สามารถบรรจุชนิดข้อมูลที่แตกต่างกันในเดียวกัน อะเรย์มีขั้นตอนการสร้างดังนี้
การประกาศตัวแปรต่างๆของอะเรย์ (Declare Array Variables)
String str[]; หรือ String[] str; หรือ String []str;
int temp[]; หรือ int[] temp; หรือ int []temp;
การสร้างออปเจ็กต์ของอะเรย์ (Crewting Arrays Objects)
String[] str;
Str = new String[10];
หรือ
String[] str = new String[10];
ตัวดำเนินการ new จะช่วยจองพื้นที่ในหน่วยความจำให้ออปเจ็กต์ของอะเรย์ str[] ใหม่ของสตริง พร้อมกำหนดให้ 10 ที่สำหรับบรรจุสมาชิกต่างๆ
การเข้าถึงสมาชิกต่างๆของอะเรย์ (Accessing Array Elements)
สามารถทดสอบและเปลี่ยนแปลงค่าในแต่ละห้องของอะเรย์นั้นๆการนำค่าออกมาจากภายในอะเรย์ จะต้องใช้นิพจน์ของสับสคริป (subscript) ของอะเรย์ ดังนี้
anyArray[subscript];
anyArray เป็นส่วนหนึ่งของนิพจน์นี้ ซึ่งเป็นตัวแปรบรรจุออปเจ็กต์ของอะเรย์แม้ว่ามันสามารถเป็นนิพจน์ที่ให้ผลลัพธ์ในอะเรย์ นิพจน์นี้จะระบุห้องต่างๆในอะเรย์ที่จะเข้าถึง สับสคริป (subscript) ของอะเรย์จะเริ่มต้นด้วย 0 ดังนั้นเราสามารถเข้าถึงแต่ละสมาชิกของอะเรย์ได้โดยใช้สับสคริปที่เป็นเลขจำนวนเต็มระบุลำดับของสมาชิก
String[] myArr = new String[9];
myArr[0], myArr[1],…, myArr[8]
การเปลี่ยนสมาชิกต่างๆของอะเรย์ (Changing Array Elements)
numArray[1] = 14;
MyString[0] = “Hello”;
MyString[10] = MyString[0];
อะเรย์หลายมิติ (Multidimensional Arrays)
int point[][] = new int[10][10]; // ประกาศตัวแปรอะเรย์ point พร้อมกำหนดหน่วยความจำบรรจุสมาชิกของอะเรย์จำนวน 100 สมาชิก
point[0][0] = 4; // กำหนดค่าให้สมาชิกของอะเรย์
คำสั่งบล๊อก (Block Statements)
คำสั่งบล๊อกเป็นกลุ่มของคำสั่งอื่นๆที่ล้อมรอบด้วยวงเล็บ({}) ท่านสามารถใช้บล๊อกกับคำสั่งต่างๆในโปรแกรม สามารถสร้างบล๊อกใหม่ของคำสั่งบรรจุในบล๊อกเดิมได้ นั่นคือ สามารถประกาศและใช้ตัวแปรแบบโลคอลภายในบล๊อกและตัวแปรต่างๆเหล่านั้นจะถูกทำลายเมื่อบล๊อกนั้นสิ้นสุดการประมวลผล
เงื่อนไขของ if (if Conditionals)
เงื่อนไขของ if เขียนอยู่ในรูปแบบต่อไปนี้
if (นิพจน์ที่เป็นเงื่อนไข) // ถ้าเงื่อนไขเเป็นจริง (true) จะทำคำสั่ง 1 แต่ถ้า
คำสั่ง 1; // เป็นเท็จ (false) จะขัามคำสั่ง 1 ไปทำคำสั่งถัดไป
หรือ
if (นิพจน์ที่เป็นเงื่อนไข) // ถ้าเงื่อนไขเเป็นจริง (true) จะทำคำสั่งที่อยู่ในบล๊อก
{ // แต่ถ้าเป็นเท็จ (false) จะกระโดดออกจากบล๊อก
คำสั่ง 1; // ไปทำคำสั่งถัดไป
คำสั่ง 2;
…
}
หรือ
if (นิพจน์ที่เป็นเงื่อนไข)
{
คำสั่งบล๊อก1; // ถ้าเงื่อนไขเเป็นจริง (true) จะทำคำสั่งที่อยู่ในบล๊อก1
}
else
{
คำสั่งบล๊อก2; // ถ้าเงื่อนไขเเป็นเท็จ (false) จะทำคำสั่งที่อยู่ในบล๊อก2
}
เงื่อนไข switch (Switch Conditionals)
คำสั่ง switch จะช่วยเลือกทำคำสั่งไดคำสั่งหนึ่งตามต้องการโดยมีทางเลือกให้ทำคำสั่งหลายๆทาง
switch (oper) // เลือกทำงานตามค่าของ oper
{ // เริ่มต้นคำสั่ง switch
case ‘+’ :
add(val1,val2); // กรณีที่ oper เป็น ‘+’ ให้เรียกใช้ add() method
break; // ยุติการประมวลผลแล้วข้ามไปที่คำสั่งถัดจาก
// คำสั่ง switch
case ‘-‘:
sub(val1,val2);
break;
default:
System.out.println(“Unknown operator”); // เลือกทำคำสั่งนี้เมื่อ oper ไม่อยู่ในกรณีใดๆ
} // สิ้นสุดคำสั่ง switch
ลูป for (for Loops)
ช่วยทำคำสั่งหรือบล๊อกของคำสั่งที่ต้องการซ้ำแล้วซ้ำอีก จนพบเงื่อนไขที่กำหนดจึงออกจากลูป
for ( ค่าเริ่มต้น; เงื่อนไข; ค่าเพิ่มขึ้นหรือค่าลดลง)
{
คำสั่งต่างๆ;
}
การเริ่มต้นลูป for มี 3 ส่วนดังนี้
· ค่าเริ่มแรกของลูป for เป็นนิพจน์ เช่น i=0 หรือ int i=0 ตัวแปรที่ประกาศในส่วนนี้ของลูป for เป็นประเภทโลคอล จะถูกทำลายทิ้งเมื่อสิ้นสุดการประมวลผลของลูป
· เงื่อนไข (condition) จะเกิดขึ้นภายหลังที่ลูป for วนรอบทำงานในแต่ละครั้ง เงื่อนไขต้องเป็นนิพจน์หรือฟังก์ชันที่ให้ค่าชนิด boolean
· ค่าเพิ่มขึ้นหรือลดลง เป็นนิพจน์ใดๆ
การออกนอกลูป (Breaking Out of Loops)
ลูปทั้งหมดจะสิ้นสุดการทำงานตามเงื่อนไขที่กำหนดไว้ บางกรณีอาจต้องออกจากลูปในขณะที่ลูปกำลังวนรอบทำงาน สามารถใช้คีย์เวิร์ด
break; และ continoue;
การจัดการเหตุการณ์ธรรมดาและการโต้ตอบ
การกดปุ่มเมาส์และการปล่อยปุ่มเมาส์ (mouseDown and mouseUp)
ใน applet method ทั้งสองจะถูกเรียกใช้ทันทีที่เกิดเหตุการณ์ ต่อไปนี้เป็นรูปแบบของ mouseDown() method เมื่อเกิดเหตุการณ์ mouseDown
public boolean mouseDown(Event myEvent, int x, int y)
{
// กิจกรรม
…
}
myEvent คือ เหตุการณ์ต่างๆของระบบทั้งหมดทำให้เกิด instance ของคลาส Event
x และ y คือ พิกัดของตำแหน่งที่เราคลิกเมาส์บนจอภาพ
mousUp() method ถูกเรียกใช้งานเมื่อผู้ใช้ปล่อยปุ่มของเมาส์ รูปแบบการเขียนจะคล้ายกับ mouseDown() method
public boolean mouseUp(Event myEvent, int x, int y)
{
// กิจกรรม
…
}
ส่วนประกอบต่างๆสำหรับเชื่อมโยงกับผู้ใช้ขั้นพื้นฐาน (The Basic User Interface Components)
รูปแบบธรรมดาของส่วนประกอบของ AWT (Abstract Windowing Toolkit) ถือเป็นส่วนประกอบของ UI (User Interface) ขั้นพื้นฐานเราสามารถสร้างและเพิ่มส่วนประกอบของ UI ให้ applet ของเราโดยไม่ต้องทราบเกี่ยวกับการสร้าง containersหรือ panel ต่างๆ applet ของเราก่อนที่จะเขียนรูปและเชื่อมโยงเหตุการณ์ต่างๆ เนื่องจาก applet เป็น container เราจึงสามารถใส่ส่วนประกอบต่างๆของ AWT อื่นเช่นเดียวกับส่วนประกอบต่างๆของ UI หรือ container อื่นที่ใส่ให้ applet
เกี่ยวกับส่วนประกอบต่างๆของ UI ขั้นพื้นฐาน ได้แก่ ฉลาก (Label), ปุ่ม (Button), ฟิลด์ต่างๆของเท็กซ์ (text fields) ในแต่ละกรณี โปรแกรมย่อยจะ สร้างส่วนประกอบ (component) คล้ายกัน เริ่มแรกเราต้องสร้างส่วนประกอบแล้วเพิ่มมันเข้าไปให้panel ที่ตรงนี้ มีมันจะแสดงบนจอภาพ การเพิ่มส่วนประกอบให้ panel เช่น applet จะต้องใช้ methode
Add()
ฉลาก (Label)
เป็นสตริงของเท็กซ์ (text) แบบธรรมดาที่อยู่ในชั้นของ panel ที่กำหนดให้ การสร้าง label ต้องใช้คอนสตรัคเตอร์ (constructor) ต่างๆดังนี้
· Label() ช่วยสร้างฉลาก (label) ที่ว่างเปล่าพร้อมกับเท็กซ์ชิดซ้ายมือตรงบริเวณที่กำหนดให้
· Label(String) ช่วยสร้างฉลาก (label) พร้อมสตริงของเท็กซ์ที่กำหนดให้ และเท็กซ์ให้ชิดซ้ายมือของพื้นที่กำหนดให้
· Label(String, int) ช่วยสร้างฉลาก (label) พร้อมสตริงของเท็กซ์ที่กำหนดให้ และการจัดรูปแบบของเท็กซ์ที่กำหนดให้ รูปแบบของเท็กซ์นี้บรรจุในตัวแปรต่างๆของคลาส Label ดังนี้
Label.RIGHT, Label.LEFT, Label.CENTER
ปุ่ม (Button)
การสร้างปุ่ม (button) ต้องใช้คอนสตรัคเตอร์ (constructor) ต่างๆดังนี้
· Button () method ใช้สร้างปุ่มว่างเปล่าพร้อมกับไม่มี label
· Button (String) method ใช้สร้างปุ่มพร้อมออปเจ็กต์ของสตริงที่กำหนดเป็น label
เมนูสำหรับการเลือก (Choice Menus)
เมนูของคลาส choice เป็นส่วนประกอบของ UI ที่มีความสลับซับซ้อนมากว่า label, button เมนู (Menu) สำหรับเลือกเป็นประเภทเมนูแบบ popup (หรือ pulldown) การจัดทำเมนูเพื่อให้ผู้ใช้เลือก จะต้องสร้าง instance ของคลาส choice แล้วใช้addItem() method เพื่อเพิ่มแต่ละรายการ
Choice choice = new Choice ();
choice.addItem(“yes”);
choice.addItem(“No”);
add(choice);
พื้นที่ของเท็กซ์ (Text Areas)
ใช้ดำเนินการกับเท็กซ์ขนาดใหญ่ได้ดี การสร้างพื้นที่ของเท็กซ์ เราต้องใช้ constructor ต่อไปนี้
· TextArea() ใช้สร้างพื้นที่ของเท็กซ์ว่างเปล่า มีขนาด 0 แถวและกว้าง 0 อักขระทำให้ไม่แสดงอะไรได้เลย แต่ไม่ต้องกังวล เนื่องจากเราสามารถเปลี่ยนแปลงขนาดของพื้นที่เท็กซ์ใหม่ได้ ก่อนที่จะเพิ่มมันให้ panel
· TextArea(int, int) ใช้สร้างพื้นที่ของเท็กซ์ว่างเปล่า พร้อมกับกำหนดจำนวนแถวและคอลัมน์
· TextArea(String) ใช้สร้างพื้นที่ของเท็กซ์สำหรับแสดงสตริงที่กำหนดให้ เริ่มที่ 0 แถวและ 0 คอลัมน์
· TextArea(String, int, int) ใช้สร้างพื้นที่ของเท็กซ์สำหรับแสดงสตริงที่กำหนดให้ พร้อมทั้งกำหนดขนาดของพื้นที่ตามต้องการ
TextComponent
ไม่มีความคิดเห็น:
แสดงความคิดเห็น