-
จะเริ่มเขียนโปรแกรมภาษา java ต้องเตรียม environment ยังไง ?
1. ต้องมีตัวแปรภาษาจาวา (compliler) : java compliler ชื่อ JDK / JRE java พัฒนาโดยบริษัท sun micro-system แต่ปัจจุบันถูกบริษัท Oracle เข้าซื้อ java จึงกลายเป็นของบริษัท Oracle 2. ต้องมี editor ที่ใช้ในการเขียน และ debug โค้ด : มีหลายโปรแกรมให้เลือก เช่น netbean , Eclipse , JDeveloper 3. เริ่มเขียนโปรแกรมได้เลยโดย : เปิดโปรแกรม editor ที่เราโหลดมา >> create java project >> create class ลองเขียนโปรแกรมแรกง่ายๆด้วยภาษา java เป็นการเทส เช่น เขียนโปรแกรมให้ปริ้น Hello World ออกหน้าจอ >> ลองกด run
-
syntax พื้นฐานของ java :
- แบ่งบล็อคคำสั่งด้วยเครื่องหมายปีกกา " {} " และจบ 1 คำสั่งต้องปิดท้ายด้วยเซมิโคลิน " ; "
- ถ้าใช้ Eclipse เวลาเราใช้ classที่javaมีให้ใช้ หรือก็คือพวกคำสั่งพื้นฐาน(build-in class/method) ต้อง import เข้ามาก่อนถึงจะใช้งานได้ โปรแกรม eclipse จะช่วยเรา import ให้อัติโนมัติ ดังนั้น ไม่จำเป็นต้องจำได้ ให้เห็นผ่านๆ ใช้บ่อยๆ มันจะจำได้ไปเอง
-
input :
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
- รับ input เป็นสตริง
String userName = sc.nextLine();
- รับ input เป็นเลขจำนวนเต็ม
int age = sc.nextInt();
- รับ input เป็นเลขทศนิยม
double salary = sc.nextDouble();
-
output :
- ปริ้นแบบขึ้นบรรทัดใหม่
System.out.println("Hello World! ");
- ปริ้นแบบมี format เช่น ปริ้นเลขทศนิยม 2 ตำแหน่ง
System.out.printf(“%.2f”, 12
- ปริ้นแบบขึ้นบรรทัดใหม่
-
comment :
/* multiline */
// single line
-
condition :
- If - else condition
if() - else if() - else
- Ternary Condition
String result = (time < 18) ? "Good day." : "Good evening.";
- Switchcase
switch (case)
- If - else condition
-
loop :
- While Loop
ค่าเริ่มต้น while (condition){ เพิ่มค่า/ลดค่า }
- For Loop
for (int i = 0; i < 5; i++) {...}
- Foreach Loop : ใช้วนลูปอ่านค่าใน array
for (String i : arr)
- Infinite Loop
while (true) {...}
- Break Loop
break;
- Continue Loop
continue;
- While Loop
-
ภาษา java มีชนิดข้อมูล (Data type) อะไรบ้าง : มี 2 ประเภท
-
Primitive Data Types : ตัวแปรธรรมดา
Integer
BigInteger
Float
Double
Char
String
Short
Long
-
Reference/Object Data Types : ตัวแปรแบบชี้พ้อยเตอร์จะมีโครงสร้างในการเก็บ เก็บเป็นก้อนๆ เก็บได้เยอะ เลยต้องมีพ้อยเตอร์ชี้ สามารถ inplement คือเขียนเป็นคลาสขึ้นมาใช้เองได้เหมือนที่เรียนใน Data Structure แต่ใน java ก็ทำไว้ให้เรียกใช้ได้เหมือนกันเรียก (build-in method)
Array
ArrayList
Linked List
Hashmap
Stack
Queue
Tree (ต้อง implement เอง)
-
-
Array :
- สร้างตัวแปรอาเรย์/ประกาศตัวแปรชนิดอาเรย์ : ทำได้ 2 แบบคือ แบบไม่ระบุค่าประกาศอาเรย์ว่างๆไว้ รอเอาค่ามาใส่
String[] cars;
กับแบบระบุค่า ใช้เครื่องหมายปีกกา {}String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
- Access Array
cars[0];
- Edit Array
cars[0] = "Opel";
- ขนาดของ Array
cars.length;
- Array 2 มิติ
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
- สร้างตัวแปรอาเรย์/ประกาศตัวแปรชนิดอาเรย์ : ทำได้ 2 แบบคือ แบบไม่ระบุค่าประกาศอาเรย์ว่างๆไว้ รอเอาค่ามาใส่
-
ArrayList :
import java.util.ArrayList;
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร :
ArrayList<String> cars = new ArrayList<String>();
- Access ArrayList
cars.get(0);
- เพิ่มข้อมูล
cars.add("Mazda");
- ลดข้อมูล
cars.remove(0);
- Edit ArrayList
cars.set(0, "Opel");
- ขนาดของ ArrayList
cars.size();
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร :
-
Linked List :
import java.util.LinkedList;
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร :
LinkedList<String> cars = new LinkedList<String>();
- Access Linked List
cars.get(0);
- เพิ่มข้อมูล
cars.add("Mazda");
- ลบข้อมูล
cars.remove(0);
- Edit Linked List
cars.set(0, "Opel");
- ขนาดของ Linked List
cars.size();
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร :
-
String :
- ดึงตัวอักษรในสตริงตำแหน่งที่ 0
str.charAt(0)
- ตัด whitespace หัว-ท้าย
str.trim()
- ความยาวข้องข้อความ นับทุกตัวอักษรรวมเว้นวรรคด้วย
str.length()
- เช็คว่ามีค่ามั้ย
str.isEmpty()
- เช็คว่าสตริงสองตัวเท่ากันมั้ย
str1.equals(str2)
- ดึงตัวอักษรในสตริงตำแหน่งที่ 0
-
Math :
Math.min(5, 10);
Math.max(5, 10);
Math.sqrt(64);
Math.abs(-4.7);
Math.random();
Math.pow(x, y)
-
Hashmap :
import java.util.HashMap;
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร :
HashMap<String, String> capitalCities = new HashMap<String, String>();
- เพิ่มข้อมูล
capitalCities.put("England", "London");
- Access ดึงข้อมูล
capitalCities.get("England");
- ลบข้อมูล
capitalCities.remove("England");
- ขนาดของ Hashmap
capitalCities.size();
- Hashmap - foreach loop
for (String i : capitalCities.keySet()) { System.out.println(i); }
หรือfor (String i : capitalCities.values()) {System.out.println(i); }
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร :
-
Stack :
- สร้างตัวแปรอาเรย์/ประกาศตัวแปร : ```Stack stack = new Stack();
- เพิ่มข้อมูลลงแสต็ก
stack_push(stack);
- ดึงข้อมูลมาดู และลบ ในแสต็ก
stack_pop(stack);
- ดึงมาดู ไม่ลบ
stack_peek(stack);
- ค้นหา
stack_search(stack, 2);
-
Thread :
เป็นคลาสที่ทำให้โปรแกรมของเรา ทำงานแบบ multi-tasking ได้ ซึ่งจะไม่ได้ใช้พื้นที่เยอะเหมือนโปรเซส (processes) เพราะ Thread มี stack, program counter และ local variable เป็นของตัวเอง แต่ใช้ทรัพยากรอื่นร่วมกันกับเธรด ตัวอื่นที่มีอยู่ในโปรเซสเดียวกัน เช่น memory, file handlers และ pre‐process state อื่น ๆ ก็เลยเรียกโปรเซสว่า “ heavyweight process” และเรียก Thread ว่าเป็น “lightweight process ” มีให้ใช้ 2 แบบ คือ
-
แบบ extends Thread : สร้างคลาส extends Thread >> สร้าง method run (Override) มาใช้ เขียนโค้ดกำหนดสิ่งที่อยากทำ >> แล้วเรียกใช้คลาส(new class) >> เรียกใช้เมธอด start มันก็จะวิ่งไปทำคำสั่งที่อยู่ใน method run
-
แบบ implements Runnable / anonymous class (คือคลาสย่อยในอีกคลาส) : ใช้การ new class thread >> แล้ว Anonymousclass run (Override) มาใช้ เขียนโค้ดกำหนดสิ่งที่อยากทำในบล็อก catch และระบุการหยุดทำงาน ในบล็อก try
Thread.sleep(50);
50 millisec >> เรียกใช้เมธอด startนิยมใช้แบบนี้ทำ muti-Thread คือ สร้างการทำงานหลายๆอย่าง 1 งาน = 1 Thread แล้วเรียงการทำงานด้วยการสั่ง start เรียงกัน แต่ถ้าเรากำหนด sleep ให้อันไหนน้อยกว่า แปลว่ามันหยุดพักน้อยกว่า มันก็จะทำงานได้มากกว่า
-
-
Read-Write File :
import java.io.File;
:import java.io.IOException;
:import java.io.FileWriter;
การเขียนอ่านไฟล์ต้องใช้คู่กับ Exception เสมอ-
สร้างไฟล์เก็บในไดร้ฟ์ C:\Users\MyName ชื่อไฟล์ filename.txt
File myObj = new File("C:\\Users\\MyName\\filename.txt");
-
เขียนข้อมูลลงไฟล์ต้อง new class FileWriter ก่อน
FileWriter myWriter = new FileWriter("filename.txt");
แล้วถึงเขียน
myWriter.write("Files in Java might be tricky, but it is fun enough!");
-
อ่านข้อมูลในไฟล์ต้อง new class File ก่อน
File myObj = new File("filename.txt");
แล้วถึงดึงมาอ่าน
Scanner myReader = new Scanner(myObj);
โดยการวนลูปอ่านทีละ บรรทัด (line)
-
-
concept OOP :
class >> class = object = คอนเซ็ปของ OOP คือมองฟีเจอร์ของโปรแกรมเป็นก้อนๆ ทำให้แยกเขียน แยกเทสได้ อ่านง่ายกว่าการเขียนแบบ Procedural ที่เขียนเรียงๆมารันทีละบรรทัด การเขียนแบบ OOP เป็นมาตรฐาน ที่ใช้ในการทำงานจริง โค้ดจะไม่รันไล่ทีละบรรทัด แต่จะรันจาก method main class/method ที่สร้างไว้ ก็จะถูกเรียกใช้ใน main syntax ของ class : modifierบางทีก็ไม่ระบุ ชื่อclass() example : public Person() - modifier คือ ตัวบอกว่าใครใช้คลาสเราได้บ้าง ใช้ keyword public / private / protected การระบุ modifier ให้ class/method/ตัวแปร คือการ Encapsulation >> ในคลาสมี method (ทำอะไรได้) + variable (รับค่าอะไรบ้าง) syntax ของ method : modifier return-type ชื่อmethod(parameter) example : public static void Employee(string name) - return-type คือ บอกว่าค่าที่ส่งออกไปมีชนิดข้อมูลเป็นอะไร ถ้าไม่ส่งค่าออกออกใช้ void >> อยากใช้ method และ ตัวแปร ของคลาสอื่น ขี้เกียจเขียนใหม่ คือการ Inheritance (คลาสลูก extends คลาสแม่ : การสืบทอด) เอามาใช้เลย >> อยากใช้ method ที่มีอยู่แล้ว แต่อยากเปลี่ยน parameter ที่รับเข้ามาใหม่ คือการ Polymophism (Overloading : เมธอดที่ชื่อเหมือน แต่ parameter ต่าง) สร้าง method ใหม่ชื่อเดิม แต่เปลี่ยน parameter >> อยากใช้ method ที่รับ parameter นั้นๆ แต่อยากให้มันทำงานต่างไปจากเดิม คือการ Overriding (Overriding : เมธอดที่ชื่อเหมือน แต่ parameter เหมือน แต่ทำงานต่างจากเดิม) ใช้ @Override
-
method :
-
การสร้างเมธอด : เมธอด void ไม่ต้อง return ค่าไปยังจุดเรียกใช้
static void myMethod() {...}
เมธอด return ค่าเป็น intstatic int plusMethodInt(int x, int y) {..}
-
การเรียกใช้เมธอด แค่ระบุ argument ให้ตรง ถ้าไม่มีก็ไม่ต้องใส่
myMethod()
myMethod(int x , int y)
-
recursive method (method = function อาจะเรียกต่างกันในแต่ละภาษา) คือ การเรียกใช้ function ตัวมันเองตรง return (general case) ทำให้เกิดลูป ดังนั้นต้องใช้ if-else มาสร้างเงื่อนไข (base case) ให้มันหลุดลูปด้วย
-
-
class :
-
การสร้างคลาส :
public class Cars {...}
-
การระบุ constructor : คือ method ที่ชื่อเหมือนคลาส ถูกเรียกใช้ครั้งเดียวตอน new class ใช้ในการระบุ ค่าเริ่มต้น(initial value) ให้คลาส # คล้ายๆการระบุ parameter ให้ method
-
การเรียกใช้คลาส : ต้อง new class ก่อน
Person obj = new Person();
แล้วเรียกใช้ method ผ่าน instance object ของคลาสobj.employee
Note : class คือ object/ต้นแบบ ตอนเรา new class (เหมือน copy) ไปใช้สิ่งที่ได้เราจะเรียกว่า instance ของคลาส หรือ instance object / ตัว copy
-
-
inheritance :
class Car extends Vehicle {...}
-
polymorphism : คือการเอา method ที่มีอยู่แล้วมาใช้ รับ parameter เหมือนเดิม แต่แก้โครงสร้างภายในให้มันทำงานต่างจากเดิม
-
MySQL :
1. ต้องมี Driver/API ที่ทาง mysql ทำไว้ใช้เชื่อมต่อกับภาษาจาวา ที่ชื่อว่า JDBC (Java Database Connectivity)
2. เริ่มเขียนโปรแกรมเชื่อมต่อฐานข้อมูลได้เลย 💬 พื้นฐานที่ควรรู้ : เราใช้ฐานข้อมูล(Database : DB) ได้ 2 แบบ 1. เรียกใช้/จัดการฐานข้อมูล/CRUD (Create Read Update Delete) ผ่าน DBMS 2. ใช้แบบฝังภาษา sql ในภาษาอื่น (SQL Embeded) และเราจะเรียกใช้/จัดการฐานข้อมูล/CRUD ได้เราก็ต้องมีฐานข้อมูลก่อน จะใช้วิธีสร้างฐานข้อมูลขึ้นมาเอง (ต้องมีข้อมูล หรือคิดข้อมูลขึ้นมาเอง) โดยใช้ DBMS อย่าง phpMyAdmin หรือ โหลด free sample data อย่าง sakila มาใช้ก็ได้ 2.1 ก่อนจะเริ่มเขียนโปรแกรมเชื่อมต่อฐานข้อมูล mysql เราต้อง import JDBC มาใส่ในโปรเจคที่เราต้องการเชื่อมต่อDBก่อน โดย เปิด Eclipse >> คลิ้กขวาที่โปรเจคที่เลือก >> properties >> java build path >> Add External JARs >> เลือก JDBC 2.2 แล้วก็ต้องมีฐานข้อมูลที่มีข้อมูลพร้อมให้เราใช้งาน (CRUD) ได้ โดยเปิด xamp รัน Apache กับ mySQL >> แล้วเข้า เว็บ phpMyAdmin/localhost เป็นการเข้าไปยัง DBMS ของเรา >> import sample data sakila ที่เราโหลดมา เข้ามาไว้ใน phpMyAdmin 2.3 มาเริ่มเขียนโปรแกรมกันเลย algirithm/ขั้นตอนการเชื่อมต่อฐานข้อมูล mysql ด้วยภาษาจาวา จะมี 4 ขั้นตอนดังนี้
อ่านพื้นฐาน Database เพิ่มเติมได้ที่นี่ และ Download free sample data (sakila) ได้ที่นี่
-
Step 1 : create connection ต้องใช้คู่ try-catch เสมอเพื่อดักจับ Exeption
con = DriverManager.getConnection( URL , Username , Password );
connection จะทำการเข้าถึง ฐานข้อมูล -
Step 2 : create Statement มาต่อกับ connaction
st = con.createStatement();
statement จะส่งคำสั่ง sql ไปให้ JDBC ประมวลผล JDBC ก็จะติดต่อกับฐานข้อมูลตาม connection ที่เราระบุไว้ ส่งคำสั่ง SQL ตามที่เราจะระบุในบรรทัดต่อไป ให้ฐานข้อมูล mysql execute เพื่อ รับข้อมูล ตามที่ร้องขอ กลับมาใช้ -
Step 3 : กำหนดคำสั่ง SQL ต่อกับ statement
rt = st.executeQuery("SELECT * FROM user");
-
Step 4 : เขียนโปรแกรมระบุว่าจะเอาข้อมูลที่ดึงมาได้ทำอะไร เช่น วนลูปอ่านค่าที่ดึงมา ดังตัวอย่างข้างล่าง
-
- JFrame คืออะไร ? :
- JPanel คืออะไร ? :
- EventListener คืออะไร ? :
- Graphic g คืออะไร ? :
- เริ่มทำโปรแกรม GUI ยังไง ? :
- java awt คืออะไร ? :
- เริ่มทำ web ด้วย java ยังไง ? :
- javaEE คืออะไร ? :
- java swing คืออะไร ? :
- BEGINNER
-
คำถามเหมาะกับการเตรียมตัวสัมภาษณ์งาน : code-exercises pythonistaplanet edabit
-
คำถามเหมาะกับการฝึก java OOP/ Data Structure มีอธิบายโค้ด + flowchart ด้วย : w3resource
-
เหมาะใช้ฝึก logic ฝึกให้คุ้นกับ syntax ภาษา java :
- javaforaliens : เป็นเหมือนหนังสือ workbook มีคำถามเกี่ยวกับ java แล้วก็โจทย์ให้ทำเยอะมาก แล้วยังมีเฉลยด้วย
- geeksforgeeks : เป็นโจทย์ที่ช่วยฝึก logic เป็นโจทย์ที่มักเจอในข้อสอบมหาลัยด้วย
- codingbat : โจทย์ recursion เยอะดี
- www3.ntu.edu.sg : มีอธิบาย Algorithm sorting (bubble,selection,insertion,quick,merge,heap)
-
-
INTERMEDIATE
: learnning by doing java project with source code- มีอธิบาย tech stack ที่ใช้ และสามารถโหลดโค้ดมาลองรัน หรืออ่านทำความเข้าใจได้ : projectsgeek javatpoint interviewbit hackr.io freeprojectz projectworlds projectabstracts code-projects kashipara