/Java_Tutorial

: Basic Programming with Java

Primary LanguageJava

JAVA  PROGRAMMING   java

  •   จะเริ่มเขียนโปรแกรมภาษา 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 
    

    ทาง Oracle มีแนะนำ Editor ไว้ 🔗




JAVA  SYNTAX

  •   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)
  •   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;
  •   ภาษา 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} };
  •   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)
  •   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);
  •   Queue

  •   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)


2.   JAVA OOP  🧠

  •   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  : 

  •   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 เหมือนเดิม แต่แก้โครงสร้างภายในให้มันทำงานต่างจากเดิม


3.   JAVA DATABASE  🧠

  •   MySQL  : 

       1. ต้องมี Driver/API ที่ทาง mysql ทำไว้ใช้เชื่อมต่อกับภาษาจาวา ที่ชื่อว่า JDBC (Java Database Connectivity)
    

    Download JDBC ได้ที่นี่

       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   :   เขียนโปรแกรมระบุว่าจะเอาข้อมูลที่ดึงมาได้ทำอะไร เช่น วนลูปอ่านค่าที่ดึงมา ดังตัวอย่างข้างล่าง


4.   JAVA GUI  🧠

  •   JFrame คืออะไร ?  : 
  •   JPanel คืออะไร ?  : 
  •   EventListener คืออะไร ?  : 
  •   Graphic g คืออะไร ?  : 
  •   เริ่มทำโปรแกรม GUI ยังไง ?  : 
  •   java awt คืออะไร ?  : 

5.   JAVA WEB  🧠

  •   เริ่มทำ web ด้วย java ยังไง ?  : 
  •   javaEE คืออะไร ?  : 
  •   java swing คืออะไร ?  : 




EXERCISES

  •   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)