ノートテキスト
ページ1:
สกาย
(a)
Jun
JAVA & OOP
V1 (Update: 28/12/25)
Book javaRecab =
=
new Book("Free");
* JAVA & การโปรแกรมเชิงวัตถุ
BY CHAQUI.RL
ページ2:
Preface เอกสารสรุปฉบับนี้มีเนื้อหาเกี่ยวกับภาษา JAVA และการโปรแกรมเชิงวัตถุ (OBJECT-ORIENTED PROGRAMMING) ซึ่งมีการนำเสนอเนื้อหาต่าง ๆ เช่น ไวยากรณ์, ชนิดข้อมูล รวมถึงคอนเซปต์ต่าง ๆ ในภาษา JAVA สรุปฉบับนี้จัดทำโดย CHAQUIRL โดยเป็นการแจกฟรีไม่มีค่าใช้จ่าย และ อนุญาตให้แชร์ต่อหรือนําไปใช้ประกอบสื่อการสอนได้โดยไม่ต้องขออนุญาตจาก ผู้จัดทํา ทั้งนี้ผู้จัดทําขอความร่วมมือไม่ลบเครดิตของผู้จัดทําออก / นำไปเป็น ของตนเอง / จำหน่ายต่อ หากพบเห็นจะมีการดำเนินคดีตามกฎหมายต่อไป หมายเหตุการใช้งาน AIะ เนื้อหาบางส่วน, ตัวอย่างโค้ค และภาพประกอบใน เอกสารนี้มีการใช้งาน AI (GEMINI, CHATGPT) เข้ามาช่วยในการสรุปและจัดทำ เพื่อความสะดวกและถูกต้องทางลิขสิทธิ์ อย่างไรก็ตาม เนื้อหาทั้งหมดได้รับการ เรียบเรียงและตรวจสอบความถูกต้องโดยผู้เขียนเรียบร้อยแล้ว ขอบคุณผู้อ่านทุกท่านที่สนใจ หวังว่าเอกสารนี้จะช่วยให้การเรียนรู้ภาษา JAVA ง่ายขึ้น หากมีข้อผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยครับ CHAQUI.RL 8
ページ3:
ชี้แจงเกี่ยวกับรูปแบบการเขียนโค้ดในสรุปเล่มนี้
ในสรุปเล่มนี้ได้มีการเขียนตัวอย่างโค้ดโดยรวมหลายคลาส ไว้ในไฟล์เดียว (Main.java)
เพื่อให้ผู้อ่านเข้าใจคอนเซปต์ได้ง่าย อย่างไรก็ตามในการเขียนโปรแกรมจริง ควรแยกเป็น
หนึ่ง class ต่อ 1 ไฟล์! ตัวอย่างการแยกไฟล์:
class Car {
}
}
}
String color;
public Car(String color) {
ควรแยกออกมาเขียนเป็น Can.Java
(อย่าลืมเติม public หนา class)
this.color = color;
public void honk() {
}
System.out.println(color + " Beep! Beep!");
public void accelerate(int speed) {
"
System.out.println(color + car is accelerating to + speed +
"km/h.");
}
public void brake() {
System.out.println(color +
"
car is braking.");
public class Main {
public static void main(String[] args) {
Car carA = new Car("red");
Car carB = new Car("blue");
carA.accelerate(45);
carA.honk();
carB.brake();
Main.Java
}
ページ4:
{
ntln("Codi
tln("Coding
01.
02.
03.
พรีวิวเนื้อหา
แนะนําภาษา Java
บทนี้จะเป็นการแนะสิ่งที่ควรรู้เบื้องต้นเกี่ยวกับ Java
โปรแกรมแรกของฉัน
บทนี้จะสอนเขียนโปรแกรมภาษา Java โปรแกรมแรก
(Hello World)
รับค่าจาก USER ด้วย Scanner
บทนี้จะสอนเขียนโปรแกรมภาษา Java ที่มีการรับค่าจาก
Keyboard ของผู้ใช้
var syste
04.
คลาสและวัตถุ
CAT)
.println("C
_be() {
'A') {
rt.println("
05.
ut.println(
บทนี้จะแนะนำเกี่ยวกับพื้นฐาน Object-Oriented
programming ในภาษา Java โดยเริ่มจากการแนะนำความหมาย
ของคลาสและวัตถุก่อน
ไวยากรณ์พื้นฐาน <>
บทนี้จะแนะนำไวยากรณ์ต่าง ๆ ในภาษา Java ที่ควรรู้ เช่น
การสร้าง object เงื่อนไข การทำซ้ำ และอื่น ๆ
ページ5:
{
06.
พรีวิวเนื้อหา
ชนิดข้อมูล A
A
มี 2 บทย่อย!!
บทนี้จะแนะนำเกี่ยวกับชนิดข้อมูลต่าง ๆ ในภาษา Java รวมถึงการ
แปลงชนิดขอมูล
ntln("Codi 07. ตัวระบุสิทธิ์เข้าถึง ?
cln("Coding
บทนี้จะแนะนำตัวระบุสิทธิ์การเข้าถึงในภาษา Java ที่จะมีผลต่อระดับ
การเข้าถึงเรียกใช้ ตัวแปร คลาส และ เมธอด
08. ต๊วด้าเนินการ
บทนี้จะแนะนำตัวดำเนินการประเภทต่าง รวมถึงแสดงตัวอย่าง
ๆ
var syst
FAT)
.println("g|
_be() {
'A') {
it.println("
ut.println
10.
09.
ประกอบ
ตัวแปรประเภทต่าง (X)
ๆ
บทนี้จะแนะนำตัวแปรประเภทต่าง ๆ และขอบเขตการใช้งาน
ของมัน
การหอนุมขอมูล
บทนี้จะแนะนำเมธอดที่ทำงานกับ Variable ที่เป็น private
ใน 00P (Encapsulation)
ページ6:
{
ntln("Cod
cln("Coding
11.
12.
13.
14.
var syst
CAT)
.println("C
_be() {
'A') {
it.println("
ut.println(
พรีวิวเนื้อหา
การสืบทอดคุณสมบัติระหว่างคลาส
บทนี้จะแนะนำการสืบทอดตัวแปรและเมธอดจากคลาสแม่ไปยัง
คลาสลูก
ความเป็นนามธรรม
ID CARO
บทนี้จะแนะนำเกี่ยวกับนามธรรม ซึ่งจะเกี่ยวข้องกับ Interface
และ Abstract class ในภาษา Java
การพองรูป / มีหลายรูปแบบ
บทนี้จะแนะนำเกี่ยวกับการฟ้องรูปในภาษา Java ซึ่งจะ
เกี่ยวข้องกับ Overloading และ overriding
การจัดการข้อผิดพลาดในโปรแกรม A AR
บทนี้จะแนะนำเกี่ยวกับประเภทของข้อผิดพลาดต่าง ๆ และวิธีการ
จัดการอย่างเช่น try catch exception
ページ7:
8 ** Chapter 1 INTRODUCTION แนะนําภาษา JAVA เกี่ยวกับบทนี้ “บทนี้จะเป็นการแนะสิ่งที่ควรรู้เบื้องต้นเกี่ยวกับ JAVA 8
ページ8:
Java Programming INTRO TO JAVA - JAVA- -ภาษา Java คืออะไร? ภาษาจาวา (Java) เป็น ภาษาโปรแกรมเชิงวัตถุ (Object-Oriented Programming) พัฒนาโดย เจมส์ กอสลิง และทีมวิศวกรที่บริษัท Sun Microsystems ในปี พ.ศ. 2534 ภายใต้ โครงการกรีน (the Green Project) และเปิดตัวสู่สาธารณะในปี พ.ศ. 2538 เดิมชื่อภาษา "โอ๊ก" (Oak) ตั้งชื่อตามต้นไม้หน้าออฟฟิศของกอสลิง แต่ต้องเปลี่ยนชื่อ เนื่องจากติดปัญหาลิขสิทธิ์ จึงเปลี่ยนเป็น "จาวา" (Java) ซึ่งได้แรงบันดาลใจจากกาแฟ Fun Fact!! ACT COPYRIGHT COPYRIGHT COPYRIGHT ทําไม Java ถึงเป็นที่นิยม Java โด่งดังเพราะมัน "เสถียร, ข้ามแพลตฟอร์มได้, ใช้งานได้หลากหลาย, มีชุมชน และเครื่องมือรองรับ" เหมาะทั้งกับมือใหม่และองค์กรระดับโลก Note: คำว่า ข้ามแพลตฟอร์ม ได้คือ Java ถูกออกแบบให้รันบน Java Virtual Machine (Jun) ซึ่งทำให้โค้ด Java สามารถทำงานได้บนทุกแพลตฟอร์ม (Window, mac0s, Linux) โดย ไม่ต้องแก้โค้ดใหม่ ถ้าเป็นภาษาอื่น เช่น C เราจะรันโคดชุดเดียวกันบน 08 ที่ต่างกันไม่ได้!! เช่นโปรแกรม 6 ที่พัฒนาสำหรับ Window - รันใน macOS ไม่ได้ C BY CHAQUI.RL
ページ9:
Java Programming INTRO TO JAVA คอนเซปต์เขียนครั้งเดียว รันได้ทุกที่ (Write Once, Run Anywhere) Windows Compiler .exe (Native Binary) ?? 1 × mac OS javac Compiler Bytecode (.class) Jun (บน 08 ใดก็ได้) mac OS JVM คืออะไร??? Jun (Java Virtual Machine) คือเครื่องเสมือนที่ใช้สำหรับ รันโปรแกรม Java โดยมันทำหน้าที่แปลง Bytecode (class) ให้ทำงานบนระบบปฏิบัติการจริง เช่น Windows, macOS หรือ Linux Note: หากยังไม่เข้าใจแผนภาพด้านบนมากนัก ไม่เป็นไร!!!! เพียงแค่คอนเซปต์ง่าย ๆ ไปว่า Java เขียนครั้งเดียว เอาไปใช้ได้ทุกที่ก็พอ แผนภาพด้านบนเป็นเพียงการขยายให้ เห็นภาพชัดเจนแบบละเอียดยิบมาก ๆ เท่านั้นคับบบ BY CHAQUI.RL
ページ10:
Java Programming คอนเซปต์ 4 เสาหลักของ 00P (The 4 Pillars of OOP) INTRO TO JAVA Encapsulation Inheritance Abstraction Polymorphism III Encapsulation (การห่อหุ้มข้อมูล) การมัดรวม ข้อมูล (Attributes) และ เมธอด (Methods) ที่ทำงานกับข้อมูลนั้นไว้ ในหน่วยเดียวกันที่เรียกว่า "คลาส" (Class) รวมถึงการจำกัดการเข้าถึงข้อมูลภายใน บางอย่างจากภายนอก ซึ่งเราเรียกว่า "Data Hiding" ประโยชน์ ช่วยปกป้องความถูกต้องของข้อมูลโดยการควบคุมการเข้าถึงผ่านเมสอดสาธารณะ (Public methods) และซ่อนรายละเอียดการทำงานที่ซับซ้อนภายในไม่ให้คน ภายนอกเห็น xx Concept นี้จะถูกพูดถึง อีกใน Chapter 10 : Encapsulation BY CHAQUI.RL
ページ11:
Java Programming คอนเซปต์ 4 เสาหลักของ 00P (The 4 Pillars of OOP) INTRO TO JAVA Encapsulation Inheritance Abstraction Polymorphism IIII Inheritance (การสืบทอด) กลไกที่คลาสใหม่ (Subclass หรือคลาสลูก) สามารถ รับการถ่ายทอดคุณสมบัติและ พฤติกรรม มาจากคลาสที่มีอยู่แล้ว (Parent class หรือคลาสแม่) ประโยชน์ ช่วยลดการเขียนโค้ดซ้ำ (Code Reusability) โดยให้เราต่อยอดจากโค้ดเดิม แทนที่จะก๊อปปี้วาง xx Concept นี้จะถูกพูดถึง อีกใน Chapter 11: Inheritance BY CHAQUI.RL
ページ12:
Java Programming INTRO TO JAVA คอนเซปต์ 4 เสาหลักของ 00P (The 4 Pillars of O0P) Encapsulation Inheritance Abstraction Polymorphism I III Abstraction (นามธรรม) การซ่อนรายละเอียดการทำงานที่ซับซ้อนไว้ข้างหลัง (เช่น เวลาเรียกใช้เมธอดบาง อย่าง แค่ชื่อก็เพียงพอ ไม่จำเป็นต้องไปรับรู้ว่าหลังบ้านมันทำงานยังไงถึงได้เป็น ผลลัพธ์ที่เราต้องการออกมาได้) และโชว์เฉพาะ "สิ่งที่จำเป็น" ให้ผู้ใช้เห็น ประโยชน์ ช่วยลดความซับซ้อนของระบบใหญ่ๆ ให้ดูง่ายขึ้น ผู้ใช้สามารถใช้งานวัตถุได้โดย ไม่ต้องเข้าใจกลไกภายใน xx Concept นี้จะถูกพูดถึง อีกใน Chapter 12: Abstraction BY CHAQUI.RL
ページ13:
Java Programming INTRO TO JAVA คอนเซปต์ 4 เสาหลักของ 00P (The 4 Pillars of OOP) Inheritance Polymorphism IIII Encapsulation Abstraction xx Polymorphism (การฟ้องรูป) ความสามารถที่วัตถุหนึ่งจะเปลี่ยนรูปได้หลายแบบ หรืออธิบายง่ายๆ คือ "เมธอดชื่อ เดียวกัน แต่พฤติกรรมต่างกัน" ขึ้นอยู่กับว่าเรียกใช้ผ่านวัตถุอะไร สำหรับวัตถุคนละประเภท ทำได้ 2 วิธีคือ • Method Overriding: คลาสลูกเขียนทับเมธอดของแม่เพื่อทำงานแบบของตัวเอง • Method Overloading: สร้างเมธอดชื่อเดิมแต่รับค่า (Parameters) ต่างกัน ประโยชน์ ช่วยให้เขียนโค้ดที่เป็นกลาง (Generic) ได้มากขึ้น ไม่ต้องก๊อปปี้โดดเดิมซ้ำๆ Concept นี้จะถูกพูดถึง อีกใน Chapter 13: Polymorphism BY CHAQUI.RL
ページ14:
Java Programming
ตัวอย่างโปรแกรม / เกมที่พัฒนาด้วยภาษา Java
INTRO TO JAVA
MINECRAFT
JAVA EDITION
Minecraft (Java Edition)
เกมแนว Sandbox | Survival ที่สร้างขึ้นด้วย ภาษา Java โดย Mojang Studios
เปิดตัวในปี 2009 จุดเด่นของเวอร์ชันนี้คือ รองรับการติดตั้ง Mod, สร้างเซิร์ฟเวอร์เองได้
และรันได้บน Windows, macos, Linux ผ่าน Java Virtual Machine (Jun)
MCExample.java X
public class Block extends BlockBehaviour {
public Block(Block Behaviour. Properties properties) {
}
super(properties);
public void step On (Level level, BlockPos pos, BlockState state, Entity
entity) {
super.stepOn(level, pos, state, entity);
}
BY C
BY CHAQUI.RL
ページ15:
Java Programming STOP INTRO TO JAVA ก่อนจะเริ่มพัฒนาโปรแกรม Java ต้องโหลด JDK ติดเครื่องด้วย! JDK มันคือ อิหยัง???? JDH (Java Development Kit) คือ .. ชุดเครื่องมือสำหรับ พัฒนาโปรแกรมภาษา Java ภายใน JDK จะมี 2 อย่างหลัก ๆ 1.JRE (Java Runtime Environment) • ส่วนที่ทำให้รันโปรแกรม Java ได้ (รวม Jun) 2.javas ๐ คอมไพเลอร์ที่ใช้แปลงโค้ด Java ให้เป็น class (bytecode) 3.เครื่องมืออื่น ๆ ๆ • เช่น javadee, Jan, debugger เป็นต้น โหลด JDK แนะนำให้โหลดจาก Oracle JDM ซึ่งวิธีการโหลดสามารถค้นหาได้ตาม Internet เมื่อโหลดเสร็จแล้วสามารถใช้คำสั่ง java -- version เพื่อตรวจสอบได้ ตัวอย่างที่ติดตั้งสำเร็จ: C:\Users\ADMIN>java -version java 17.0.9 2023-10-17 LTS Java(TM) SE Runtime Environment (build 17.0. 9+11-LTS-201) ? Java HotSpot(TM) 64-Bit Server VM (build 17. 0. 9+11-LTS-201, mixed mode, sharing) ขั้นตอนต่อไปก็คือการเลือก IDE ที่อยากใช้ BY CHAQUI.RL
ページ16:
Java Programming IDE ที่เหมาะกับการเขียนโปรแกรม Java INTRO TO JAVA \w IJ IntelliJ IDEA • รองรับภาษา Java ดีที่สุด!!! ใช้งานง่ายและเร็ว IJ • รองรับ Spring, Maven, Gradle, Android, Hotlin NetBeans • ใช้งานง่าย • เหมาะกับนักเรียน / มือใหม่เขียนโค๊ด Eclipse • ฟรี 100% และเปิดโอเพนซอร์ส • มี plugin จำนวนมาก แต่ๆๆๆ ตัวนี้ UI จะเก่านิดนึง แต่ใช้ดีอยู่! VS Code • UI ทันสมัยมากกกกกกกกกกกกก! • ใช้งานง่ายมี Extension สำหรับ Java ☑ BY CHAQUI.RL
ページ17:
8 **- Chapter 2- 2 MY 1ST PROGRAM เริ่มเขียนโปรแกรมแรก เกี่ยวกับบทนี้ “บทนี้จะสอนเขียนโปรแกรมภาษา JAVA โปรแกรมแรก (HELLOWORLD)" 8
ページ18:
Java Programming
-My First Program-
MY 1ST PROGRAM
ยินดีต้อนรับเข้าสู่พา ทที่จะได้เขียนโปรแกรมในที่สุด!! เราเริ่มจากการเขียนตามไป
ก่อนแล้วค่อยมาเรียนรู้ส่วนประกอบของโปรแกรมที่เราเขียน เริ่มด้วยโปรแกรมสุด
คลาสสิกอย่าง Hello world!
Helloworld.java X
public class Hello world {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Output:
HelloWord
โคตรขาว!!
ขอควรระวัง!
ตัว - ก ษรพิมพ์เล็ก พิมพ์ใหญ่มีผล
ต่อโปรแกรม! (Case Sensitive)
BY CHAQUI.RL
ページ19:
++ Chapter 3 - JAVA SCANNER รับค่าจาก USER เกี่ยวกับบทนี้ “บทนี้จะสอนเขียนโปรแกรมภาษา JAVA ที่มีการรับค่า จาก KEYBOARD ของผู้ใช้” ◉ 8
ページ20:
Java Programming
clava รับค้าด้วย Scลูก080P-
JAVA SCANNER
เมื่อเราผ่านโปรแกรมแรกกันไปแล้วก็เข้าสู่โปรแกรมที่ 2 จุ๊น!
พิมพ์ข้อความปกติมันง่ายไปแล้ว!! ถ้าเราต้องการรับค่าจากคีย์บอร์ดผู้ใช้ด้วยหละ..
เริ่มกันเลย!
Scanner
การที่เราจะรับค่าจากคีย์บอร์ดผู้ใช้ในภาษา Java นั้นสามารถทำได้โดยการสร้าง
Object จาก Class Scanner และเรียกใช้ method ของ Class Scanner เพื่อรับค่า
จากคีย์บอร์ด (คอนเซปต์ของ Object และ Class มีอธิบายหน้าต่างๆนะแบบ)
Hello world.java
X
ต้อง import ก่อนใช้งานด้วยเด้อ!
Q
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Please enter your name: ");
Scanner scan = new Scanner(System.in);
String name = scan.nextLine();
System.out.println("Hello " + name);
สร้าง Object ชื่อ scan
จาก Class Scanner
ใช้ Object ชื่อ scan
เรียก Method จาก Class Scanner
}
Output:
Please enter your name:
ChaquirrelZ
Hello ChaquirrelZ
BY CHAQUI.RL
ページ21:
Java Programming JAVA SCANNER Method ที่ใช้รับค่าประเภทอื่น ใน คลาส Scanner เรารู้กันไปแล้วนะครับว่า method next line(); มีไว้รับค่า String 1 แถว แต่ถ้า อยากรับค่าอย่างอื่นหล่ะ? int Ploat เราสามารถใช้ nextline() ได้ไหม? คำตอบคือ... ไม่ได้!!! เราต้องใช้ method เฉพาะของ Data type นั้นนะ! ชื่อ Method Datatype คําอธิบาย nextByte() Byte ใช้รับค่า Byte จาก Input nextBoolean() Boolean ใช้รับค่า Boolean จาก Input nextInt() Int ใช้รับค่า Int จาก Input nextFloat() Float ใช้รับค่า Float จาก Input nextDouble() Double ใช้รับค่า Double จาก Input nextLong() Long ใช้รับค่า Long จาก Input nextShort() Long ใช้รับค่า Short จาก Input BY CHAQUI.RL
ページ22:
8 ** Chapter 4 - CLASS & OBJECT คลาสและวัตถุ เกี่ยวกับบทนี้ “บทนี้จะแนะนำเกี่ยวกับพื้นฐาน OBJECT-ORIENTED PROGRAMMING ในภาษา JAVA โดยเริ่มจากการแนะนำ ความหมายของคลาสและวัตถุก่อน” 8
ページ23:
Java Programming Class • ollo -Class & Object- เป็นเสมือนแม่แบบสำหรับสำหรับสร้าง Object กำหนดว่ามี CLASS & OBJECT คุณสมบัติ (Attribute): ข้อมูล/สถานะของ Object เช่น Int age; • พฤติกรรม (Method): พฤติกรรมที่ Object สามารถทำได้ เช่น eat(); Object . เป็นสิ่งที่สร้างจาก Class ที่กำหนด มีค่า Attribute จริง ๆ ในตัว • สามารถเรียกใช้ method ของ Class เพื่อทำงานได้ • Object แต่ละตัวมีข้อมูลของตัวเองแม้จะสร้างจาก Class เดียวกัน Class แมแบบ Class Can accelerate(); honk(); brake(); สราง Object Object เรียกใช้ method Object carA colon "red"; = cara.accelerate (45); cara.honk(); สราง Object Object เรียกใช้ method Object carB color="blue" carB.brake(); BY CHAQUI.RL
ページ24:
Java Programming
ตัวอย่างโปรแกรม myCan จากหน้าที่แล้ว
class Car { Class แมแบบ
String color;
public Car(String color) {
this.color color;
}
}
}
public void honk() {
Constructor method
System.out.println(color + " Beep! Beep!");
CLASS & OBJECT
Method ของ Class
public void accelerate (int speed) {
System.out.println(color + car is accelerating to " + speed +
"km/h.");
}
public void brake() {
System.out.println(color +
"
car is braking.");
public class Main {
public static void main(String[] args) {
Car carA = new Car("red");
Car carB = new Car("blue");
สราง Object
}
}
carA.accelerate(45);
car A.honk();
carB.brake();
Object เรียกใช้ method
BY CHAQUI.RL
ページ25:
B Chapter 5 - SYNTAX ไวยากรณ์พื้นฐาน เกี่ยวกับบทนี้ “บทนี้จะแนะนำไวยากรณ์ต่าง ๆ ในภาษา JAVA ที่ควรรู้ เช่น การสร้าง OBJECT เงื่อนไข การทำซ้ำ และอื่น ๆ " 8
ページ26:
Java Programming
การประกาศ Class
-Syntax jugiu
• Class คือ หัวใจของ Java เลยนะ!
• Class คือ แม่พิมพ์ของวัตถุทั้งปวง
• Java ประกอบด้วย Class 1, ขึ้นไป
//syntax
public class ชื่อคลาส {
BASIC SYNTAX
// บลาๆๆๆๆๆ Method และ Variable
}
การประกาศ Variable
• Aka. Attribute หรือ Field !
• Variable คือ ตัวที่บอกลักษณะของ
Object แต่ละตัว (แต่ละ Obj. จะ
แยกกัน)
//syntax
modifiers data type
// Ex: public int x 3
ชื่อตัวแปร ง
// Ex: public static int 3 :
การประกาศ Method
• Method คือ สิ่งที่กำหนด
ให้ Object ในคลาสนั้น
สามารถทำได้
//syntax
modifiers returnType ชื่อเมธอด (parameter)
||ส่วน Body ของเมธอด
} //Ex. private int methode (int x) {...}
//Ex. private static int methodB(int x) {...}
การเขียน Comment
• Comment มีไว้เพื่ออธิบายโค้ด
.
คอมไพเลอร์จะไม่ประมวลผล
ข้อความเหล่านี้
• javadoc คือ เอกสารประกอบโค้ด
//This is a comment
/*This is also a comment
hi hi hi hi hi */
/** {javaDoc}*/
BY CHAQUI.RL
ページ27:
Java Programming
การสร้าง Object
-Syntax jugiu
• การสร้าง Object สามารถสร้างได้
ผาน Construction
//syntax
BASIC SYNTAX
ชื่อคลาส ชื่อออปเจค = new ชื่อคลาส();
=
//Ex. Car carA = new Car();
ประโยคเงื่อนไข if else switch
• iP - else: ตรวจเงื่อนไข ถ้าจริง
ทำชุดคำสั่งหนึ่ง ถ้าไม่จริงทำอีกชุด
• switch: เลือกทำงานตามค่าที่ตรง
กับ case ที่กำหนด
//if-else
iP (เงื่อนไข) {//คำสั่ง)
else if (เงื่อนไขอื่น) (//คำสั่ง)
else {// าสั่ง}
//switch case
switch (ตัวแปร){
case ค่าที่1://คำสั่ง break;
case ค่าที่2://คำสั่ง break;
default://ไม่ตรง case ไหน
}
การทำซ้ำ (iteration)
• Por: วนซ้ำจำนวนรอบที่รู้ล่วงหน้า
• while: วนซ้ำตราบใดที่เงื่อนไข
เป็นจริง
• do - while: ทำงานอย่างน้อย 1
รอบแล้วค่อยตรวจเงื่อนไข
• Por-each: วนอ่านค่าทุกตัวใน
array หรือ collection
//for loop
for (int i
=
//while loop
0; i < 5; i++) { //คำสั่ง
while (เงื่อนไข) {// คำสั่ง)
//do-while loop
do {// คำสั่ง} while (เงื่อนไข);
//for-each loop
Por (ชนิดตัวแปร item : อาร์เรย์หรือ
คอลเลกชัน) {// คำสั่งแต่ละ item)
BY CHAQUI.RL
ページ28:
Java Programming
Break & Continue
.
-Syntax jugiu-
ใช้ร่วมกับการวบลูป (iteration)
เพื่อควบคุมพฤติกรรมของลูป
- break: จะออกจากลูปทันที
• continue: ไม่ได้ออกจากลูปทันที
เพียงแค่ข้ามไปทําตัว ไป
จากโค้ดด้านขวาเลยที่จะถูกพิมพ์ออก
.
มาคือ 1 ? และ 5 (เมื่อ i เท่ากับ
2, 4, 6 จะถูกขาม (continue) และ
เมื่อ : เท่า บ 1 จะออกจากลูปทันที
(break) 2, 3 ไม่ถูกทำ)
ฟังก์ชันเรียกตัวเอง (Recursion)
.
เมธอดที่เรียกใช้งานตัวเองช้าๆ
เพื่อแก้ปัญหาโดยแบ่งเป็นปัญหา
บ่อยๆ จนกว่าจะถึงจุดสิ้นสุด แล้วส่ง
ค่าคืนกลับมาเป็นทอดๆ
• Base Case (จุดหยุด): เงื่อนไขที่
สั่งให้ "หยุดเรียกตัวเอง" และเริ่ม
คืนค่ากลับ (Return)
• Recursive Case (จุดเรียกซ้ำ):
ส่วนที่ "เรียกตัวเองอีกครั้ง" แต่
เปลี่ยนค่าพารามิเตอร์ ใช้ " ขับ
เข้าใกล้ Base Case มากขึ้น"
"ขยับ
Ilsyntax (ตัวอย่าง)
for (int i
}
if (i % 2
}
=
==
BASIC SYNTAX
0; i < 10; i++) {
continues
if (i
}
==
า){
break;
0) {
System.out.println(i);
//syntax (ตัวอย่าง)
int Pactorial(int n) {
// Base Case:
if (n <=
}
1) {
return 1;
เรียก า
ฟังก์ชั่นเดิม
// Recursive:
else {
*
return n
Factorial (n - 1);
}
BY CHAQUI.RL
ページ29:
8 ++ Chapter 6.1 - DATATYPE:PRIMITIVE ชนิดข้อมูล เกี่ยวกับบทนี้ “บทนี้จะแนะนำเกี่ยวกับชนิดข้อมูลต่าง ๆ ในภาษา JAVA รวมถึงการแปลงชนิดข้อมูล” 8
ページ30:
Java Programming -Dababype- DATA TYPE: PRIMITIVE Primitive Data type หรือ ชนิดของข้อมูลในภาษา Java นั้นมีทั้งหมด 8 ชนิด ชนิดข้อมูล ขนาด (Bit) Byte 6 ชนิดตัวเลข - ค่าต่ำสุด ค่าสูงสุด ใช้เก็บ 8 -128 127 จํานวนเต็มขนาดเล็ก short 16 -32,768 32,767 จํานวนเต็มขนาดกลาง int 32 -2,147,493,648 2,147,483,647 จํานวนเต็มทั่วไป long 64 -3,223,372,036,854,775,808 9,223,372,036,854,775,807 จํานวนเต็มขนาดใหญ่ float 32 ~1.4E-45 ~3.4638 ทศนิยมความแม่นยาเดียว double 64 ~4.9E-324 1.8E308 ทศนิยมความแม่นยำาคู่ 2 ชนิดพิษฐาน ชนิดขอมูล ขนาด (Bit) ค่าต่ำสุด ค่าสูงสุด ใช้เก็บ char 16 \u0000 luffff เก็บตัวอักษรแบบ Unicode 1 ตัว boolean 1 false true คาความจริง A BY CHAQUI.RL
ページ31:
Java Programming
DATA TYPE: PRIMITIVE
SuPPix ในภาษา Java
Suttix ในภาษา Java คือ ตัวอักษรที่เขียนต่อท้ายค่าคงที่ (Literal)
เพื่อระบุชนิดข้อมูลที่ต้องการใช้โดยตรง แม้ค่าเดิมจะถูกตีความเป็นชนิดอื่นโดย
ปริยาย ตัวอย่างเช่น ถ้าเขียน 3.14 โดยไม่ใส่ Suttix ค่าจะเป็น double
อัตโนมัติ แต่ถ้าใส่ 3.146 ค่าจะถูกมองเป็น Ploat ทันที
Suffix
ใช้กับชนิดข้อมูล
ตัวอยาง
L หรือ I
long
100L
F หรือ P
float
3.14F
D หรือ d
double
3.14D
หมายเหตุ
ใช้ ตัวใหญ่จะชัดเจนกว่า เพราะ ! เล็กอาจสับสน
บเลข 1
ถ้าไม่ใส่ SuPPix จะเป็น double โดยอัตโนมัติ
ปกติไม่จำเป็นต้องใส่ เพราะค่าทศนิยมเป็น double
อยู่แถว
Lalai Suffix
int (จํานวนเต็ม), double
(ทศนิยม)
100, 3.14
เป็นค่า default ถ้าไม่ใส่
SuffixEx.java
X
public class SuffixEx {
public static void main(String[] args) {
}
long population = 7800000000L;
float pi
= 3.14159F;
double g = 9.81D;
}
แล้วถ้าเราทะลึ่งไม่ใส่ F ตาม
หลง เพราะขี้เกียจหละ!?
จะได้ไหม?????
(คําตอบหน้าถัดไป)
BY CHAQUI.RL
ページ32:
Java Programming เฉลยจากหน้าก่อนหน้า....... float pi . = DATA TYPE: PRIMITIVE 3.14159; ฟัง!!!!!!!!! เพราะใน Java ตัวเลขทศนิยมที่เขียนตรงๆ (เช่น 3.14159) จะ ถูกมองเป็น double นั่นเอง!! Ploat ใช้ 32 บิต แต่ double ใช้ 64 บิต ดังนั้น การเอา double มาใส่ใน Ploat คือการ แปลงจากชนิดใหญ่ เป็น ชนิดเล็ก ซึ่ง Java ไม่ ยอมทำให้อัตโนมัติ ต้องบอกให้ชัดว่าจะยอมให้แปลง Type casting ในภาษา Java Implicit Casting (Auto) แปลงโดยอัตโนมัติ เมื่อแปลงจาก ชนิดเล็กไปใหญ่ ตัวอย่าง: int - long - double int a = 10; double b = 3; /* ทำงานได้ (Implicit) (int → double) * โพย Primitive Data type เล็ก → ใหญ่ byte - short - int - long → Float - double Explicit Casting (Manual) ต้องระบุ type ปลายทางในวงเล็บ เมื่อแปลงจากชนิดใหญ่ไปเล็ก (979 สูญเสียข้อมูล) ตัวอย่าง: double - int double x = 10.5; int y = (int) x; /* y ทศนิยมทิ้ง)*/ = 10 (ตัด BY CHAQUI.RL
ページ33:
8 ++ Chapter 6.2 - DATATYPE-STRING ข้อมูลแบบสตริง เกี่ยวกับบทนี้ “บทนี้จะแนะนําเกี่ยวกับข้อมูลแบบสตริง ชุดของตัว อักษรหลาย ๆ ตัว) หรือที่เรียกง่าย ๆ ก็คือ ข้อความ นั่นเอง” 8
ページ34:
Java Programming
DATA TYPE: STRING
.
STR
lo
-String-
String ในภาษา Java ไม่ใช่ Primitive Type!! (ไม่เหมือน int,
boolean) แต่เป็น Class (Reference Type) ถึงมันจะใช้ง่ายเหมือน
Primitive Data type ก็ตาม อย่าสับสน!!
การประกาศใช้ String
• ถึง String จะเป็น Class แต่เวลาจะ
ใช้ ไม่ต้อง Import เพราะ String
อยู่ใน Package java.lang
แม้เป็น Class แต่ Java ยอมให้เรา
สร้างมาง่ายๆ ด้วยเครื่องหมาย ""
(Double Quote) ได้เลยโดยไม่ต้อง
ทอม ตลอดเวลา
ING
String a = new String("Hello");
ก็ได้ ไม่ต้อง new เสมอ
//ใช้
|| ||
String b
=
"Hello";
•
String Immutability
เมื่อสร้าง String มาแล้ว แก้ไข
ค่าข้างในไม่ได้
• แต่ถ้าทำการแก้ค่า มันจะ ไม่ Error
แต่ Java จะสร้าง Memory คอน
ใหม่เลย ไม่ได้แก้ที่ก้อนเดิม
String s = "Java";
S =
"Deluxe";
//แ ค่า
=
สร้างเมฆก้อนใหม่!
String s = "Java";
S = "Deluxe";
Java
S
Java
S
New!
Deluxe
BY CHAQUI.RL
ページ35:
Java Programming
การตอ ขอความ
• เราสามารถนำ String มาต่อกันได้
โดยใช้ เครื่องหมาย +
• ถ้าเอา ตัวเลข + String ผลลัพธ์จะ
+
กลายเป็น String เสมอ
DATA TYPE: STRING
String s = "Java" + "Deluxe";
//"Java Deluxe"
String intS
//"30 Baht"
=
10+20+"Baht";
String sInt = "Baht" + 10 +
20;
//"Baht1020"
.
การเปรียบเทียบ String
ห้ามใช้ :: ในการเปรียบเทียบ!!
==
• == : เช็คว่า "เป็นวัตถุก้อนเดียวกัน
ในเมมโมรี่ไหม?"
• equals() : เช็คว่า "ตัวอักษรข้างใน
เหมือนกันไหม?"
String a = "Hello";
String b "Hello";
if (a
==
=
b) { ... } //ผิด!!
if (a.equals(b)) { ... } //ถูก!!
Method ยอดนิยม
หน้าที่
ตัวอยาง
ผลลัพธ
.length()
นับจํานวนตัวอักษร
"Hi".length()
2
.toUpperCase()
แปลงเป็นตัวพิมพ์ใหญ่
"java".toUpperCase()
"JAVA"
.toLowerCase()
แปลงเป็นตัวพิมพ์เล็ก
"JAVA".toLowerCase()
"java"
.trim()
ต๊ดชองวางหนา-หลัง
"ok ".trim()
"ok"
.indexOf(str)
หาตาแหนงค้า
"Cat".indexOf("a")
1
.charAt(index)
ดึงตัวอักษรตามตำแหน่ง
"Cat".charAt(0)
0
BY CHAQUI.RL
ページ36:
8 ++ Chapter 6.3- DATATYPE:COLLECTION ข้อมูลแบบคอลเลคชัน เกี่ยวกับบทนี้ “บทนี้จะแนะนําเกี่ยวกับข้อมูลแบบคอลเลคชันได้แก่ ARRAY, ARRAYLIST, HASHMAP" 8
ページ37:
Java Programming
Array
DATA TYPE: COLLECTIONS
Array ในภาษา Java ไม่ใช่ Primitive Type !! เช่นเดียวกับ String
เลย Innay เป็นเหมือนตู้เก็บของที่มีหลาย ๆ ช่อง แต่ละช่องจะมีหมายเลขบอก
ว่าเป็นช่องที่เท่าไหร่ (index) และทั้งตู้เก็บของประเภทเดียวกันหมด
การประกาศใช้ array
• Array ไม่จำเป็นต้อง import อะไร
เพิ่มใช้ได้เลย
• เวลาประกาศเราจะต้องระบุขนาดให้
ชัดเจนตั้งแต่แรกเลย ไม่สามารถยืด
หรือหดขนาดได้
• สามารถใส่ข้อมูลลงไปตั้งแต่ตอน
ประกาศ หรือ ค่อยอัพเดตหลังจากจอง
พื้นที่ไว้แล้วก็ได้
Array: scores
int[] scores = new int[5];
scores[0] = 80;
scores[4] = 95;
int[] ages
=
=
{18,0,0,0,21};
index
0
1
2
3
4
value
80
0
0
0
95
Array: ages
index
0
1
2
3
value
18
0
0
0
21
BY CHAQUI.RL
ページ38:
DATA TYPE: COLLECTIONS
Java Programming
ค่า Default ของ Array แต่ละชนิด แล้วถ้าไม่กำหนดค่าให้มันละพี่!!
• ตัวเลข (int, double): 0 หรือ 0.0
.
ตรรกะ (boolean): false
• วัตถุ (String, Object): null
การเข้าถึงและแก้ไขข้อมูลใน Array
seones
int[] scores = {10, 20, 30};
// อ่านค่า (ใช้ Index)
int x = scores[0]; // 10
// แก้ไขค่า (ใช้ Index)
scores[1] = 99; // 20 -> 99
scores
10
20 30
10
20
30
scores
10
99
30
การหาความยาวของ Array (Length)
int size
=
scores.length;
คำเตือน : length ห้ามมีวงเล็บ () นะ !!
การวนลูปเข้าถึงสมาชิกใน Array (Iteration)
For loop
for (int i = 0; i < scores.length; i++) {
System.out.println("Index
+ i + ":
"I
+
scores[i]);
}
for (int score : scores)
System.out.println(score);
} //ชนิดข้อมูลที่ใช้ต้องตรงกับของ Array scores ด้วย!!
For each
BY CHAQUI.RL
ページ39:
Java Programming
Array vanum (Multidimensional Array)
DATA TYPE: COLLECTIONS
• เวลาสร้าง Array 2 มิติให้เรานึกถึงภาพ ตารางที่มีแถวและคอลัมน์
matrix
int[][] matrix
{4, 5, 6} };
{ {1, 2, 3},
1
2
3
4
5
6
การเข้าถึงข้อมูล ใช้ Index เหมือนเดิม โดยเราจะเริ่มจาก Index ของแถว ตาม
ด้วย Index ของคอลัมน์ ของข้อมูลที่เราต้องการ
• เช่น ต้องการเข้าถึงข้อมูลเลย 4 จากภาพด้านบนเราพบว่า
เลข 4 อยู่แถวที่ 2 (Index = 1) และ คอลัมน์ที่ 1 (Index = 0)
จะได้ว่า int Poun
=
=
matrix[1][0]; นั่นเอง
import java.util.Arrays;
Class สําเร็จรูปสุดโกง ที่ช่วยจัดการ Array
ตัวอย่าง method ที่ทำให้ชีวิตง่ายขึ้นล้านเท่า!!
• sort) : ใช้เรียงลำดับจากน้อยไปมาก
•
.
.toString(array) : ปริ้นท์ดูค่าใน Array ถ้า print (data) เฉยๆ จะ
ได้เลขที่อยู่ Memory อ่านไม่รู้เรื่อง ต้องแปลงเป็น String ก่อน
binarySearch (array, x) : ค้นหาข้อมูล (ค่า x) (คืนค่าเป็น Index)
int[] data
=
{5, 1, 9, 3};
Arrays.sort(data);
// ผล: {1, 3, 5, 9
System.out.println(Arrays.toString(data));
|| ผล: [1, 3, 5, 9]
int index =
// ผล: 0
Arrays.binarySearch(data, 5);
BY CHAQUI.RL
ページ40:
Java Programming DATA TYPE: COLLECTIONS ArrayList- เบื่อไหม? การที่จะสร้าง Array แล้วต้องมาคิดว่าจะสร้างขนาดเท่าไหร่ดี? แล้วถ้าเราไม่สามารถคาดเดาได้ล่วงหน้าล่ะว่าจะจองพื้นที่เท่าไหร่ดี? ลอง เปลี่ยนมาใช้ ArrayList !! เป็น array ที่ "ยืดหดขนาดได้เองอัตโนมัติ" (Dynamic Array) ไม่ต้อง าหนดขนาดล่วงหน้า การประกาศใช้ ArrayList • การจะใช้ ArrayList จำเป็นต้อง import java.util.ArrayList; เพิ่มก่อนใช้งาน • เวลาประกาศเราจะไม่ต้องระบุขนาด ให้ชัดเจนตั้งแต่แรกเพราะ ArrayList สามารถ ด/หดขนาดได้ • ArrayList เก็บ Primitive Type โดยตรงไม่ได้ ต้องเก็บเป็น Wrapper Class เท่านั้น เช่น Integer, Double, String Wrapper Class import java.util.ArrayList; ArrayList<String> names = new ArrayList<>(); ArrayList<Integer> scores = new ArrayList<>(); • Class ที่ทำหน้าที่ "ห่อหุ้ม" ข้อมูลพื้นฐาน (Primitive Type) → วัตถุ (Object) นิยมใช้กับ Collection (เช่น ArrayList) ที่รองรับเฉพาะ Object . Primitive Type int char double boolean byte long float Wrapper Class Integer Character Double Boolean Byte Long Float (ข้อสังเกต: เปลี่ยนแค่ขึ้นต้นตัวใหญ่ ยกเว้น int กับ char ที่เปลี่ยนชื่อเป็นชื่อเต็ม) BY CHAQUI.RL
ページ41:
Java Programming • การเพิ่มข้อมูลเข้า ArrayList DATA TYPE: COLLECTIONS ใช้ .add(x) เพื่อเพิ่มข้อมูล (1) ที่ต้องการไปที่ท้าย ArrayList • หากต้องการเจาะจงด้วยว่าจะแทรก (1) ลงตำแหน่งไหนของ ArrayList สามารถทำได้โดยการระบุ Index ติดไปด้วย .add(index,y) scores.add(10); // ต่อท้าย: [10] scores.add(20); // ต่อท้าย: [10, 201 scores.add(1, 15); // แทรกที่ index 1: [10, 15, 20 การเข้าถึงและแก้ไขข้อมูลใน ArrayList scores 10 scores 10 20 scones 10 15 20 • ใช้ .get(index) ในการเข้าถึงค่าในตำแหน่งที่ต้องการ ใช้ set (index, x) ในการเปลี่ยนค่าในตำแหน่งที่ต้องการ int x = scores.get(0); II ได้ค่า 10 scores.set(0, 99); // เปลี่ยนค่าที่ index 0 เป็น 99 scones 10 15 20 scores 99 15 20 การหาความยาวของ ArrayList int size = scores.size(); คำเตือน : รอบมีวงเล็บ () แล้วนะ !! เพราะเรากำลังใช้ method BY CHAQUI.RL
ページ42:
Java Programming
การลบข้อมูลใน ArrayList
• ใช้ remove (index) เพื่อลบข้อมูลในตำแหน่งที่ต้องการ
• ใช้ .clear() เพื่อล้างข้อมูลทั้งหมดออกจาก ArrayList
scores.remove(0);
// ลบตัวที่ index 0
scores.clear();
// ลบเกลี้ยงทั้ง List
DATA TYPE: COLLECTIONS
scores
15
20
scopes
XX
การวนลูปเข้าถึงสมาชิกใน ArrayList (Iteration)
for (int i = 0; i < scores.length; i++) {
}
System.out.println("Index" + i + + scores.get(i));
For loop
for (Integer score : scores) {
System.out.println(score);
} //Wrapper Class ที่ใช้ต้องตรงกับของ scores ด้วยนะ!!
ARRAY VS ARRAYLIST (คุณสมบัติเบื้องต้น)
คุณสมบัติ
Array []
ArrayList
ขนาด
คงที่ (Fixed)
ยืดหดได้ (Dynamic)
ประเภทขอมูล
ได้หมด
เป็น Object
การหาความยาว
.length (property)
.size() (method)
For each
BY CHAQUI.RL
ページ43:
Java Programming ARRAY VS ARRAYLIST (การเข้าถึงข้อมูล) คุณสมบัติ Array [] ArrayList การดึงข้อมูล (Get) var = arr[index] var = list.get(index) การแก้ไขข้อมูล (Set) arr[index] = value list.set(index, value) การเพิ่มข้อมูล (add) ทําไม่ได้ (ขนาดคงที่ ต้อง สร้างใหม่ถ้าจะเพิ่ม) list.add(value) การลบขอมูล (Remove) ทําไม่ได้ (ต้องเขียนโค้ด เลื่อนตำแหน่งเอง) list.remove(index) DATA TYPE: COLLECTIONS Common Utilities สำหรับ ArrayList ตัวอย่าง method ที่ทำให้ชีวิตง่ายขึ้นล้านเท่า!! import java.util.Collections; • contains (x) : ตรวจสอบว่า ArrayList มีข้อมูล (1) ไหม • .indexOf(x) : หาตำแหน่ง (Index) ข้อมูล (x) (ไม่เจอคืนค่า -1) • .sort (arrayList) : เรียงลำดับข้อมูลจากน้อยไปมาก • .tonnay (new array) : แปลงเป็น 0rray ธรรมดา ArrayList<Integer> nums = new ArrayList<>(List.of(5, 1, 9)); boolean hasFive nums.contains(5); // true = int index = nums.indexOf(9); 11 ได้ 2 (ถ้าไม่เจอจะได้ -1) Collections.sort(nums); // ผล: [1, 5, 3] Integer[] arr = nums.toArray(new Integer[0]); BY CHAQUI.RL
ページ44:
Java Programming DATA TYPE: COLLECTIONS -Hashmap- แล้วถ้าไม่อยากใช้ Index ในการเข้าถึงข้อมูลล่ะ? งั้นเราเปลี่ยนมาใช้ Hashmap จีน! ซึ่ง Hash map เป็น Data Structure ที่เก็บข้อมูลแบบ "คู่" (Hey-Value Pair) เหมือน "พจนานุกรม" ที่เราใช้ คำศัพท์ (Hey) เป็ เพื่อหา ความหมาย (Value) คำศัพท์ การประกาศใช้ Hashmap • การจะใช้ Hashmap จำเป็นต้อง import java.util.HashMap; เพิ่มก่อนใช้งาน เวลาประกาศเราจะไม่ต้องระ เช่นเดียวกับ ArrayList งระบุขนาด • Hashmap ห้ามใช้ Primitive Type ต้องเก็บเป็น Wrapper Class ทั้ง Hey และ Value เท่านั้น (ถ้ายังไม่ เข้าใจว่า Wrapper Class คืออะไร ย้อนไปอ่านที่ ArrayList ก่อนนะ!!) scopes Key ความ หมาย Value import java.util.HashMap; HashMap<String, Integer> scores = new HashMap<>(); HashMap<String, String> capitals = new HashMap<>(); คะแนน (String) (Integer) ประเทศ (String) Key Value Key capitals เมืองหลวง (String) Value BY CHAQUI.RL
ページ45:
DATA TYPE: COLLECTIONS
Java Programming
.
การเพิ่มข้อมูลเข้า Hash map | การแก้ไขข้อมูล
ใช้ put (key, value) ในทั้งการเพิ่ม/แก้ไขใน Hashmap
capitals.put("Thailand", "Bangkok");
// เพิ่มใหม่
capitals.put("Japan", "Tokyo");
// เพิ่มใหม่
capitals.put("Thailand", "Krung Thep");
// ทับค่าเดิมของ Bey "Thailand"
.
NEW!
capitals
capitals
Thailand
Thailand
New!!
Bangkok
Japan
Bangkok
Tokyo
EDITED!
capitals
Thailand
Japan
Krung Thep
Tokyo
การเข้าถึงข้อมูลใน Hash map
ใช้ get (key) ในการเข้าถึงค่าของ key ที่ต้องการใน Hashmap (key ไม่ตรง = null)
String city = capitals.get("Japan");
|| ได้ "Tokyo"
String unknown = capitals.get("Mars");
=
=
// ถ้าไม่มี
Key
นี้ จะได้ null
capitals
Thailand
Japan
Krung Thep
Tokyo
BY CHAQUI.RL
ページ46:
Java Programming
การหาความยาวของ Hashmap
DATA TYPE: COLLECTIONS
int count = capitals.size();
การลบข้อมูลใน Hashmap
ข้อสังเกต : ใช้เหมือน ArrayList
• ใช้ remove (key) เพื่อลบข้อมูลโดยใช้ key เพื่อลบค่าที่ต้องการ
.
.
ใช้ .clear() เพื่อล้างข้อมูลทั้งหมดออกจาก Hashmap
capitals.remove("Japan");
// ลบค่าของตัวที่มี
ของตัวที่มี key เป็น Japan
capitals.clear();
// ลบเกลียงทั้ง List
Thailand
Krung Thep
capitals
Remove!
capitals
and
gep
Clear!
การวนลูปเขาถึงสมาชิกใน Hashmap (Iteration)
• Hashmap ไม่สามารถเข้าถึงข้อมูลผ่าน Index จึงไม่สามารถใช้ For loop ปกติได้
• เริ่มด้วยการใช้ keySet () เพื่อดึง Collection ของ keys ทุกตัวออกมาก่อน จากนั้น
ใช้ Por each วนเพื่อใช้ key ทีละตัวเพื่อเข้าถึงค่า Value แต่ละ key ในแต่ละรอบ
for (String country : capitals.keySet()) {
System.out.println(country
+
+
capitals.get(country));
} //Wrapper Class ที่ใช้ต้องตรงกับของ capitals ด้วยนะ!!
BY CHAQUI.RL
ページ47:
Java Programming
.
.
การวนลูปเข้าถึงสมาชิกใน Hashmap (Iteration) (ต่อ)
DATA TYPE: COLLECTIONS
อีกหนึ่งลูป Por each ที่มีประสิทธิภาพดีกว่าถ้าต้องการใช้ทั้ง Hey และ Value พร้อมกัน
วิธีนี้จะใช้ .entrySet () เพื่อดึง Collection ของ "คู่" Keys และ Values ทุกตัวออก
มาก่อน จากนั้นใช้ Por each 3นเก็บค่า entry ทีละคู่ จากนั้น เข้าถึง key ด้วย
getkey() และ เขาถึง value ด้วย .setValue()
}
for (Map.Entry<String, String> entry : capitals.entrySet()) {
System.out.println(entry.getKey() .
"I
+
-> + entry.getValue());
Common Utilities สำหรับ Hashmap #ไม่ต้อง Import อะไรเพิ่ม
ตัวอย่าง method ที่ทำให้ชีวิตง่ายขึ้นลานเท่า!!
.
• .contains Key (key) : เช็คว่ามี Hey นี้ไหม? (True/False)
• .contains Value (value) : เช็คว่ามี Value นี้ไหม? (True/False)
:
• get or Default (key, default Value) : ดึงค่าออกมา ถ้าไม่มีให้ใช้ค่า Default
boolean hasKey
capitals.containsKey("Thailand");
ได้ค่า True เพราะมี Hey Thailand อยู่จริง
boolean hasValue = capitals.containsValue("London");
ได้ค่า False เพราะไม่มี Value London อยู่จริง
String capital = capitals.getOrDefault("Laos", "Unknown");
ได้ค่า "Unknown" หา Hey Laos ไม่เจอ (ไม่มี)
Collections ยังมีอีกเพียบ
จึงขอยกตัวอย่างแค่ที่
เจอบ่อยๆนะ
DI
(ไม่ได้ขอ.นะวอย><)
BY CHAQUI.RL
ページ48:
8 ++ Chapter 7 - ACCESS MODIFIERS ตัวระบุสิทธิ์การเข้าถึง เกี่ยวกับบทนี้ “บทนี้จะแนะนําตัวระบุสิทธิ์การเข้าถึงในภาษา JAVA ที่ จะมีผลต่อระดับการเข้าถึง / เรียกใช้ ตัวแปร คลาส เมธอด” 8
ページ49:
Java Programming Access Modifier- Modifiers ใน Java สามารถแบ่งได้ 2 ประเภท Access Modifiers ควบคุมการเข้าถึง . * public: ใช้ได้จากทุกที่ ACCESS MODIFIERS protected: ใช้ได้ในคลาสเดียวกัน, แพ็กเกจเดียวกัน และคลาสลูก • private: ใช้ได้ในคลาสเดียวกันเท่านั้น Non-Access Modifiers เปลี่ยนพฤติกรรมของคลาส/เมธอด/ตัวแปร • static: ใช้กับ Method สถิต | ตัวแปรสถิต • Pinal: ค่าหรือเมธอดที่เปลี่ยนไม่ได้ | คลาสที่สืบทอดไม่ได้ • abstract: คลาสหรือเมธอดที่เป็นนามธรรม ต้องให้คลาสลูกมาสืบทอด/ เขียนต่อ synchronized: ใช้กับเมธอด/บล็อกให้ทำงานทีละเรด ป้องกันปัญหาการ เขาถึงพร้อมกัน • native: เมธอดที่เขียนด้วยภาษาอื่น (เช่น C/C++) แล้วเชื่อมกับ Java • strictep: บังคับให้การคำนวณเลขทศนิยมใช้มาตรฐาน IEEE 154 เดียวกันทุกแพลตฟอร์ม Static Method VS Static Variable VS เมธอดสถิต (Static method) . เป็นเมธอดที่เป็นของ คลาส ไม่ใช่ของออปเจค เรียกใช้ได้โดยตรงผ่านชื่อคลาส โดยไม่ต้องสร้างออปเจด ตัวแปรสถิต (Static Variable) . . เป็นตัวแปรที่เป็นของ คลาส เหมือนกัน • มี ค่าเดียวร่วมกัน สำหรับทุกออปเจด ที่สร้างจากคลาสนั้น • เหมาะสำหรับเก็บข้อมูลที่ใช้ร่วมกัน เช่น ตัวรับ (counter) BY CHAQUI.RL
ページ50:
a Chapter 8 OPERATORS ตัวนําเนินการ เกี่ยวกับบทนี้ “บทนี้จะแนะนำตัวดำเนินการประเภทต่าง ๆ รวมถึง แสดงตัวอย่างประกอบ 8
ページ51:
Java Programming
-Operators-
1. Arithmetic Operators (คณิตศาสตร์)
สัญลักษณ์
ความหมาย
ตัวอยาง (3-10, b=3)
ผลลัพธ
OPERATORS
ขอควรระวัง
("A"+"B" -> "AB")
+
บวก
a + b
13
ใช้ต่อ String ได้
*
ลบ
a-b
7
คูณ
a*b
30
/
หาร
a/b
3
Integer หารจีน ทศนิยม
จะหาย!
%
การเอาเศษ
(Modulo)
a % b
1
2. Logical Operators (ตรรกะ)
สัญลักษณ์
ความหมาย
เงื่อนไข
ตัวอย่าง
&&
AND (และ)
จริงเมื่อ จริงทั้งคู่
(คะแนน > 50) && (มาเรียนครบ)
||
OR (หรือ)
จริงเมื่อ มีอันใดอันหนึ่งจริง
(มีบัตรสมาชิก) || (จ่ายเงินสด)
!
NOT (ไม่)
กลับคา
(จริง->เท็จ, เท็จจริง)
lisValid
BY CHAQUI.RL
ページ52:
Java Programming 2. (mǝ) Logical Operators (øssas) (with Truth table) XY X && Y X Y X || Y X !X T T T T T T T F T F F T F T F T F T F T T F F F F F F 3. Relational Operators (เปรียบเทียบ) สัญลักษณ์ ความหมาย OPERATORS ตัวอยาง (x=5) ผลลัพ เทา บ X == 5 true ไม่เท่าโบ x != 5 false > มากกว่า x > 3 true V น้อยกว่า X<5 false >= มากกว่าหรือเท่า บ X >= 5 true <= น้อยกว่าหรือเท่ากับ x <= 10 true BY CHAQUI.RL
ページ53:
Java Programming 4. Unary Operators (เพิ่ม/ลดค่า) โด ประเภท ความหมาย OPERATORS วิธีจ่า ++i Prefix เพิมคากอน แลวคอยใช บวกก่อนใช้ i++ Postfix เอาค่าไปใช้ก่อน แล้วค่อยบวก ใช้ก่อนบวก int a = 10%; int b = ++a; // 3 เป็น 11 ก่อน, แล้ว 6 ได้ 11 (3-11, 6-11) int x = 10; int y = X++; // y ได้ 10 ก่อน, แล้ว X ค่อยเป็น 11 (x-11, 9-10) 5. Unary Operators (ติดลบ(-)/ติดบวก(+)) โดด ความหมาย +X ติดบวก -X ติดลบ หน้าที่ ระบุว่าค่านี้เป็น "ค่าบวก" ใช้ "กลับเครื่องหมาย" จากบวกเป็น อบ / ลบเป็นบวก โน้ต แทบไม่มีผลอะไรเลยกับค่าตัวเลข เพราะปกติกาเราเขียน เช่น int x = 5; มันก็เป็นบวกอยู่แล้ว BY CHAQUI.RL
ページ54:
Java Programming
6. Assignment Operators (กำหนดค่าแบบย่อ)
.
.
แบบขอ
แบบเต็ม
X += 5
X = x + 5
X -= 2
x = x − 2
x *= 3
x = x * 3
ความหมาย
เพิ่มค่า x ไปอีก 5
ลดคา x ลง 2
OPERATORS
เอา x คูณ 3 แล้วเก็บค่าเดิม
x /= 2
X = x / 2
เอา x หาร 2 แล้วเก็บค่าเดิม
x %= 2
X = x % 2
เอา X การเอาเศษ 2 แล้วเก็บค่าเดิม
1. Ternary Operator (กำหนดค่าแบบมีเงื่อนไข)
รูปย่อของ if-else เหมาะกับการกำหนดค่าง่ายๆ
โครงสร้าง: (เงื่อนไข) ? ค่าว่าจริง : ค่าถ้าเท็จ
// แบบปกติ
int score;
if (point > 50) {
score = 100;
} else {
score = 0%;
}
// แบบ Tennany (บรรทัดเดียวจบ)
int score = (point > 50) ? 100 : 0;
BY CHAQUI.RL
ページ55:
Java Programming 8. ลำดับความสำคัญของตัวดำเนินการ (Operator Precedence) ลาดับ กลุ่ม ต๊วด้าเนินการ OPERATORS รายละเอียด 1 (สูงสุด) Parentheses () ทำในวงเล็บก่อนเสมอ (ใช้บังคับลำดับ) ++, --, !, + (Unary), 2 Unary เพิ่ม/ลดค่าก่อน, ติดบวก, ติดลบ - (Unary) 3 คูณ หาร *, /, % คูณ, หาร, การเอาเศษ บวก/ลบ บวก, ลบ 5 เปรียบเทียบ <, <=, >, >= มากกว่า, น้อยกว่า 6 ความเท่า น ==, != เท่ากับ, ไม่เท่ากับ 7 Logical AND && และ (ใช้เชื่อมเงื่อนไข) 8 Logical OR || หรือ (ใช้เชื่อมเงื่อนไข) Ternary ? : กําหนดค่าแบบมีเงื่อนไข 10 (ต่ำสุด) กําหนดค่า =, +, -, /=, %= กำหนดค่า (ทำทีหลังสุดเสมอ) เชน x = 6+(1+2)*? เราจะเริ่มทำ (1+2) ก่อน เพราะ () มี Precedence สูงสุด ได้เป็น x = + 6.3*3 ต่อมาจะทำ 2*3 ต่อเพราะ * มี Precedence สูงกว่า 4 ได้เป็น x ลิ้น x = 15 และปิดท้ายด้วย = (กำหนดค่า) แล้วก็ทํา + + ต่อได้เป็น ที่มี Precedence ต่ำสุด = 6+9 BY CHAQUI.RL
ページ56:
8 ++ Chapter 9 VARIABLE TYPE ตัวแปรประเภทต่างๆ เกี่ยวกับบทนี้ “บทนี้จะแนะนำตัวแปรประเภทต่าง ๆ และขอบเขตการ ใช้งานของมัน " 8
ページ57:
Java Programming
-Variable type-
VariableEx.java
X
VARIABLE TYPE
class VariableEx {
static int objCounter = 0; static variable (ใช้ร่วมกันทุกออปเจค)
instance variable (แต่ละอ็อบเจกต์มีค่าเป็นของตัวเอง)
int x = 1;
}
VariableEx() {
}
objCounter++;
public void add Number (int y, int z) {
int a = 2;
Parameter ค่าที่รับเขา method
local variable (ใช้ได้แค่ในเมธอดนี้)
System.out.println(a + x + y + z);
}
public class Main {
public static void main(String[] args) {
}
VariableEx varEx = new VariableEx();
varEx.addNumber (1, 2);
Actual argument คาที่สูงเขา Method
System.out.println("Instance variable: " + varEx.x);
System.out.println("Total object created: " + varEx.objCounter);
}
BY CHAQUI.RL
ページ58:
Java Programming Variable static variable instance variable ประเภทของ Variable ใน Java ขอบเขตการใชงาน คําอธิบาย VARIABLE TYPE ใช้ได้ ทั่วทั้งโปรแกรม โดยเรียกผ่าน ชื่อ คลาส ถูกแชร์ระหว่างทุกอ็อบเจกต์ของคลาสนั้น ถูกสร้างเมื่อโปรแกรมเริ่มทำงาน และถูกทำลายเมื่อโปรแกรม ลบ • มักใช้เก็บค่าที่ใช้ร่วมกัน เช่น ตัวนับอ็อบเจกต์ (object counter) ใช้ได้ ทั่วทั้งคลาส และต้องเข้าถึงผ่าน อ็อบเจ จต . . ประกาศ ภายในคลาส แต่ภายนอกเมธอด ไม่ต้องทําหนดค่าเริ่มต้น (มีค่า default เช่น int = 0, boolean = Palse) ถูกสร้างเมื่ออ็อบเจกต์ถูกสร้าง และถูกทำลายเมื่ออ็อบเจกต์ถูก ทําลาย • แต่ละอ็อบเจกต์จะมี ค่า instance variable เป็นของตัวเอง • สามารถใช้ access modifier (public, private, protected) ได local variable ใช้ได้เฉพาะ ภายในเมธอดหรือบล็อกที่ ประกาศเทา น . Parameter ใช้ได้เฉพาะ ภายในเมธอดที่ประกาศ • Actual Argument ใช้เฉพาะตอนเรียกเมธอด และค่าจะถูกส่ง ไปยัง parameter . ประกาศ ภายในเมธอดหรือบล็อก (เช่น Por, it, while) • ต้องกําหนดค่าเริ่มต้นก่อนใช้งาน (ถ้าไม่กำหนดจะเกิด . . compile error) ถูกสร้างเมื่อเมธอด/บล็อกเริ่มทำงาน และถูกทำลายเมื่อเมธอด บล็อกจบการทํางาน • ไม่สามารถใช้ static หรือ access modifier (public, private, protected) ได้ ประกาศ ในวงเล็บของเมธอด เพื่อรับค่าจากผู้เรียกใช้ ถือเป็น local variable ประเภทหนึ่ง ถูกสร้างเมื่อเมธอดถูกเรียก และถูกทำลายเมื่อเมธอดจบการ ทํางาน • คือ ค่าจริงที่ส่งเข้าไปในเมธอด เมื่อมีการเรียกใช้ ต้องตรงกับ ประเภทข้อมูลของ parameter BY CHAQUI.RL
ページ59:
8 ++ Chapter 10 ENCAPSULATION การห่อหุ้มข้อมูล เกี่ยวกับบทนี้ “บทนี้จะแนะนำเมธอดที่ทำงานกับ VARIABLE ที่เป็น PRIVATE ใน OOP ซึ่งเกี่ยวของโดยตรงกับเสาหลักเรื่อง ENCAPSULATION" 8
ページ60:
Java Programming
CONCEPT: ENCAPSULATION
Getter & Setter Method
ถ้าเราลองพยายามแก้ไข / เข้าถึงค่าตัวแปรที่เป็น private จะเกิดอะไรขึ้น
myPet.java
class myPet {
X
private String petName = “Prayuth”;
ERROR
}
เข้าถึงไม่ได้!!
public class Main {
public static void main(String[] args) {
myPet dog = new myPet();
System.out.println("petName is: + dog.petName);
}
OK
แสดงว่าตัวแปร private ก็เข้าถึงจะคลาสข้างนอกไม่ได้เลย แล้วถ้าจะพิมพ์ชื่อน้องหม
ประยุทธ์ ต้องทำไงงงงงงงงงง...?
0). ปัญหาเกิดที่ private ใช่มั้ย!?
private public au!!!
class myPet {
public String petName = “Prayuth”;
=
แต่เป็นวิธีที่ดีจริง
ๆ
หรอ?
}
B). ข้อจำกัดของตัวแปร private
คือ “เข้าถึงได้ในคลาสเท่านั้น”
งั้นเราก็ สร้าง method ในคลาสนั้น
แล้วเรียก method ผ่าน Object
ในคลาส main สิ
class myPet {
private String petName = "Prayuth";
public String getPetName(){....}
public void setPetName(String name){
....}
}
BY CHAQUI.RL
ページ61:
Java Programming
CONCEPT: ENCAPSULATION
Main.java
X
import java.util.Scanner;
class myPet {
private String petName = "Prayuth";
public String getPetName() { Ussana getter & setter method
return petName;
}
public void setPetName(String petName) {
this.petName
=
petName;
public class Main { un getter & setter method w% Object
public static void main(String[] args) {
myPet dog = new myPet();
System.out.println("petName is: " + dog.getPetName());
Scanner scan = new Scanner(System.in);
String new PetName = scan.nextLine();
dog.setPetName(new PetName);
System.out.println("NEW petName is: " +dog.getPetName());
เขียนโปรแกรมแบบนี้ทั้งดีและปลอดภัย!!!
BY CHAQUI.RL
ページ62:
++ Chapter 11 INHERITANCE การสืบทอดคุณสมบัติ ระหว่างคลาส เกี่ยวกับบทนี้ “บทนี้จะแนะนำการสืบทอดตัวแปรและเมธอดจาก คลาสแม้ไปยังคลาสลูก" ◉ 8
ページ63:
Java Programming Class แม -Inheritance- CONCEPT: INHERITANCE • คุณสมบัติ (Attribute) และพฤติกรรม (Method) ที่อยู่ในคลาสแม่ สามารถ ถ่ายทอดไปสู่คลาสลูกได้ (ยกเว้นตัวที่มี access modifier เป็น private) Class ลูก . คลาสูกลูกต้องประกาศให้ Extends คลาสแม่เสมอ (มีแม่ได้สูงสุด 1 คลาส) • Object ในคลาสลูกสามารถเข้าถึงตัวแปร / เรียกใช้ method ที่อยู่ในคลาสแม่ ได้ (ยกเว้นตัวที่มี Access Modifier เป็น private ในคลาสแม่) . Constructor ในคลาสลูกต้องส่งต่อให้คลายแม่ด้วยการเรียก Constructor คลาส .. แม่ผ่าน super() Class แม Object เขาถึงตัวแปรคลาสแม่ red Class Vehicle String vColon honk() สราง Object String color: carA.vColor; = Object เรียกใช้ method Class an Object carA color = "red"; cara.accelerate(45); Class Can accelerate (int); cara.honk(); BY CHAQUI.RL
ページ64:
Java Programming
CONCEPT: INHERITANCE
}
Main.java
class Vehicle {
X
public String vColor;
ตัวแปรของคลาสแม
public Vehicle(String color) {
vColor
=
color;
Constructor ของคลาสแม
}
public void honk() {
System.out.println("Beep! Beep!"); method honk
}
คลาสแม
class Car extends Vehicle { กำหนดให้คลาสลูกถ่ายทอดคุณสมบัติจากคลาสแม่
public Car(String color) {
}
super(color);
Constructor amandan
#ใช้ super() เพื่อเรียก Constructor ของ
แม่ พร้อมส่ง color เป็น argument
คลาสลา
public void accelerate (int speed) {
System.out.println("Accelerating to
+ speed);
method accelerate
ของคลาส ก
public class Main {
public static void main(String[] args) {
Car carA = new Car("Red"); สราง Object ของคลาสลูก
System.out.println("Color: " + carA.vColor); anal
carA.honk(); เรียกใช้ Method ของคลาสแม่ได
carA.accelerate(45); เรียกใช้ method คลาสตัวเอง
}
}
BY CHAQUI.RL
ページ65:
++ - Chapter 12 ABSTRACTION ความเป็นนามธรรม ◉ เกี่ยวกับบทนี้ “บทนี้จะแนะนำเกี่ยวกับนามธรรม ซึ่งจะเกี่ยวข้องกับ INTERFACE และ ABSTRACT CLASS ในภาษา JAVA” 8
ページ66:
Java Programming
CONCEPT: ABSTRACTION
Library
Library เปรียบเหมือนกล่องเครื่องมือวิเศษ เราเห็นแค่ "ชื่อ Class"
และ "ชื่อ Method" (DPI) ที่เขาเปิดให้ใช้ (ดูจากเอกสารของเจ้าของ
Library) เพียงเท่านี้ สามารถใช้งานตามความต้องการของเราได้เลย โดยไม่
ต้องรู้ว่า Method ข้างในทำงานอย่างไร
ตัวอย่างการใช้ Library ใน Abstraction
• Import Library ที่ต้องการ (ในตัวอย่างนี้จะใช้ Path ซึ่งมีอยู่แล้วในแพ็กเกจ
java.lang จึงไม่ต้อม Import เพิ่ม)
• เขียนโปรแกรมของเราให้เรียกใช้ Public method ที่เขาเตรียมไว้ให้ (หาดูได้
จากเอกสารของ Library ที่เราต้องการใช้ เขาจะมีบอกว่า ต้อง Import ยังไง
มี method อะไรบ้างและรับ Parameter อย่างไรบ้าง) ในกรณีนี้เรารู้ว่าคลาส
Math มี method ชื่อ sqrt() ที่ทำหน้าที่หาค่าสูทของตัวเลขที่ส่งเข้าไป
• หน้าที่เดียวของเราคือ เรียกใช้ method sqrt ผ่านคลาส math ที่เรา Import
เข้ามา แค่นี้ เราก็จะได้คำตอบที่ต้องการโดยไม่ต้องรู้เลยว่าภายใน method sqrt
มีไส้ในเป็นยังไง
public class Main {
public static void main(String[] args) {
double number = 25.0;
double result = Math.sqrt(number);
}
}
System.out.println("Result:
+ result);
O
*ถ้าเราไม่ใช้เรื่อง Abstraction เข้ามาช่วย เราจะต้องเขียน method sqrt เอง!!
Lanang Math Class: https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Math.html
BY CHAQUI.RL
ページ67:
Java Programming
CONCEPT: ABSTRACTION
Interface
Interface คือหัวใจหลักของ Abstraction ในภาษา Java เลย!! โดย
มันจะเหมือนการที่เราสร้างข้อตกลงไว้ว่าจะให้มันทําอะไรได้บ้าง แต่เรื่องทํา
อย่างไร คลาสต้องเอาไปเขียนด้วยตัวเอง!! #Interface กำหนดว่าคลาสจะ
ต้องมี method อะไรบ้าง แต่จะเป็น method ที่ไม่มีไส้ใน (abstract
Method) และคลาสที่ประกาศให้ Implement Interface นี้จะต้องเขียนเอา
เองว่าจะให้มันทํายังไง
การประกาศ Interface
ประกาศด้วยคำว่า Interface แทน
.
คำว่า Class
• ตัวแปรใน Interface จะเป็น
Constants (public static Final)
เสมอ (แม้ไม่เขียนบอก)
(public static final int
MAX_COPIES
=
100; )
• Abstract method: มีแต่ชื่อ ไม่มี
ปีกกา {} และจบด้วย 3 (จริงๆ มัน
ต้องเขียนว่า "public abstract
void print();" แต่ Java ใจดี เติม
public abstract ให้เองอัตโนมัติ)
}
public interface Printable {
int MAX_COPIES
void print();
ขอตกลง --
=
100%;
คลาสใดก็ตามที่จะ Implement
Interface Printable จะต้องมี
Method print() และต้องเป็น public
ในคลาสนั้น ๆ ด้วยเสม
คําเตือน
Class ที่ Implement จะต้องมี Method ตาม Interface ให้ครบทุกอืน!!
ว่า Interface มี 5 method คลาสที่นำไปใช้ (implements) ก็ต้องเขียนโค้ดให้
ครบทั้ง 5 method ห้ามขาดแม้แต่อันเดียว
ถ้าขาดไปแม้แต่ตัวเดียว โปรแกรมจะฟ้อง Error ทันที (Compile ไม่ผ่าน)
BY CHAQUI.RL
ページ68:
Java Programming
การนำไปใช้ใน Class
• ประกาศให้ class .. implements interface ที่ต้องการ
CONCEPT: ABSTRACTION
• สร้าง method ตามที่ได้ตกลงกันไว้ใน Interface (อย่าลืม ว่า method ต้องเป็น
public!!) และ ระบุด้วยว่าจะให้มันทําอะไร
• @Override คือ Annotation (ป้ายกำกับ) เพื่อบอก Compiler ว่า "เมธอดนี้ ตั้งใจ
จะเขียนทับ ของ Interface (Abstract method) ประโยชน์คือ เอาไว้เช็คว่า
พิมพ์ชื่อถูกเป๊ะไหม ถ้าไม่ใส่ แล้วเราพิมพ์ชื่อผิด คอมพิวเตอร์จะนึกว่าเราสร้าง
Method ใหม่ เละ!!! (Note: เราจะเจอตัวนี้อีกครั้งในบทถัดไป (Polymorphism)
คนที่เราต้องการสร้าง Method ชื่อเดียวกันแต่ทำงานคนละอย่างกับ method ของ
คลาสแม่)
public class Printer implements Printable {
@Override
public void print() {
System.out.println("Printing document");
}
}
ประโยชน์ของ Interface
• ทำ Multiple Inheritance ได้: ช่วยให้ Class หนึ่งรับความสามารถได้หลายอย่าง
(แต่ข้อจำกัดที่ extends ได้แค่ 1 Class)
• สร้างมาตรฐาน: เป็น "ข้อตกลง" บังคับให้ทุก Class ตั้งชื่อ Method ตรงกันเป๊ะ
(ทํางานเป็นทีมง่าย)
• ลดการยึดติด: ทำให้โค้ดมีความยืดหยุ่น เปลี่ยนสลับไส้ใน (Class) ได้ง่ายโดยไม่
ต้องรื้อระบบใหม่
BY CHAQUI.RL
ページ69:
Java Programming
ตัวอย่างใช้งาน Interface
Main.java
X
interface Printable {
void print();
}
CONCEPT: ABSTRACTION
Interface
class Printer implements Printable {
ให้คลาส Print implements
Interface Printable
@Override
|}
public void print() {
System.out.println("Printing document... Success!");
} สร้าง method print() ตามที่มีใน Interface และใส่ไส้ใน (การ
ทำงาน) ให้มันด้วย!!
public class Main {
PUBLIC!!!!!!!!!!!!!!
public static void main(String[] args) {
Printable my Printer = new Printer();
myPrinter.print();
}
}
BY CHAQUI.RL
ページ70:
Java Programming
CONCEPT: ABSTRACTION
Abstract Class-
Abstract Class เป็นอีกหนึ่งเรื่องสำหรับ abstraction มันคือคลาสที่ยัง
สร้างไม่เสร็จ บางส่วนเขียนไปแล้ว บางส่วนในคลาส ลูกเอาไปเขียนต่อเอง
เป็นคล้าย ๆ Interface ที่กำหนดวิธีการทำงานไปบ้างบางส่วน ไม่ใช่ไม่
กำหนดอะไรเลย เหมาะกับกรณีที่เราต้องการสร้าง Object จากคลาส 2 คลาส
ที่แตกต่าง น และอยากให้การทํางานบางอย่าง เหมือนกันเป๊ะ! แต่บางอย่างให้
ต่างกันตามประเภทของคลาส
การประกาศ Abstract Class
• เพิ่ม abstract ที่หน้า Glass
• ตัวแปรใน abstract class ไม่จำเป็น
ต้องเป็น Constant!
• Concrete Method: เป็น method
ที่เขียนมาเรียบร้อยแล้ว #เป็นสิ่งที่
ต้องการให้คลาส ลูกทําแบบเดียวกันเป๊ะ!
เช่น สัตว์ทุกตัว นอนหลับเหมือนกัน
(เขียนให้ใน method ไปเลย)
• Abstract method: มีแต่ชื่อ ไม่มี
ปีกกา {}, จบด้วย ; และต้องเพิ่ม
abstract ไว้ด้านหน้า method ด้วย
#เป็นสิ่งที่ความถูกต้องการใช้คลายลูก
ทํา แต่ไม่จำเป็นต้องเหมือนกัน เช่น
สัตว์แต่ละตัวร้องไม่เหมือนกัน (เว้นไว้
ให้ลูกเขียน)
}
abstract class Animal {
}
String name;
public void sleep() {
System.out.println("Zzz);
abstract void makeSound();
Animal ant
X
ew Animal();
คําเตือน --
หามสราง Object จาก Abstract
Class เด็ดขาด!! ต้องสร้างจาก Class
เท่านั้น!!
BY CHAQUI.RL
ページ71:
Java Programming
การสืบทอดไปสร้าง Class ลูก
CONCEPT: ABSTRACTION
• ใช้ extends (ทำเหมือนเรื่อง Inheritance) เพราะ Animal คือ Class (แค่เป็น
แบบ abstract)
• สร้าง method ตาม Abstract method ใน abstract class ไม่ต้องสร้าง
Concrete method เพิ่ม (รอบนี้ไม่จำเป็นต้องใส่ Access modifier แล้ว!!)
และ ระบุด้วยว่าจะให้มันทำอะไร
• @Override คือ Annotation (ป้ายกำกับ) เพื่อบอก Compiler ว่า "เมธอด ตั้งใจ
จะเขียนทับ ของ Interface (Abstract method) ประโยชน์คือ เอาไว้เช็คว่า
พิมพ์ชื่อถูกเป๊ะไหม ถ้าไม่ใส่ แล้วเราพิมพ์ชื่อผิด คอมพิวเตอร์จะนึกว่าเราสร้าง
Method ใหม่ เละ!!! (Note: เราจะเจอตัวนี้อีกครั้งในบทถัดไป (Polymorphism)
ตอนที่เราต้องการสร้าง Method ชื่อเดียวกันแต่ทำงานคนละอย่างกับ method ของ
คลาสแม่)
public class Dog extends Animal {
@Override
void makeSound(){
System.out.println("Woof! Woof!");
}
}
ประโยชน์ของ Abstract class
• ลดโค้ดซ้ำซ้อน: สามารถเขียนโค๊ดส่วนที่เหมือนกันไว้ที่แม่ได้เลย (Concrete
Method) ลูกเอาไปใช้ได้ทันทีโดยไม่ต้องเขียนใหม่
.
.
• บังคับโครงสร้าง: ใช้ abstract method บังคับให้ถูกต้องมีฟังก์ชันนี้แน่นอน
(เหมือน Interface) แต่ยังยอมให้มีโค้ดส่วนกลางได้ด้วย
จัดการง่าย: ทำให้โค้ดดูเป็นระเบียบและจัดการง่ายในฐานะ Superclass เดียวกัน
BY CHAQUI.RL
ページ72:
Java Programming
ตัวอย่างใช้งาน Abstract class
Main.java
X
abstract class Animal {
}
CONCEPT: ABSTRACTION
คลาสแม
public void sleep() {
Concrete Method
System.out.println("Zzz... Sleeping");
#ลูก ๆ
ทําเหมือนกัน
abstract void makeSound();
Abstract Method
#an ไปเขียนเอาเอง
ๆ
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof! Woof!");
คลาสลูก (1)
Class ลูกเขียนของตัวเองจะให้ทำเสียง
ยังไง #หมาเห่า Woo! Woot!
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow~");
คลาสลูก (2)
Class ลูกเขียนของตัวเองจะให้ทำเสียง
ยังไง #แมวร้อง เหมียว
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
สร้าง Object ควยคลาสลูก หามสร้าง
โดยตรง
myDog.sleep(); //myCat.sleep(); ทำงานเหมือนกัน
myDog.makeSound();//myCat.makeSound();
เสียงรองคลาสใครคลาสมัน
}
}
BY CHAQUI.RL
ページ73:
8 ++ Chapter 13 - POLYMORPHISM การพ้องรูป/มีหลายรูปแบบ ◉ เกี่ยวกับบทนี้ “บทนี้จะแนะนำเกี่ยวกับการพ้องรูปในภาษา JAVA ซึ่ง จะเกี่ยวข้องกับ OVERLOADING IIละ OVERRIDING"
ページ74:
Java Programming
CONCEPT: POLYMORPHISM
-Overloading-
Overloading คือการที่เราใช้ชื่อเหมือนกันและอยู่ใน Class เดียวกัน
(แยกกันด้วย "จำนวน/ชนิดของตัวแปร") ซึ่งเป็นส่วนหนึ่งของคอนเซปต์ การ
ของรูป (Polymorphism) ในภาษา Java #ใช้ชื่อเหมือนกันแต่มีหลายรูปแบบ
Method Overloading
• สร้าง method ชื่อเดียวกันในคลาส
เดียวกันแต่ต้องมี Parameter ต่างกัน
(จำนวนไม่เท่ากัน หรือ ชนิดตัวแปร
ต่างกัน)
• จากโค้ดทางด้านขวาจะเห็นว่าเรามี
Method ชื่อ add เหมือนกันตั้ง 3 ตัว
ในคลาสเดียวกัน
o add ตัวที่ 1: รับ int 2 ตัว
o add ตัวที่ 2: รับ int 3 ตัว ซึ่ง
จำนวนต่างจาก Method ตัวที่ 1
o add ตัวที่ 3: รับ double 2 ตัว ซึ่ง
ประเภทต่างจาก Method ตัวที่ 1
ประโยชน์ของ Method Overloading
คนใช้ชื่อเดียวพอ (add) ไม่ต้องจำชื่อ
เยอะๆ (addTwolnt, addThree Int,
addDouble) as Argument aq
• คนเขียนก็สบายนะ ไม่ต้องคิดชื่อใหม่
เยอะแยะ :)
class Calculator {
}
}
}
}
int add(int a, int b) {
return a + b;
int add(int a, int b, int c) {
return a + b + c%;B
double add(double a, double b) {
return a + b;
int add(int int b) {...}
double add(in a, int b) {...}
X
คําเตือน
ห้ามเปลี่ยนแค่ Return Type !!
แล้วบอกว่าเป็น Overloading เพราะ
จะเกิด Error เนื่องจาก Compiler
แยกไม่ออก
BY CHAQUI.RL
ページ75:
Java Programming
ตัวอย่างใช้งาน Overloading method
Main.java
X
class Calculator {
CONCEPT: POLYMORPHISM
int add(int a, int b) {
add #1
return a + b;
บวกเลขจำนวนเต็ม 2 ตัว
}
int add(int a, int b, int c) {
return a + b + c;
}
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
add #2
บวกเลขจำนวนเต็ม 3 ตัว
add #3
บวกทศนิมยม 2 ตัว
}
}
System.out.println(calc.add(10, 20));
System.out.println(calc.add(10, 20, 30));
System.out.println(calc.add(5.5, 2.5));
Java ฉลาด! มันจะเลือก Method
ตรงกับค่าที่เราส่งไปให้เอง
BY CHAQUI.RL
ページ76:
Java Programming
CONCEPT: POLYMORPHISM
-Overriding-
Overriding คือการที่เราใช้ชื่อ Method และพารามิเตอร์เหมือนกันใน
คลาส แม่-ลูก และต้องการเขียนให้ Method คลาสลูกทำงานกับคลาสแม่ ซึ่งเรื่อง
นี้เราได้เจอไปก่อนหน้านี้แล้วในหัวข้อ Interface/abstract class บทก่อน
หน้าที่เราได้เขียนให้ method ในคลาสลูก กับ Abstract Method ในคลาส
แม่ที่มี และพารามิเตอร์เหมือนกันเป๊ะะะะะ!!
Method Overiding
• สร้าง Class แม่และลูก จากนั้นส
Method ที่มีทั้งชื่อและพารามิเตอร์
เหมือนกันในทั้งคลาสแม่และลูก
• ใน Method ของคลาสลูกต้องเขียน
@Override ป้ายกำกับ (Annotation)
เพื่อระบุว่า Method นี้จะเขียนทับของ
.
คลาสแมนะ
จากโค๊ดด้านขวาจะเห็นได้ว่าคลาส Bind
ที่เป็นลูกของคลาส đnimal มีการเขียน
ทับ Method move ของแม่ ดังนั้นเมื่อ
เรียก move ด้วย Object ของคลาส
Bird ก็จะพิมพ์ Plying ออกหน้าจอ
ประโยชน์ของ Method Overloading
}
class Animal {
}
void move() {
System.out.println("moving");|
class Bird extends Animal {
}
@Override
void move() {
System.out.println("flying");
• กำหนดการทำงานเฉพาะตัวสำหรับคลาสลูก: ช่วยให้คลาสลูกมีพฤติกรรมที่เหมาะสม
กับตัวเองโดยไม่ต้องจำใจใช้ของคลาสแม่ตลอดเวลา
สั่งงานผ่านตัวแปรแม่ แต่ได้ผลลัพธ์แบบลูก: ช่วยให้เขียนโค้ดจัดการ Object
หลายชนิดได้ในคำสั่งเดียว (เช่น วนลูปส่งสัตว์ทุกตัวให้ขยับ โดยไม่ต้องมานั่งเช็คว่า
ตัวไหนเป็นนก ตัวไหนเป็นปลา)
BY CHAQUI.RL
ページ77:
Java Programming Method Overloading VS Method Overriding หัวข Overloading CONCEPT: POLYMORPHISM Overriding สถานที่ เกิดใน Class เดียวกัน เกิดระหวาง แม่ - ลูก จุดประสงค์ เพิ่มทางเลือก (รับค่าได้หลายแบบ) เปลี่ยนการทำงานเดิม (ของแม่) Parameter ตองตางกัน เป็นอะไรก็ได้ Return Type จบแหล่วววว ตัวอย่างโปรแกรมหน้าถัดไป ตองเหมือนแม่ ต้องเหมือนแม่ BY CHAQUI.RL
ページ78:
Java Programming
ตัวอย่างใช้งาน Overriding method
Main.java
class Animal{
void move() {
X
}
}
CONCEPT: POLYMORPHISM
System.out.println("Animal is moving...");
class Bird extends Animal {
@Override
void move() {
System.out.println("Bird is flying!");|
class Fish extends Animal {
}
@Override
void move() {
คลาสแม
Method move
ของคลาสแม
คลาสลูก (1)
Method move ของลูก
เขียนทับ (Override)
ของคลาสแม
คลาสลูก (2)
Method move ของ
ลูกเขียนทับ
(Override) ของ
System.out.println("Fish is swimming!");
คลาสแม
public class Main {
}
}
public static void main(String[] args) {
| Animal myPet
myPet.move();
= new Bird();
myPet = new Fish();
myPet.move();
อีกหนึ่งความเจ๋งของ Polymorphism
สังเกตว่าเราประกาศตัวแปรเป็น
Animal (แม่) แต่เก็บ Object เป็น
Bird (ลูก) หลังจากนั้นเปลี่ยนไส้ใน
ตัวแปรเดิม เป็น Fish ได้เลย!!
BY CHAQUI.RL
ページ79:
8 ++ Chapter 14. ERROR HANDLING การจัดการกับข้อผิดพลาด ในโปรแกรม เกี่ยวกับบทนี้ “บทนี้จะแนะนำเกี่ยวกับประเภทของข้อผิดพลาดต่าง ๆ และวิธีการจัดการอย่างเช่น TRY CATCH EXCEPTION” 8
ページ80:
Java Programming . Error & Exception- ERROR HANDLING รู้หมือไร่...ใน Java คำว่า "Error" กับ "Exception" ไม่เหมือนกันนะ!! • Error: ปัญหาร้ายแรงระดับระบบ (System) -> "แก้ยาก ไม่ต้องแก้ โปรแกรมระเบิดเลย" • Exception: ปัญหาที่เกิดจากโค๊ดหรือปัจจัยภายนอก -> "ต้องดึกจับ (Handle) หรือแก้ไข Logic" ใน Java สามารถแบ่งประเภทข้อผิดพลาดได้ 3 ประเภท 1.กลุ่ม Error (ระดับวิกฤต - ห้าม Catch) • เกิดจาก JVM หรือ Hardware มีปัญหา โปรแกรมจะปิดตัวทันที ไม่ควรเขียน try-catch ดัก ชื่อ Enpor StackOverflowError Out Of MemoryError NoClassDefFoundError UnknownError สาเหตุ เรียก Method ซ้อนกันลึกเกินไป (มักเกิดจาก Recursive Loop ที่ไม่มีจุดจบ) Ram ไม่พอ (สร้าง Object เยอะเกินไป หรือ ไฟล์ใหญ่เกิน) ตอน Compile มีไฟล์ Class อยู่ แต่ตอน Run หา ไฟล์ Class ไม่เจอ ข้อผิดพลาดร้ายแรงที่ไม่ระบุสาเหตุใน Jun วิธีแก้ไขเบื้องต้น เช็คเงื่อนไขหยุดของ Recursive / ลดการวนลูป จูน memory (Xmx) หรือแก้โดดให้คืนแรม (Garbage Collection) เช็ค Classpath หรือไฟล์ jar ว่าครบไหม ภาวนา... เอ๊ย! เช็ค System Log อย่างละเอียด BY CHAQUI.RL
ページ81:
Java Programming ERROR HANDLING 2. กลุ่ม Runtime Exception (Unchecked - บั๊กที่คนเขียนทำเอง) • Compiler ไม่บังคับให้ดึก (ไม่ต้อง try-catch 4 compile ผ่าน) แต่ถ้ารันแล้วเจอโปรแกรมจะหยุด เกิดจากความผิดพลาดของ Programmer ชื่อ Error สาเหตุ วิธีแก้ไขเบื้องต้น NullPointenException (NPE) พยายามใช้ตัวแปรที่เป็นค่า null (เรียก method หรือดึงคา) เช็ค if (x != null) ก่อนใช้เสมอ ArrayIndexOutOfBounds Exception ArithmeticException เรียก Index ของ Array เกินขนาดจริง (เช่น มี 5 ช่อง เรียกช่องที่ 10) คํานวณเลขผิดกฏคณิตศาสตร์ (เช่น หารด้วย 0) เช็ค appay.length หรือ Loop ให้ถูก เช็คตัวหารต้องไม่เป็น 0 IllegalArgumentException ส่งค่า Argument ผิดประเภท/ผิดเงื่อนไข เข้าไป ใน Method ตรวจสอบคาทีรับเขา method 2. กลุ่ม Checked Exception (บังคับดึก) • เกิดจาก ปัจจัยภายนอก (ไฟล์, เน็ต, ฐานข้อมูล) Java "บังคับ" ให้เราต้องเขียน try-catch หรือ throws ไม่งั้น Compile ไม่ผ่าน วิธีแก้ไขเบื้องต้น ชื่อ Enpor สาเหตุ ปัญหาการอ่าน/เขียน ข้อมูลทั่วไป IOException ใช้ try-catch ดึก และแจ้งเตือนผู้ใช้ FileNot FoundException (Input/Output) หาไฟล์ตาม Path ที่ระบุไม่เจอ เช็ค Path / สร้างไฟล์ default รองรับ SQL Exception เชื่อมต่อ Database ไม่ได้ หรือ SQL Query ผิด เช็ค Connection String / เช็ค SQL Command พยายามโหลด Class ด้วยชื่อ String แล้วหาไม่ Class Not FoundException เช็คชื่อ Class / Library ใน Glasspath เจอ *Error ที่เห็นในตารางทั้งหมดเป็นเพียงตัวอย่างที่พบบ่อยเท่านั้นนะ!! BY CHAQUI.RL
ページ82:
Java Programming
ERROR HANDLING
-Try-Catch-
Try-Catch คือหัวใจของระบบ Error Handling (หรือเรียกให้ถูกเป๊ะๆ
ใน Java ว่า Exception Handling) โดยทำหน้าที่เหมือน "ถุงลมนิรภัย" ของ
โปรแกรม โดยปกติแล้วถ้าเกิดข้อผิดพลาดขึ้นจะโปรแกรมจะตายเลยหรือไม่ก็
ฟ้อง Error ออกหน้าจอ!! แต่ถ้าเราใช้ Try-Catch เมื่อเกิดข้อผิดพลาด
โปรแกรมจะ "กระโดด" ไปทำงานในส่วน Catch แทน ทำให้โปรแกรมไม่
ตาย และทำงานต่อได้
Try-Catch
try {
int data
=
50 / 0;
int x = 30 / 0; //<-skip this line
} catch (ExceptionType e) {
(
System.out.println("Error Laew Bro:
+
e.getMessage());
}
• try: เป็น Block ที่เอาไว้สำหรับใส่โค๊ดที่มีโอกาส Error (กรณีนี้ 5000 ทุกคน
รู้ดีว่า Error เกิดแน่!!)
การตามใน Block try: ใน Block try หากเจอบรรทัดใดที่สร้าง Error จะ
ข้ามไปทำ Block Catch ทันที โดยข้ามบรรทัดอื่น ๆ ที่อยู่ด้านล่างลงไปทั้งหมด
(จากด้านบน 30/0 จะถูกขาม เพราะเกิด Error ตั้งแต่ 50/0)
• catch: เป็น Block ที่เอาไว้สำหรับจีบ Error ถ้าเจอ Error แล้วจะให้ทำอะไร
ให้ใส่คำสั่งไว้ที่ Block ส่วนนี้ (กรณีนี้จะพิมพ์ Error ออก Console !!)
• ตัวแปร e: ใน Block catch ไม่ได้แต่ดันเฉยๆ แต่มันจะได้รับ 6 ซึ่งเป็น
Object มาด้วย ซึ่งข้างใน 6 จะเก็บข้อมูลว่า Error เกิดบรรทัดไหน? เพราะ
อะไร?
BY CHAQUI.RL
ページ83:
Java Programming
Try-Catch-Finally
• Pinally: เป็น Block ที่การันตีว่าจะ
ทำงานแน่ 1000% ไม่ว่าจะเกิด Error
หรือไม่
บน Block try
• เหมาะสำหรับ: ใส่คำสั่ง "เก็บกวาด"
(Cleanup) เช่น ปิดไฟล์, ปิดการเชื่อม
ต่อฐานข้อมูล (Close Connection)
เพื่อคืน R0M ให้ระบบ
Multiple Catch
try {...}
try {
openFile();
ERROR HANDLING
} catch (Exception e) {
handleError();
} finally {
closeFile();
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("อย่าเรียกช่องที่ไม่มีอยู่จริง!");
} catch (ArithmeticException e) {
System.out.println("ห้ามหารด้วย 0 นะ!");
} catch (Exception e) {
()
}
System.out.println("Error อื่นๆ:
+
e);
• ดึกแยกเคส: หากใน try มีโอกาสเกิด Error หลายรูปแบบ เราสามารถเขียน
catch หลาย Block ต่อกันเพื่อแขกจัดการแต่ละปัญหาได้
• ตัวปิดท้าย: ควรมี catch (Exception e) ไว้เป็น Block สุดท้ายเสมอ เ
Error ทั่วไปที่เรา "คาดไม่ถึง" (กันเหนียวเผื่อไม่ตรงกับเคส ข้างบน)
เพื่อดึก
BY CHAQUI.RL
ページ84:
8 THANK YOU FOR READING ขอบคุณที่อ่านสรุปของเรานะครับ! เนื้อหา Java ยังมีอีกมาก ถ้ามีโอกาสจะทำเพิ่มนะครับ :)))
おすすめノート
このノートに関連する質問
News

コメント
コメントはまだありません。