แสดงบทความที่มีป้ายกำกับ java แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ java แสดงบทความทั้งหมด

23/6/60

ตัวอย่างโค้ด Java การต่อเว็บแล้วแปลงให้เป็น String โดยใช้ BufferedReader

ตัวอย่างโค้ด Java การต่อเว็บแล้วแปลงให้เป็น String โดยใช้ BufferedReader

ตัวอย่างนี้เราจะทำการต่อกับ URL โดยใช้ java.net.URL.URL จากนั้นเราก็ทำการ openConnection เมื่อเราทำการ connect เสร็จแล้ว เราก็ใช้ BufferedReader อ่านมา จากนั้นเราก็ทำการแปลงเป็น String

ตัวอย่างโค้ดตามด้านล่าง

protected static String getContentHttp(String url) throws Exception{
 URL urlObj = new URL(url);
 URLConnection con = urlObj.openConnection();
 
 con.setDoOutput(true); // we want the response 
 con.connect();
 
 BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
 
 StringBuilder response = new StringBuilder();
 String inputLine;
 
 String newLine = System.getProperty("line.separator");
 while ((inputLine = in.readLine()) != null) {
     response.append(inputLine + newLine);
 }
 
 in.close();
 
 return response.toString();
}

19/2/59

Android การเปลี่ยน Style ของ Font ที่แตกต่างกันใน TextView อันเดียวกัน

Android การเปลี่ยน Style ของ Font ที่แตกต่างกันใน TextView อันเดียวกัน


เรามาดูวิธีการเปลี่ยน Style ของ Font ให้มีความแตกต่างกันใน TextView อันเดียวกันดีกว่าครับ ซึ่งอาจจะใช้ในหลาย ๆ เหตุการณ์ เช่น ต้องการเปลี่ยน ขนาดของ Font หรือสีของ Font ให้เป็นคนละแบบกัน แต่ใช้ TextView อันเดียวกัน

ตัวอย่างโค้ด

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    CharSequence charSequence = this.getText();
    SpannableString spannableString = new SpannableString(charSequence);
    spannableString.setSpan(new RelativeSizeSpan(2.0f), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    this.setText(spannableString);
}

จากโค้ดนี้เราได้ทำการ Override เมทอดที่ชื่อว่า onFinishInflate ใน TextView ขึ้นมาในกรณีที่ต้องการเปลี่ยน Font หลังจากที่มัน Inflate เสร็จแล้ว จากนั้นก็ทำการเปลี่ยนขนาดของมัน

29/12/58

Iterable ในภาษา Java

Iterable ในภาษา Java

ในบทความนี้เรามารู้จักกับ Java Collections - Iterable กันดีกว่า

Iterable คืออะไร

- Iterable ในภาษา Java เป็นหนึ่งใน interface (java.lang.Iterable) ของ Java collection classes
- Collection interface จะทำการ extends Iterable ดังนั้นทุก ๆ subtypes ของ Collection จึง implement Iterable interface

ถ้าเรามาดู collection class จะเห็นว่าได้ทำการ extends Iterable ตามรูปด้านล่าง


class ที่ได้ทำการ implements Iterable จะสามารถใช้ for-loop ตามรูปแบบตัวอย่างด้านล่าง


List list = new ArrayList();

for(Object o : list){
 //do something o;
}

ถ้าเราเข้าไปดูใน Iterable class จะเห็นว่ามีจุดสำคัญคือ public abstract Iterator iterator();

Iterator คืออะไร

ถ้าแปลตรง ๆ ตัว Iterator ก็คือ ตัววนซ้ำ เอาไว้ช่วยสำหรับการ iteration ซึ่งก็คือการวนซ้ำสมาชิกแต่ละตัวใน Object หนึ่ง

สรุปง่าย ๆ
Iterable ก็คือ interface ในภาษา Java ที่ภายในจะมี iterator method สำหรับการวนซ้ำของสมาชิกแต่ละตัวใน Object

12/11/58

import static ใน Eclipse

import static ใน Eclipse

บทความนี้เรามาดูวิธีการ import static ใน Eclipse กันครับ เริ่มต้นด้วยโค้ดตัวอย่างที่เรามีดังนี้

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(Math.PI);
 }
}

จากโค้ดเราต้องการที่จะ import static java.lang.Math.PI ซึ่งถ้าเราพิมพ์เอง ถ้ามีตัวเดียวก็ไม่มีปัญหาอะไร แต่ถ้ามีหลายตัวก็คงจะลำบาก ดังนั้น Eclipse จึงมีคีย์ลัดอยู่ที่เอาไว้ใช้สำหรับ import แบบ static

จากโค้ดให้เราเอาเคอเซอร์ไปวางไว้ที่ PI จากนั้นคลิกขวา เลือก Source จากนั้นก็เลือก Add Import ตามรูปด้านล่าง


เพียงแค่นี้โค้ดของเราก็ได้ static import แล้ว ตามรูปด้านล่าง

package info.doesystem.howto;

import static java.lang.Math.PI;

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(PI);
 }
}

จากตัวอย่างจะเห็นว่าเป็นการง่ายมากที่จะ import static แบบอัตโนมัติใน Eclipse ลองนำไปใช้กันดูครับ

22/10/58

การเปรียบเทียบ compare 2 methods ใน Eclipse

การเปรียบเทียบ compare 2 methods ใน Eclipse

บทความนี้เรามาดูวิธีการเปรียบเทียบ method ใน Eclipse กันครับ ซึ่งมีหลาย ๆ ที่เราต้องการจะเปรียบเทียบ method ในไฟล์ หรือ Class เดียวกัน อยู่ไฟล์เดียวกันทำให้เวลาจะหาความต่างจะต้องการคอยเลื่อนไปเลื่อนมา ในบทความนี้เรามาแนะนำวิธีดี ๆ อีกวิธีหนึ่งที่สามารถใช้เปรียบเทียบ method ได้อย่างง่าย ๆ มาดูวิธีทำกันเลย

เริ่มด้วยการโชว์ outline ขึ้นมาก่อน โดยไปที่ Windows เลือก Show View แล้วเลือก Outline ตามรูปด้านล่าง


จะปรากฎหน้าต่างส่วน Outline ขึ้นมา จะมีรายชื่อ method แสดงขึ้นมาให้เราเลือก method ที่ต้องการจะเปรียบเทียบ จากนั้นคลิกขวาเลือก Compare With แล้วเลือก Other Element ตามรูปด้านล่าง


จะปรากฎหน้าต่าง Compare Java Elements ขึ้นมา ในหน้าต่างนี้เราก็จะเห็นข้อแตกต่างระหว่าง Method แล้วว่าแตกต่างกันส่วนไหนบ้าง ตามรูปด้านล่าง


เป็นวิธีง่าย ๆ ในการเปรียบเทียบความแตกต่างระหว่าง Method ใน Eclipse โดยการ Compare ลองนำไปใช้กันดูครับ

21/10/58

Initialization Block ในภาษา Java

Initialization Block ในภาษา Java

บทความนี้เรามาดูวิธีการใช้ Initialization Block ในภาษา Java กันครับ ว่า Initialization Block มันคืออะไร ใช้ยังไง และต้องรู้อะไรบ้าง

ก่อนอื่นเรามาดูวิธีการใช้งาน Initialization Block แบบง่าย ๆ กันก่อน ตามด้านล่างเลย

package info.doesystem.howto;

public class DoesystemInfo {
 static int x;

 static {
  x = 50;
 }
}

จากโค้ดจะเห็นว่าเรามีบล็อกอยู่ ซึ่งในที่นี้ก็คือ ในวงเล็บ { และ } จะเห็นว่าเป็นบล็อกอยู่ ถ้าแปรตรง ๆ Initialization ก็คือการเริ่มต้น Block ก็คือบล็อก ถ้านำมารวมกัน ก็น่าจะแปลว่า บล็อกเริ่มต้น แล้วใช้ยังไง มีประโยชน์ยังไง มาดูกันต่อไปครับ

A non-static initialization block

- จะ Executed แต่ละครั้งที่ Object ได้สร้างขึ้น - สามารถกำหนดค่าตัวแปรเริ่มต้นใน class ตัวอย่างโค้ด java

package info.doesystem.howto;

class TestNonStaticBlock {
 int a;
 static int b;
 
 {
  a = 0;
  b = 0;
  System.out.println("Running initialization block. Class TestNonStaticBlock");
 }
}

static initialization block

- จะใช้คำว่า static ในการนำหน้าบล็อก
- จะ Executed ครั้งเดียว เมื่อ Class ถูกโหลดขึ้นมา
- สามารถกำหนดค่าเริ่มต้นเฉพาะตัวแปรที่เป็น static เท่านั้น

ตัวอย่างโค้ด java

package info.doesystem.howto;

class TestStaticBlock {
 int a;
 static int b;
 
 static {
  b = 0;
  System.out.println("Running initialization block. Class TestStaticBlock");
 }
}

A non-static initialization block VS static initialization block

ต่อไปมาลองดูความแตกต่างโดยการรันโค้ดดูครับ โค้ดตามด้านล่าง

package info.doesystem.howto;

class TestNonStaticBlock {
 int a;
 static int b;

 {
  a = 0;
  b = 0;
  System.out.println("Running initialization block. Class TestNonStaticBlock");
 }
}

class TestStaticBlock {
 int a;
 static int b;

 static {
  b = 0;
  System.out.println("Running initialization block. Class TestStaticBlock");
 }
}

public class DoesystemInfo {
 public static void main(String[] args) {
  new TestNonStaticBlock();
  new TestNonStaticBlock();
  new TestStaticBlock();
  new TestStaticBlock();
 }
}


จากโค้ด ผลลัพธ์ที่ด้คือ
Running initialization block. Class TestNonStaticBlock
Running initialization block. Class TestNonStaticBlock
Running initialization block. Class TestStaticBlock

จากนั้นลองรันโค้ด

package info.doesystem.howto;

class TestNonStaticBlock {
 int a;
 static int b;

 {
  a = 0;
  b = 0;
  System.out.println("Running initialization block. Class TestNonStaticBlock");
 }
}

class TestStaticBlock {
 int a;
 static int b;

 static {
  b = 0;
  System.out.println("Running initialization block. Class TestStaticBlock");
 }
}

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(TestNonStaticBlock.b);
  System.out.println(TestNonStaticBlock.b);
  System.out.println(TestStaticBlock.b);
  System.out.println(TestStaticBlock.b);
 }
}


ผลลัพธ์ที่ได้ คือ

0
0
Running initialization block. Class TestStaticBlock
0
0

จะเห็นว่า ที่เรารันโค้ดทดสอบแรก จะเกิดการ Execute บล็อก Running initialization block. Class TestNonStaticBlock สองครั้งเพราะเราสร้าง Object ขึ้นมาสองตัว จากนั้นเราก็ลองสร้าง Object กับ Class TestStaticBlock เหมือนกัน แต่จะแสดง Running initialization block. Class TestStaticBlock ขึ้นมาแค่ครั้งเดียว เพราะจะรันครั้งเดียวแค่ตอน Class ตอนโหลดเท่านั้น

จากนั้นเราก็แสดงตัวอย่างที่สอง โดยการใช้ชื่อ Class แล้วตามด้วยตัวแปร จะเห็นว่าไม่มี Running initialization block. Class TestNonStaticBlock เลยเพราะเราไม่ได้สร้าง Object ดังนั้น block ที่ไม่ใช่ static จึงไม่ได้ Execute

16/10/58

Static Import ในภาษา Java

Static Import ในภาษา Java

บทความนี้เรามาดู static import ที่ใช้กันใน Java กันครับ ว่ามันคืออะไร ใช้ยังไง และมีประโยชน์ยังไง

static import นั้นเราสามารถใช้ได้ตั้งแต่ Java 5 ใน Java 5 เราสามารถ import static fields โดยใช้ import static ได้ ก่อน Java 5 เราจะใช้ static final field และก็ต้อง import class เข้ามา ดังตัวอย่าง

package info.doesystem.howto;

import java.util.Calendar;

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(Calendar.DECEMBER);
 }
}

จากตัวอย่างเราต้อง import java.util.Calendar; จากนั้นก็ต้องใช้ Calendar.DECEMBER ในการจะใช้ค่า static fields แต่ตั้งแต่ Java 5 เป็นต้นไปเราสามารถใช้ static import ได้ดังตัวอย่าง

package info.doesystem.howto;

import static java.util.Calendar.DECEMBER;

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(DECEMBER);
 }
}

จากตัวอย่างเราใช้ import static แล้วก็ใส่ fields ที่ต้องการ จากนั้นเมื่อต้องการใช้งานก็เขียนชื่อ fields ตรง ๆ ไปเลย

นอกจากเราจะสามารถ import static fields แล้วเราก็ยังสามารถ import static method ได้อีกด้วย ดังตัวอย่าง

package info.doesystem.howto;

import static java.util.Calendar.getInstance;

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(getInstance().getTime());
 }
}

จากตัวอย่างเราก็ใช้ import staic แล้วก็ใส่ชื่อ method ที่เราต้องการ

Method Overloading ในภาษา Java

Method Overloading ในภาษา Java

บทความนี้เรามาทำความรู้จักและดูวิธีการใช้งาน Method Overloading ในภาษา Java กันครับ ว่ามันคืออะไร ใช้งานยังไง

ในภาษา Java นั้นมีการยอมรับให้ทำการตั้งชื่อ method เป็นชื่อเดียวกันได้ แต่ method ที่ชื่อเดียวกันจะมีความแตกต่างกันที่ชนิดและขนาดของ argument เพราะจะได้เรียกถูกว่าจะใช้ method ตัวไหน ตัวอย่างโค้ดที่มี Method Overloading ตามโค้ดด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
 }
 
 public static int sumPoint(int a, int b){
  return a + b;
 }
 
 public static int sumPoint(int a, int b, int c){
  return a + b + c;
 }
 
 public static long sumPoint(int a, int b, long c){
  return a + b + c;
 }
}

จากโค้ดเราจะมี method ที่ชื่อ sumPoint เหมือนกันใน Class เดียวกัน แต่เราสามารถรู้ได้ว่า method ไหนเป็น method ไหนโดยการส่ง argument ที่แตกต่างกันไป

Primitives and overloading

เราได้รู้มาแล้วว่าค่า primitive นั้นสามารถแบ่งกลุ่มออกมาได้ โดยมีตัวเลขเป็นหนึ่งในนั้น สมมติว่าเรามีตัวเลขหนึ่ง ๆ อยู่ เช่น 1 แล้วเรามี Method Overloading อยู่รับค่าเป็น primitive หลาย ๆ ค่า เราจะรู้ได้ยังไงว่าต้องส่งไป method ไหน ตามตัวอย่างโค้ด

package info.doesystem.howto;

public class DoesystemInfo {
 void printPrimitive(char x) {
  System.out.println("printPrimitive(char)");
 }

 void printPrimitive(byte x) {
  System.out.println("printPrimitive(byte)");
 }

 void printPrimitive(short x) {
  System.out.println("printPrimitive(short)");
 }

 void printPrimitive(int x) {
  System.out.println("printPrimitive(int)");
 }

 void printPrimitive(long x) {
  System.out.println("printPrimitive(long)");
 }

 void printPrimitive(float x) {
  System.out.println("printPrimitive(float)");
 }

 void printPrimitive(double x) {
  System.out.println("printPrimitive(double)");
 }

 void testDouble() {
  double x = 0;
  System.out.println("double argument:");
  printPrimitive(x);
  printPrimitive((float) x);
  printPrimitive((long) x);
  printPrimitive((int) x);
  printPrimitive((short) x);
  printPrimitive((byte) x);
  printPrimitive((char) x);
 }

 public static void main(String[] args) {
  DoesystemInfo doesystem = new DoesystemInfo();
  doesystem.testDouble();
 }
}

จากตัวอย่างโค้ด เราจะแก้ปัญหานี้ได้โดยการ cast ให้เป็นชนิดที่ต้องการ เพียงแค่นี้มันก็เข้า method ที่ argument ตรงกันแล้ว

Constructors ในภาษา Java

Constructors ในภาษา Java

บทความนี้เรามาทำความรู้จักกับ Constructors ในภาษา Java กันครับ ซึ่งใน Java นั้น
- ทุก ๆ class จะต้องมี constructor อย่างน้อย 1 constructor
- ถ้าเราไม่ได้เขียน constructor ใน Class แล้ว compiler จะสร้าง default constructor มาให้
- constructor นั้นจะใช้ในการสร้าง object
- constructor นั้นจะคล้าย ๆ กับ method ดังนั้นในบางครั้งก็จะเรียกว่า constructor method
- constructor นั้นจะไม่มีค่า return
- constructor จะต้องมีชื่อเดียวกับชื่อ Class
- constructor จะมีหรือไม่มี argument ก็ได้
- constructor สามารถใช้ในการกำหนดค่าเริ่มต้นให้กับ object ได้

Syntax ของ constructor

มาดู Syntax ของ constructor กันก่อนครับ ตามด้านล่างเลย

constructorName (listOfArguments) {
    [constructor body]
}

จาก Syntax เรามาดูโค้ดที่มี constructor กันหน่อย ตามโค้ดด้านล่างเลย

package info.doesystem.howto;

public class DoesystemInfo {
 
 // constructor
 DoesystemInfo(){
  // no return value
 }
 
 public static void main(String[] args) {
  DoesystemInfo doesystem = new DoesystemInfo();
 }
}

ถ้าเราต้องการหลาย ๆ constructor ก็สามารถเขียนได้ ดังนี้

package info.doesystem.howto;

public class DoesystemInfo {
 private int view;
 // constructor
 DoesystemInfo(){
  // no return value
  // set initial field
  this.view = 1;
 }
 
 DoesystemInfo(int view){
  // no return value
  // set initial field
  this.view = view;
 }
 
 public int getView() {
  return view;
 }

 public void setView(int view) {
  this.view = view;
 }

 public static void main(String[] args) {
  DoesystemInfo doesystem = new DoesystemInfo(11);
  System.out.println(doesystem.getView());
 }
}

ลำดับการ Run ของ Constructor

รู้มาแล้วว่าทุก ๆ Class จะมี Constructor อย่างน้อย 1 Constructor แล้วมีคำถามไหมว่า ถ้าเกิดมีการ Extends Class ขึ้นมา Constructor อันไหนจะ Run ก่อนกัน ดังนั้นลองเขียนโค้ดแล้วลองรันดูครับ

package info.doesystem.howto;

class Doesystem {
 public Doesystem() {
  System.out.println("Java Doesystem Constructor");
 }
}

public class DoesystemInfo extends Doesystem {
 public DoesystemInfo() {
  System.out.println("Java DoesystemInfo Constructor");
 }

 public static void main(String[] args) {
  DoesystemInfo doesystem = new DoesystemInfo();
 }
}

ผลลัพธ์จากการรันโค้ดที่ได้ คือ
Java Doesystem Constructor
Java DoesystemInfo Constructor

จากผลลัพธ์จะเห็นว่า Class แม่จะรัน constructor ก่อน จากนั้นจึงมารัน constructor ที่ Class ลูกต่อ

For Each Loop ในภาษา Java

For Each Loop ในภาษา Java

บทความนี้เรามาดูวิธีการใช้ for-each กันครับ ซึ่ง for-each นั้นก็จะมีรูปแบบทั่ว ๆ ไป คือ

for(type itr-var : iterableObj) statement-block

จากรูปแบบโค้ดจะเห็นว่าเราได้วนลูปใน iterableObj ซึ่ง iterableObj นั้นจะต้องเป็น array หรือว่าเป็น Object ที่ implements the new Iterable interface ด้วย

ถ้าเราลองไปดูใน Eclipse ก็จะมีคำอธิบายและรูปแบบโค้ดสำหรับ for-each ไว้ ตามรูปด้านล่าง


ตัวอย่างโค้ดที่ใช้ for-each

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  for (int x : nums) {
   System.out.print(x);
   x = x * 10;
   System.out.print("[" + x + "] ");
  }

  System.out.println();

  for (int x : nums) {
   System.out.print(x + " ");
  }
 }
}

จากโค้ดจะเห็นว่าเราใช้ for-each ในการวนแต่ละตัวใน array มาดูอีกตัวอย่างเราใช้ enum มาวนโดยเรียก values() ซึ่งค่าที่ออกมาก็คือ array

package info.doesystem.howto;

public class DoesystemInfo {
 enum NamingOfTheDays {
  Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
 }

 public static void main(String[] args) throws InterruptedException {
  for (NamingOfTheDays name : NamingOfTheDays.values()) {
   System.out.println(name);
  }
 }
}

for-each ใน Arraylist

ต่อไปลองมาดูวิธีการ for-each ใน List กันดูบ้าง วิธีการก็ตามตัวอย่างด้านล่างเลย

package info.doesystem.howto;

import java.util.ArrayList;
import java.util.List;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  List nameOfDay = new ArrayList<>();
  nameOfDay.add("Sunday");
  nameOfDay.add("Monday");
  nameOfDay.add("Tuesday");
  nameOfDay.add("Wednesday");
  nameOfDay.add("Thursday");
  nameOfDay.add("Friday");
  nameOfDay.add("Saturday");

  for (String name : nameOfDay) {
   System.out.println(name);
  }
 }
}

เมื่อเราลองเข้าไปดูใน ArrayList จะเห็นว่ามีการ implements List อยุ่ด้วย และใน List ก็จะ extends Collection ใน Collection ก็จะมีการ extends Iterable อยู่ด้วย ตามรูปด้านล่าง


ดังนั้น แสดงว่า Collection จะสามารถใช้ foreach ได้ทุก Collection เพราะได้ extends Iterable

java break กับ java continue

java break กับ java continue

break statement

- break statement ใช้สำหรับในการหยุดบล็อกต่าง ๆ เช่น while, for, do-while หรือ switch statement
- เมื่อใช้คำสั่ง break จะเป็นการออกจากบล็อก โดยไม่ต้องทำงานส่วนที่เหลือ

continue statement

- continue statement จะเป็นการหยุดคำสั่งการทำซ้ำในปัจจุบันแล้วไปเริ่มต้นใหม่ หรือ iteration ถัดไป

break statement vs continue statement

เพื่อให้เข้าใจมากขึ้นเราจะยกตัวอย่าง โค้ดที่คล้าย ๆ กันระหว่าง break กับ continue ตามโค้ดด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  int[] num = new int[] { 1, 2, 3, 4, 5 };
  
  for (int i : num) {
   if(i == 3){
    break;
   }
   System.out.println(i);
  }
  
  System.out.println("---");
  
  for (int i : num) {
   if(i == 3){
    continue;
   }
   System.out.println(i);
  }
 }
}

จากโค้ดข้างบนจะได้ผลลัพธ์ คือ
1
2
---
1
2
4
5

จากโค้ดและผลลัพธ์จะเห็นว่า การใช้ break นั้นจะเป็นการออกจาก loop เลย ส่วน continue นั้นจะเมื่อเจอคำสั่งจะหยุดการทำงานที่เหลือแล้วไปเริ่มต้นใหม่

14/10/58

Autobox Unbox ในภาษา Java

Autobox Unbox ในภาษา Java

Boxing คือการแปลงของค่า primitive ไปเป็นค่าของ wrapper instance เช่น แปลงค่าจาก int ไปเป็น Integer
Unboxing คือการแปลงค่าจาก wrapper instance ไปเป็นค่าของ primitive เช่น แปลงค่าจาก Integer ไปเป็น int

มาดูตัวอย่างโค้ดกันเลยครับ

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Integer iOb = 100; // autobox an int

  int i = iOb; // auto-unbox

  System.out.println(i + " " + iOb);
 }
}

จากตัวอย่างโค้ดจะเห็นว่า Integer iOb = 100 จะเป็นการ autobox ซึ่งจะเป็นการแปลงค่าจาก int ไปเป็น Integer และจะเห็นว่า int i = iOb จะเป็นการ auto-unbox ซึ่งจะเป็นการแปลงค่าจาก Integer ไปเป็น int

การทำงานของ Autobox กับ Auto-Unbox

เรามาดูการทำงานของ Autobox กับ Auto-Unbox กันครับ ว่ามันทำงานยังไง มันใช้วิธีไหนในการแปลงค่า ซึ่งวิธีการดูนั้น เราจะดูจากไฟล์ .class ที่ได้ compile มาแล้ว เราจะใช้โปรแกรม Java Decompiler ในการดู ซึ่งผลลัพธ์ก็ออกมาดังนี้



จากรูปจะเห็นว่าในการ autobox นั้นจะทำการไปเรียก Integer.valueOf() และในการ auto-unbox นั้นจะไปเรียก iOb.intValue() ให้อัตโนมัติ

ข้อควรระวัง
จะเห็นว่าในการ auto-unbox นั้นจะมีการไปเรียก intValue() ซึ่งตรงนี้ถ้า iOb มีค่าเป็น null ละก็จะเกิด NullPointerException ขึ้นมาได้ ดังตัวอย่างโค้ด

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Integer iOb = null;
  int i = iOb; // auto-unbox
 }
}

จากโค้ดจะเกิด Exception in thread "main" java.lang.NullPointerException ขึ้นมา เพราะว่ามีการ auto-unbox กับ Object ที่เป็น null ซึ่งจะไปเรียก intValue() ดังนั้นควรระวังไว้ให้ดี

13/10/58

for Statement ในภาษา Java

for Statement ในภาษา Java

บทความนี้เรามาดูวิธีการใช้คำสั่ง for ในภาษา Java กันดูครับ ซึ่งคำสั่ง for ก็เหมือนกับคำสั่ง while เป็นคำสั่งในใช้ในการทำงานแบบซ้ำ ๆ หรือเป็น loop แต่มี syntax ที่แตกต่างออกไปนิดหน่อย มาดู Syntax ของ for กันครับ

for (init ; booleanExpression ; update){
    statement (s)
}

จาก Syntax ของ for จะเห็นว่ามีส่วนที่สำคัญอยู่ 3 ส่วน นั่นคือ
- init เป็นสิ่งที่เริ่มต้นก่อนจะทำการ loop ใน for จะทำครั้งแรกและครั้งเดียว
- booleanExpression เป็น boolean ที่บอกว่าให้ทำงานต่อหรือจะหยุด ถ้าเป็น true จะทำงานในบล็อกต่อ
- update เป็น statement ที่จะทำงานหลังจากการทำงานในบล็อกเสร็จแล้ว จะทำทุกครั้งหลังจากจบบล็อก หรือ loop หนึ่ง ๆ

ในคำสั่ง for statement ของ init, booleanExpression และ update จะเป็นแค่ตัวเลือก นั่นคือ เราสามารถใส่ก็ได้ไม่ใส่ก็ได้ ดังตัวอย่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  for (;;) {
   System.out.println("0");
  }
 }
}

จากตัวอย่างเราไม่ได้ใส่ statement ทั้ง init, booleanExpression และ update เลย เมื่อลองรันดูจะพบว่าโปรแกรมจะวนลูปแบบไม่รู้จบ

การหยุด loop ของ for ในภาษา java มีหลายวิธี เช่น
- ใช้คำสั่ง break;
- ทำให้ booleanExpression เป็น false
- Runtime error

for VS while

เราสามารถเขียน for แบบ while ได้ ดังตัวอย่าง

while (expression) {
 ...
}

for ( ; expression; ) {
 ...
}

จากโค้ดจะเห็นว่าเราสามารถเขียน for เลียนแบบ while ได้ โดยละเว้นการ init กับ update ก็จะเหลือเพียง expression

ตัวอย่างการใช้คำสั่ง for

เรามาดูคำสั่ง for ในรูปแบบที่ใช้ทั่ว ๆ ไปกันดีกว่าครับ ดังตัวอย่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  for (int i = 0; i < 8; i++) {
   System.out.println(i);
  }
 }
}

define two variables in for loop

จาก Syntax จะเห็นว่า แต่ละส่วนนั้นเป็น statement ดังนั้นเราสามารถกำหนดหลาย ๆ ตัวแปรหรือหลาย ๆ statement ได้ ดังตัวอย่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  for (int i = 1, j = 10; i <= 10; i++, j--) {
   System.out.println(i + " x " + j + " = " + (i * j));
  }
 }
}

สำหรับ for ในภาษา java เราก็ขอพักแค่นี้ก่อน หวังว่าจะมีประโยชน์สำหรับหลาย ๆ คนนะคับ

12/10/58

do-while Statement ในภาษา Java

do-while Statement ในภาษา Java

สวัสดีครับ บทความนี้เรามาทำความรู้จัก และลองใช้คำสั่ง do-while ในภาษา java กันดูครับ ซึ่งคำสั่ง do-while จะเป็นคำสั่งเหมือน while แต่จะแตกต่างกันที่ จะทำก่อนแล้วเช็คทีหลัง มาดู Syntax กันก่อนครับ จะได้เข้าใจยิ่งขึ้น

do {
 statement(s)
} while (booleanExpression);

เมื่อเห็น Syntax แล้วจะเห็นว่า คล้าย ๆ กับ while แต่ do-while จะทำบางอย่างก่อน แล้วค่อยมาเช็ค ดังนั้นแสดงว่า โปรแกรมจะเข้า statement อย่างน้อยหนึ่งครั้งก่อนเสมอ มาลองดูตัวอย่างโปรแกรมกันดีกว่า

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  int i = 0;
  do {
   System.out.println(i);
   i++;
  } while (i < 3);
 }
}

จากโค้ด ผลลัพธ์ที่ได้ คือ
0
1
2

do-while จะทำในบล็อกก่อน อย่างน้อย 1 ครั้งเสมอ นั่นคือเราประกาศ int i = 0; ในบล็อกก็จะแสดงค่า i แล้วเพิ่ม i ขึ้น 1 ค่า แล้วค่อยมาตรวจสอบ

สำหรับ do-while ก็ขอจบแค่นี้ก่อนนะคับ ลองไปเล่น ลองเขียนดูครับ

while loop ในภาษา Java

while loop ในภาษา Java

บทความนี้เรามาดู while loop ในภาษา Java กันครับ ว่ามันใช้ยังไงและข้อควรระวังอะไรบ้าง มาดู Syntax กันก่อน ตามด้านล่าง

while (booleanExpression) {
    statement (s)
}

จาก Syntax เราสามารถเขียนโค้ดตัวอย่างง่าย ๆ โดยการใช้ while loop ได้ดังตัวอย่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  int i = 0;
  while (i < 3) {
   System.out.println(i);
   i++;
  }
 }
}

จากโค้ดตัวอย่าง จะเห็นว่าเราจะมี condition คือ i น้อยกว่า 3 ซึ่งถ้าเป็นจริงจะทำงานใน loop จนกว่าจะเป็นเท็จ ถึงจะออกจาก loop

ตัวอย่างโปรแกรมง่าย ๆ โดยการใช้ while

เพื่อความเข้าใจที่มากขึ้น ลองมาดูตัวอย่างโปรแกรม ที่แสดงเข็มวินาทีของนาฬิกาดูครับ ซึ่งเขียนได้ง่าย ๆ ดังนี้

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) throws InterruptedException {
  int i = 0;
  while (true) {
   System.out.println(i);
   Thread.sleep(1000);
   i++;
   if(i == 60){
    i = 0;
   }
  }
 }
}

จากโค้ดเราจะใช้ while แล้วใส่ condition เป็น true เพื่อให้ผ่านตลอด จากนั้นก็ทำการหลับ(sleep) เป็นเวลา 1000 ms ซึ่งก็คือ 1 วินาที แล้วก็แสดงค่า i

จากโค้ดจะเห็นว่า loop while ที่เราเขียนขึ้นนั้น ไม่มีที่สิ้นสุด

แค่นี้เราก็ได้รู้จัก while loop ในภาษา Java กันมาเยอะแล้ว งั้นพักเบรก while loop กันแค่นี้ก่อนดีกว่า สวัสดีครับ แล้วเจอกันใหม่

switch Statement ในภาษา Java

switch Statement ในภาษา Java

บทความนี้เรามาดูวิธีการใช้คำสั่ง switch ในภาษา Java กันครับ คำสั่ง switch ก็เป็นคำสั่งประเภทเงื่อนไขเหมือนกับ if นั่นแหละ เรามาดู Syntax สำหรับคำสั่ง switch กันครับ ตามด้านล่างเลย

switch (expression) {
case value_1 :
     statement (s);
     break;
case value_2 :
     statement (s);
     break;
case value_n :
     statement (s);
     break;
default:
     statement (s);
}

จาก Syntax ของ switch เรามาดูตัวอย่างโค้ดที่ใช้ switch แบบง่าย ๆ กันตามด้านล่างเลย

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  int i = 1;
  switch (i) {
  case 1:
   System.out.println("One.");
   break;
  case 2:
   System.out.println("Two.");
   break;
  case 3:
   System.out.println("Three.");
   break;
  default:
   System.out.println("Default value.");
  }
 }
}

จากโค้ดตัวอย่างและ Syntax เราจะใช้ i เทียบกับ case ต่าง ๆ และมีสิ่งที่น่าสนใจคือ break

break ใน switch นั้น ถ้าเราไม่ใส่ก็ไม่เกิด Error จะ compile ได้ตามปกติ แต่ว่า ควรระวังไว้ให้ดีเพราะถ้าหากเราไม่ใส่ break โปรแกรมจะทำการรันบล็อกของ case ต่อไป ตัวอย่างโค้ด switch แบบไม่มี break

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  int i = 0;

  switch (i) {
  case 0:
   System.out.println("i is 0");
  case 1:
   System.out.println("i is 1");
  case 2:
   System.out.println("i is 2");
  default:
   System.out.println("Free flowing switch example!");
  }
 }
}

ผลลัพธ์ที่ได้จากการรันโค้ดข้างบน คือ
i is 0
i is 1
i is 2
Free flowing switch example!

จะเห็นว่าเมื่อเข้า case แรก คือ case 0: แล้ว จะทำการรันโค้ดในบล็อกนี้ เมื่อไม่มี break ก็จะรันในบล็อกต่อไปด้วย

เพียงแค่นี้เราก็ได้รู้ Syntax ตัวอย่างโค้ด และวิธีการใช้งานแล้ว ก็ขอจบเพียงแค่นี้คับสำหรับ switch ในภาษา Java หวังว่าจะมีประโยชน์สำหรับหลาย ๆ คน

If Statement ในภาษา Java

If Statement ในภาษา Java


บทความนี้เรามาดูวิธีการใช้ if Statement ในภาษา Java กันครับ

คำสั่ง if ในภาษา java เป็นคำสั่งประเภทเงื่อนไข เช่น ถ้าเป็นยังงั้น ให้ทำอย่างงี้ ถ้าไม่ใช่ให้ทำอย่างงี้ อะไรประมาณนี้ เรามาดู Syntax กันก่อน ตามโค้ดด้านล่าง

if (booleanExpression) {
    statement (s)
}

หรือ

if (booleanExpression) {
    statement (s)
} else {
    statement (s)
}


จาก Syntax จะเป็นว่า if นั้นเขียนได้หลายแบบ หลายเงื่อนไข ตามต้องการ ตัวอย่างโค้ดที่ใช้ if

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  int a = 5;
  
  // if
  if(a == 2){
   // statement
  }
  
  // if else
  if(a == 4){
   // statement
  }
  else{
   // statement
  }
  
  // if else if
  if(a == 1){
   // statement
  }
  else if(a == 2){
   // statement
  }
  else{
   // statement
  }
 }
}

ใช้ if หลาย ๆ เงื่อนไข

จาก Syntax เราจะเห็นว่าเราสามารถใช้ if ได้หลาย ๆ เงื่อนไข ดังตัวอย่าง

ตัวอย่าง ให้แสดงคำว่า Win เมื่อ a = 0 หรือ a = 100

จากโจทย์ จะเห็นว่ามีเงื่อนไขอยู่สองตัว นั่นคือ a = 0 และ a = 100

ตัวอย่างการแก้โจทย์วิธีแรก โดยใช้ if ซ้อน if

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  int a = 1;
  
  if(a == 0){
   if(a == 10){
    System.out.println("Win");
   }
  }
 }
}


วิธีนี้เราจะทำการ เช็ค a = 0 ก่อน จากนั้นก็มาเช็ค a = 10 แล้วค่อยแสดงคำว่า Win

ตัวอย่างการแก้โจทย์วิธีที่สอง โดยใช้ or มาคั่นกลาง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  int a = 1;
  
  if(a == 0 || a == 10){
   System.out.println("Win");
  }
 }
}


วิธีนี้จะเป็นการลดรูป โดยการใช้ or เข้ามาช่วยในเงื่อนไข

เพียงแค่นี้เราก็ได้รู้จัก ได้ใช้งาน และได้ดูตัวอย่างการใช้ if ในภาษา Java กันแล้ว

7/10/58

Short ในภาษา Java

Short ในภาษา Java

Short ในภาษา Java นั้นเป็นการเก็บข้อมูลชนิดตัวเลข ซึ่งมีค่าอยู่ระหว่าง –32,768 ถึง 32,767 ซึ่งในการหาค่าต่ำสุดและค่าสูงสุดของ Short นั้นหาได้จากตัวอย่างโค้ด

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  System.out.println(Short.MIN_VALUE);
  System.out.println(Short.MAX_VALUE);
 }
}

Cast to short

ในการบวกกันของ short นั้น ผลลัพธ์จะออกมาเป็น int ดังนั้นถ้าเราต้องการที่จะได้ short เราจะต้อง cast กลับมาเป็น short ดังตัวอย่างโค้ดด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  short a, b, c;
     c = 2;
     b = 9;
     a = (short) (b + c);
     System.out.println("a is " + a);
 }
}

Convert String to Short

ในการแปลง String ไปเป็น Short นั้นเราสามารถทำได้หลายวิธี ดังตัวอย่างโค้ด

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Short sObj1 = new Short("100");
  System.out.println(sObj1);
  
  String str = "100";
  
  Short sObj2 = Short.valueOf(str);
  System.out.println(sObj2);
  
  Short sObj3 = new Short(str);
  System.out.println(sObj3);
 }
}

6/10/58

Byte ใน Java

Byte ใน Java


บทความนี้เรามาทำความรู้จักกับ Byte ในภาษา Java กันครับ ว่าคืออะไร และใช้ยังไง

Byte เป็นตัวเลขในภาษา Java ที่เก็บและมีขนาดน้อยที่สุด มีเพียง 8 bit ซึ่งมีค่าอยู่ระหว่าง -128 ถึง 127

ตัวอย่างการใช้ Byte ในภาษา Java แบบง่าย ๆ ตามโค้ดด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  byte b1 = 100;
  byte b2 = 20;
  System.out.println("b1 is : " + b1);
  System.out.println("b1 is : " + b2);
 }
}

Convert byte to String

มาดูตัวอย่างการแปลง byte เป็น String กันดูบ้าง ซึ่งก็มีหลาย ๆ วิธีด้วยกัน ดังตัวอย่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  byte b = 65;
  
  // Using the static toString method of the Byte class
  String sol1 = Byte.toString(b);
  
  // Using simple concatenation with an empty String
  String sol2 = b + "";
  
  // Creating a byte array and passing it to the String constructor
  String sol3 = new String(new byte[] {b});
 }
}


convert byte primitive type to Byte object

ต่อไปลองมาดูการแปลงค่าจาก byte primitive type ไปเป็น Byte Object ตามตัวอย่างโค้ด

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  byte i = 10;

  Byte bObj = new Byte(i);
 }
}

การ Convert Byte ไปเป็น Primitive ที่เป็นชนิดตัวเลข

Byte จัดอยู่ในกลุ่มตัวเลข ดังนั้นเราสามารถแปลง Byte ไปเป็น Primitive Type ที่เป็นตัวเลขได้ ตามตัวอย่างโค้ด

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Byte bObj = new Byte("10");
  
  // convert to byte
  byte b = bObj.byteValue();
  System.out.println(b);
  
  // convert to short
  short s = bObj.shortValue();
  System.out.println(s);
  
  // convert to int
  int i = bObj.intValue();
  System.out.println(i);
  
  // convert to float
  float f = bObj.floatValue();
  System.out.println(f);
  
  // convert to double
  double d = bObj.doubleValue();
  System.out.println(d);
  
  // convert to long
  long l = bObj.longValue();
  System.out.println(l);
 }
}

ตัวอย่าง Output ที่ได้

10
10
10
10.0
10.0
10

2/10/58

Boolean ใน Java

Boolean ใน Java

บทความนี้เรามาทำความรู้จักกับ Boolean ในภาษา Java กันครับ ว่าคืออะไร และใช้ยังไง

Boolean ที่เรากล่าวถึงจะอยู่ใน java.lang.Boolean ซึ่งเป็นตัว Wrapper Class ของ boolean ที่เป็น Primitive Type

เราสามารถสร้าง Bolean Object ได้จาก boolean หรือจาก String ก็ได้ ถ้าเราไปดูใน constructor ของ Boolean จะเห็นว่ารับได้ทั้ง boolean และก็ String ตามรูปด้านล่าง


ถ้าเราเขียนโค้ดก็จะได้ดังตัวอย่างด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Boolean b1 = new Boolean(false);
  Boolean b2 = new Boolean("true");
 }
}

การ convert Boolean เป็น boolean

เราสามารถสร้าง Boolean Object ได้จาก boolean ในทำนองเดียวกัน เราก็สามารถแปลง Boolean ไปเป็น boolean ได้เหมือนกัน ตามตัวอย่างโค้ดด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Boolean b1 = new Boolean(false);
  Boolean b2 = new Boolean("true");

  boolean bool1 = b1.booleanValue();
  boolean bool2 = b2.booleanValue();
 }
}

การแปลง boolean เป็น Boolean โดยใช้ valueOf

จากข้างบนจะเห็นว่าเราสามารถแปลง boolean เป็น Boolean ได้โดยการ new แต่ก็ยังมีวิธีการแปลง boolean เป็น Boolean ได้โดยใช้ method valueOf ตามตัวอย่างโค้ดด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  Boolean b1 = Boolean.valueOf(false);
  Boolean b2 = Boolean.valueOf("true");
 }
}

การแปลง String เป็น boolean

จากหลาย ๆ ตัวอย่างที่ผ่านมาเราได้แปลง String เป็น Boolean ซึ่งเป็น Object กันไปแล้ว เรามาดูวิธีการแปลง String เป็น boolean ที่เป็น primitive type กันดูบ้างครับ ตามตัวอย่างด้านล่าง

package info.doesystem.howto;

public class DoesystemInfo {
 public static void main(String[] args) {
  String strBoolean = "true";

  // String to boolean conversion
  boolean theValue = Boolean.parseBoolean(strBoolean);

  System.out.println(theValue);
 }
}

จากโค้ดตัวอย่างด้านบน ในการแปลง String เป็น boolean ที่เป็น primitive type นั้น เราได้ใช้ method parseBoolean ที่อยู่ใน Class Boolean ในการแปลง เรามาลองสังเกตุ Class Boolean นี้ซักหน่อยตามรูปด้านล่าง


ตามรูปจะเห็นว่าในการแปลง String เป็น Boolean นั้นโดยผ่าน constructor หรือ valueOf ก็ต้องผ่าน parseBoolean เช่นเดียวกัน