Sufficiency Economy
Group Blog
 
All blogs
 

Maven

บันทึกไว้กันลืม

ต้องการทดลองใช้ spring framework ซึ่งต้องรู้เครื่องมือที่ชื่อว่า maven ซึ่งได้ทดลองตาม link
//spring.io/guides/gs/maven/
โครงสร้าง directory คือ src/main/java แล้วตามด้วยชื่อ package ในตัวอย่างคือ hello
สร้างสอง class คือ HelloWorld.java และ Greeting.java
===HelloWorld.java 
package hello;

public class HelloWorld {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
    }
}
===Greeting.java
package hello;

public class Greeter {
    public String sayHello() {
        return "Hello world!";
    }
}

code ก็ไม่ยากอะไร แค่พิมพ์ คำว่า Hello world
แต่ที่ยากคือการ ตั้งค่าในไฟล์ pom.xml 


คำสั่งเกี่ยวกับ Maven
mvn -v
mvn compile
mvn package
ผลลัพธ์ จะเก็บใน directory ชื่อ target
mvn install อันนี้เหมือนจะเอาผลลัพธ์ ไปไว้ในที่ตั้งค่าไว้?

เมื่อทำเสร็จ แล้วจะทดสอบ โปรแกรมอย่างไร
ตอนแรก นึกว่าใช้ java HelloWorld แต่เกิด error ว่าหา class ไม่เจอ
จากการไปค้นที่ //maven.apache.org/guides/getting-started/maven-in-five-minutes.html

ก็ได้คำตอบว่าต้องพิมพ์ ประมาณนี้
java -cp target/gs-maven-0.1.0.jar hello.HelloWorld

^ ^




 

Create Date : 18 สิงหาคม 2557    
Last Update : 18 สิงหาคม 2557 21:12:10 น.
Counter : 912 Pageviews.  

LOVE JAVA : Day7 แบ่งงานกันทำ ด้วย คลาส Thread ^ ^

หน้า 269
ในช่วงแรกๆ ระบบปฏิบัติการ สามารถทำงานหลายๆ งานในเวลาเดียวกันได้ ด้วยระบบ multitasking
โดยโปรแกรมจะถูกส่งไปเข้าคิวที่ CPU เพื่อรอการทำงาน เมื่อโปรแกรมได้ทำงานแล้ว กิจกรรมของมัน เรียกว่า process  ซึ่งต้องมีสภาพแวดล้อมเป็นของตัวเอง ที่เรียกว่า PCB process control block

ดังนั้นเมื่อถึงคิวโปรแกรมที่สองจะทำงาน ก็ต้องมีกระบวนการเปลี่ยนสภาพแวดล้อมที่เรียกว่า context switching ซึ่งทำให้เสียเวลามาก จึงมีแนวคิดใหม่ที่เรียกว่า ระบบปฏิบัติการแบบ multi-threading

ซึ่งคือการแบ่ง process ให้เป็นหน่วยที่เล็กกว่าที่เรียกว่า thread เนื่องจากเป็นการทำงานใน process เดียวกัน ทำให้ลดปัญหาด้านเวลา ของการทำ context switching

พอแค่นี้ดีกว่า เขียนเอง ก็งง เอง 55

สถานะของ thread ได้แก่ wait, ready, running, blocked, death

เมื่อสร้าง instance ของ thread ด้วยคำสั่ง new() -> สถานะจะเปลี่ยนเป็น wait
เมื่อเรียกคำสั่ง start() เปลี่ยนสถานะจาก wait เป็น ready คือพร้อมที่โดนเรียกไปทำงาน แล้วเปลี่ยนเป็นสถานะ running อย่างรวดเร็ว

ส่วน code ที่ต้องการให้ทำงานแบบ thread จะต้องถูกเขียนใน method ที่ชื่อว่า public void run()

ตัวอย่าง code ตามหนังสือ หน้า 275

โดยการสร้าง class ที่ชื่อ MyThread โดยมี constructor เพื่อตั้งชื่อ Thread มัง ?
ส่วนการทำงานก็คือการ พิมพ์ชื่อของ Thread จำนวน 1000 ครั้ง code ตามรูป


ต่อไปเป็นส่วนทดสอบโปรแกรม
ก็เพียงสร้าง instance ด้วยคำสั่ง new 3 คำสั่ง พร้อมส่ง argument เพื่อตั้งชื่อ Thread เป็น A B C ตามลำดับ
และเรียก method start() เพื่อเปลี่ยน สถานะ wait เป็น ready แล้วเข้าคิวพร้อมถูกเรียกไปทำงาน

ถ้าเป็นโปรแกรมปกติ ก็คงพิมพ์ตัวอักษร A หนึ่งพันครั้ง, B หนึ่งพันครั้ง, C หนึ่งพันครั้ง แล้วก็จบโปรแกรม 
แต่นี้เป็นโปรแกรมแบบ Thread แปลว่า instance ทั้งสามตัว ต้องมีโอกาส run เหมือนกัน ผลลัพธ์จึงเป็นประมาณนี้ ซึ่งจะเห็นว่า มี C แทรกก่อน B ทั้งที่เราสร้าง instance B ก่อน และ runโปรแกรมใหม่ผลลัพธ์ อาจไม่เหมือนเดิม คือการเรียกการทำงาน ตามที่ระบบปฏิบัติการจัดการ


วันที่ 7 แล้วววว







 

Create Date : 29 มิถุนายน 2557    
Last Update : 29 มิถุนายน 2557 17:52:14 น.
Counter : 1055 Pageviews.  

LOVE JAVA : Day6 ตรวจจับ Error : Exception Handle

หน้า 247

การตรวจจับ Error ก็ใช้คำสั่งสำคัญ 3 คำสั่งคือ try catch finally

try block ก็เพื่อใส่คำสั่งที่อาจจะเกิด error ได้  ถ้าพบ ก็ Throwable ตัว exception ออกมา

ขยายความ error สักหน่อย ก็เช่น การหารด้วยศูนย์

java.lang.ArithmeticException: / by zero

การอ้างถึง index ที่ไม่มีใน array  จะเกิด exceptionjava.lang.ArrayIndexOutOfBoundsException

catch block ก็เพื่อสร้างคำสั่ง เพื่อจัดการ error อย่างเหมาะสม

finally block มีประโยชน์ ตรงถ้าต้องออกจากโปรแกรมก่อนในส่วนของ catch เช่นพวกคำสั่ง

break  continue return System.exit() จะถูกบังคับให้ทำคำสั่งใน finally ก่อน ??

ตัวอย่างเช่น

class ArrayOut1
{
 public static void main(String args[])
 {
  int x,y;
  x = 2;
  y = 0;
  try
  {
   //System.out.println("Print args : " + args[0]);
   x = x/y;
  }
  catch(Exception e)
  {
   System.out.println("Get Error : " + e);
  }
  finally
  {
   System.out.println("End of finally ");
  }
  System.out.println("End of catch ");
 }
}




 

Create Date : 14 มิถุนายน 2557    
Last Update : 18 มิถุนายน 2557 18:46:12 น.
Counter : 1110 Pageviews.  

LOVE JAVA : Day5 ทดสอบคุณสมบัติ Shadowing และ Overriding

หน้า 207

ถ้าเราขยาย class แล้วสร้าง data member หรือ method ที่เหมือน class แม่

เวลาที่เราสร้าง instance ก็จะงงว่าแล้วจะเรียกใช้ data member หรือ method จาก class ใด

แต่ ระบบ ได้กำหนดแล้วว่า ให้เกิดการบัง(shadow) data member ของ class แม่ หรือ

ครอบงำ(override) method ของ class แม่

<ในภาษา C++ ใช้คำว่า override คำเดียว>

<ถ้ามีคำว่า final นำหน้า data member หรือ method > เราจะไม่สามารถ shadow หรือ override ได้เน้อ>

ประโยชน์ในหนังสือบอกว่า ถ้ามี class ที่มีคุณสมบัติที่เราต้องการอยู่แล้ว แต่บาง method ไม่เหมาะสม เราก็จะ override method นั้นใหม่

ตัวอย่าง code แรกคือการ บัง data member ที่ชื่อว่า x 

ดังนั้นเวลาเรียก จึงแสดงค่า x ของ class  B แทน   

class A {int x = 1;}
class B extends A {float x = 2.0f;}
class Shadowing
{
 public static void main(String args[])
 {
  B b = new B();
  System.out.println(b.x);
 }
}

ส่วนตัวอย่างนี้ เป็นการ ครอบงำ(override) method ที่ชื่อว่า print

ทำให้เวลาเรียกใช้ จึงแสดงตัวอักษร B แทน

class A
{ void print()
 {
  System.out.println('A');
 }
}

class B extends A
{
 void print()
 {
  System.out.println('B');
 }
}

class Overriding
{
 public static void main(String args[])
 {
  new B().print();
 }
}

วันนี้ห้าแล้ววว เมื่อไรจะรู้เรื่องเนี่ยยยย




 

Create Date : 30 พฤษภาคม 2557    
Last Update : 30 พฤษภาคม 2557 19:38:39 น.
Counter : 1474 Pageviews.  

LOVE JAVA : Day4 การสืบทอดคุณสมบัติ inheritance

หน้า 192

วันนี้มาทดลอง การสืบทอดคุณสมบัติของ class กัน

1) สร้าง 3 class ได้แก่ Student, EngStudent และ EngStudentTest เพื่อทดสอบ การทำงาน

2) การสืบทอด class ลูก (subclass) จะได้เฉพาะ data member และ method ของ class แม่(superclass) เท่านั้น ที่มี modifier เป็น public (default ด้วยหรือเปล่าหว่า) ดังนั้น ถ้าต้องการเข้าถึงข้อมูลที่เป็น private ก็ต้องผ่าน method get set

3) ใช้ คำสั่ง extends ในการสืบทอด

4) การ constructor จะแปลกๆ นิดหน่อย

4.1) constructor ไม่ถูกสืบทอด เพราะชื่อคนละชื่อกันอยู่แล้ว

4.2) การอ้างถึง class แม่ ต้องใช้ keyword "super" ตามด้วยชื่อตัวแปร

4.3) เรียก constructor แม่ ให้ใช้ super(parmeter ถ้ามี) อันนี้งม อยู่นานด้นไปเรียกโดยใช้

super.Student(parmeter ถ้ามี)  มันก็เลยหาไม่เจอ งงส่ะ

4.4) ถึงแม้จะสืบทอดกันหลายรุ่น super จะหมายถึงบรรพบุรุษ รุ่นแรกเท่านั้น (อ้าวแล้วรุ่นต่อๆมากำหนดอย่างไรหว่า)

code มั่วๆ ก็ประมาณข้างล่างครับ แหะๆ

วันนี้สี่แล้วววว 

============================

  class Student
{
 private int id;
 private String name;
 private double gpa;
 public String school;


 Student(String s) {school = s; System.out.println("My school is "+school+ "  id ="+ id);}

 public void setName(String n) {name = n;}
 public String getName() {return name;}

 public void setGpa(double g) {gpa = g;}
 public double getGpa() {return gpa;}

 public void setSchool(String s) {school = s;}
 public String getSchool() {return school;}

 public void printId() {System.out.println("my id is "+id);}
 public void setId(int myId) {id = myId;}

}

class EngStudent extends Student
{
 private int engLevel;
 EngStudent(int e,String str)
 {
   super(str);
   super.setId(77);
   engLevel = e;

 }
 public void printMe()
 {
  System.out.println("print from EngStudent"+engLevel);
 }
}




 

Create Date : 25 พฤษภาคม 2557    
Last Update : 25 พฤษภาคม 2557 9:02:11 น.
Counter : 954 Pageviews.  

1  2  3  

wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.