thaiall logomy background แนะนำภาษาจาวา
my town
java

แนะนำภาษาจาวา

ภาษาจาวา คือ ภาษาการโปรแกรมถูกพัฒนาโดยบริษัทซันไมโครซิสเท็ม และเปิดตัวในปี 2538 โปรแกรมที่นำไปใช้ได้จะถูกแปลให้อยู่ในรูปของไบท์โค้ด เมื่อนำไปประมวลผลจะมีตัวแปลภาษาที่ทำให้ไบท์โค้ดสามารถทำงานได้ในแต่ละอุปกรณ์ ซึ่งถูกนำไปใช้อย่างแพร่หลายสำหรับการพัฒนาเว็บ รูปแบบมีรากฐานจากภาษา C และ C++ แล้วยังเป็นภาษาที่ง่ายต่อการออกแบบโปรแกรมเชิงวัตถุ และเป็นภาษาหลักสำหรับพัฒนาแอพพลิเคชั่นบน Android OS ที่นิยมใช้บนอุปกรณ์เคลื่อนที่
แนะนำจาวา
1. ที่มา
ประวัติ (History) [wikipedia.org]
    บริษัท Sun Microsystems, Inc. ถูกซื้อโดยบริษัท Oracle ประมาณ 7.4 พันล้านดอลลาร์ 20 เมษายน 2552 หลังตกลงกันไม่ได้กับบริษัท IBM ปัจจุบันเรายังสามารถดาวน์โหลด Java Platform, Standard Edition มาใช้ได้ โดยแบ่งเป็น JDK (Java Development Kit for Developer) และ JRE (Java Runtime Environment)
    จาวา คือ ภาษาการโปรแกรม ถูกพัฒนาโดยบริษัทซันไมโครซิสเท็ม และเปิดตัวในปีพ.ศ. 2538 และขายให้บริษัท Oracle ในพ.ศ.2552 โปรแกรมที่นำไปใช้ได้จะถูกแปลให้อยู่ในรูปของไบท์โค้ด เมื่อนำไปประมวลผลจะมีตัวแปลภาษาที่ทำให้ไบท์โค้ดสามารถทำงานได้ในแต่ละอุปกรณ์ ซึ่งถูกนำไปใช้อย่างแพร่หลายสำหรับการพัฒนาเว็บ รูปแบบมีรากฐานจากภาษา C และ C++ แล้วยังเป็นภาษาที่ง่ายต่อการออกแบบโปรแกรมเชิงวัตถุ และเป็นภาษาหลักสำหรับพัฒนาแอพพลิเคชั่นบน Android OS ที่นิยมใช้บน TabletPC หรือ SmartPhone
รุ่นต่าง ๆ ของ Java ยุคแรก ๆ
- J2SE: Java 2 Platform,Standard Edition :Core/Desktop
- J2EE: Java 2 Platform, Enterprise Edition :Enterprise/Server
- J2ME: Java 2 Platform, Micro Edition :Mobile/Wireless
- JRE: Java Runtime Environment
- JVM: Java Virtual Machine
    เว็บเพจนี้ถูกเรียบเรียง เพื่อเตรียมสอนจาวาสำหรับผู้เริ่มต้น + การโปรแกรมเชิงวัตถุ ภายหลังจากผู้เขียนสอบผ่าน SCJP1.4 และ SCJP5 จึงรู้ว่าเว็บเพจนี้ให้ข้อมูลขั้นพื้นฐานเท่านั้น ทำให้มีเรื่องมากมายต้องถูกปรับปรุง .. ให้ตรงตามหลักการของ Java Certified ที่ท่านเห็นขณะนี้เป็นเพียงความรู้เบื้องต้น(SL-110) ก่อนถึง SCJP(SL-275) รู้แค่ที่ผมเขียนไว้ ไม่พอไปสอบ SCJP .. ต้องอ่าน และทดสอบด้วยตนเองอีกมาก
รุ่นของ Java
1. JDK 1.0 (Jan 23, 1996)
2. JDK 1.1 (Feb 19, 1997)
3. J2SE 1.2 (Dec 8, 1998)
4. J2SE 1.3 (May 8, 2000)
5. J2SE 1.4 (Feb 6, 2002)
6. J2EE 5.0 (Sep 30, 2004)
7. Java SE 6 (Dec 11, 2006)
8. Java SE 7 (July 28, 2011)
คนจาวา ใจดี
+ narisa.com
+ thaidev.com
+ exzilla.net
+ yakyaihost.net
+ jarticles.com
+ webthaidd.com
2. ความหมาย ภาษาจาวา (Java Language) คือ ภาษาโปรแกรมที่ถูกพัฒนาโดยบริษัท ซันไมโครซิสเต็มส์ เป็นภาษาสำหรับเขียนโปรแกรมที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ (OOP = Object-Oriented Programming) โปรแกรมที่เขียนขึ้นถ้าเป็นคลาสก็จะเป็นต้นแบบของวัตถุสามารถมีเมทธอด (Method) ที่ประกอบด้วยพฤติกรรม (Behavior) รูปพรรณ (Identity) และสถานะ (State) ?
3. กฏของ OOP (Object Oriented Programming) อาลัน เคร์(Alan Kay) เป็นผู้บุกเบิกแนวความคิดการเขียนโปรแกรมเชิงวัตถุคนหนึ่ง และมีส่วนพัฒนา Small talk ได้เสนอกฎ 5 ข้อของ OOP ไว้ดังนี้
1. ทุกสิ่งเป็นวัตถุ (Everything is an object)
2. โปรแกรมคือกลุ่มของวัตถุที่ส่งข่าวสารบอกกันและกันให้ทำงาน (A program is a bunch(พวง) of objects telling each other what to do by sending messages)
3. แต่ละวัตถุต้องมีหน่วยความจำ และประกอบด้วยวัตถุอื่น (Each object has its own memory made up of other objects)
4. วัตถุต้องจัดอยู่ในประเภทใดประเภทหนึ่ง (Every object has a type)
5. วัตถุประเภทเดียวกันย่อมได้รับข่าวสารเหมือนกัน (All objects of a particular type can receive the same messages)
4. ลักษณะที่ Object หนึ่ง ๆ ต้องมี
Object ModelGeneral, UMLOOPCoding in Java
StateValue of AttributeValue of PropertyValue of Variable/Attribute
BehaviorBehavior/ActionMethodMethod
IdentityAttributePropertyVariable/Attribute
5. การโปรแกรมเชิงวัตถุ (OOP = Object-Oriented Programming)
การเขียนโปรแกรมที่ประกอบด้วยกลุ่มของวัตถุ(Objects) แต่ละวัตถุจะจัดเป็นกลุ่มในรูปของคลาส ซึ่งแต่ละคลาสอาจมีคุณสมบัติ การปกป้อง (Encapsulation) การสืบทอด (Inheritance) การพ้องรูป (Polymorphism)
แนวคิดของการโปรแกรมเชิงวัตถุ (OOP Concepts) ?
1. การปกป้อง (Encapsulation)
- การรวมกลุ่มของข้อมูล และกลุ่มของโปรแกรม เพื่อการปกป้อง และเลือกตอบสนอง
2. การสืบทอด (Inheritance)
- ยอมให้นำไปใช้ หรือเขียนขึ้นมาทดแทนของเดิม
3. การพ้องรูป (Polymorphism) = Many Shapes
- Overloading มีชื่อโปรแกรมเดียวกัน แต่รายการตัวแปร (Parameter List) ต่างกัน
- Overriding มีชื่อโปรแกรม และตัวแปรเหมือนกัน เพื่อเขียน behavior ขึ้นมาใหม่
ตัวอย่างโปรแกรม
class father 
{
	int n_time;
	private int to_show (int run_time) 
	{
		run_time = n_time + 1; 
		return run_time;
	}
}
class child extends father 
{
	child() 
	{
		n_time = 5;
		System.out.println(to_show(n_time)); // 7
	}
	public static void main(String[] a) 
	{
		new child();
	}
	private int to_show (int run_time) 
	{
		run_time = n_time + 2; 
		return run_time;
	}
}
class x
{
	public static void main(String ar[])
	{
		int a = 1; int b; b = a; a = 2;
		int c[]={3}; int d[]=c; c[0]=4;
		System.out.println(a+b+c[0]+d[0]); 
	}   // 11
}
Access Level #
SpecifierClassPackageSubclassWorld
public
/
/
/
/
protected
/
/
/
x
no modifier
/
/
x
x
private
/
x
x
x
6. เอกสารอ้างอิง Java Language Specification 2.0
อธิบายเป็นบทชัดเจน 18 บท ถูกจัดเรียงเหมือนหนังสือที่อ่านเข้าใจง่าย ตั้งแต่ introduction, grammar ไปถึง syntax เนื้อหาส่วนใหญ่เน้นการอธิบายมากกว่าตัวอย่างโปรแกรม
:: read | download 410 KB
API ref. & developer doc.
จำเป็นที่ผู้เรียน Java ต้องอ่านเอกสารชุดนี้ให้เป็น เพราะแต่ละ class มี method ให้ใช้มากมาย และอาจเปลี่ยนไปตามรุ่นของ Compiler สำหรับตัวอย่าง class String มีให้อ่าน และนำไปใช้ได้ทันที
:: read | download 32 MB
7. ตัวอย่างโปรแกรมที่ใช้ Applet
//<applet code=x.class width=100 height=100></applet>
import java.applet.*;
import java.awt.*;
public class x extends Applet 
{
	int i = 0;
	public void init() { i = 1; repaint(); }
	public void start() { i += 10; repaint(); }
	public void stop() { i += 100; repaint(); }
	public void destroy() { }
	public void paint(Graphics g) 
	{
		setBackground(new Color(255,255,200));
		Font fnt = new Font("Angsana NEW",Font.PLAIN,20);
		g.setFont(fnt);
		g.drawString(i + "ดูที่นี่",20,20);
	}
}
8. ข้อยกเว้น (Exception)
Subclass of Exception
java.lang.Object java.lang.Throwable java.lang.Error java.lang.Exception
AssertionError, AWTError, CoderMalfunctionError, FactoryConfigurationError, 
LinkageError, ThreadDeath, TransformerFactoryConfigurationError, VirtualMachineError 
java.lang.RuntimeException
java.lang.IndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
class testofexception {
	public static void main(String[] args) {
		try  {
			System.out.println(1/0);	
		} catch (Exception e)  {
			System.out.println(e);
		}
		// java.lang.ArithmeticException: / by zero
	}
}
ผลลัพธ์จากการหารด้วย 0 ที่แตกต่างกัน
เมื่อหาร double ด้วย 0 ผลลัพธ์คือ Infinity
double a=10.00; System.out.println(a/0);
Console: Infinity
เมื่อหาร int ด้วย 0 ผลลัพธ์คือ Exception
int a=10; System.out.println(a/0);
จะ throw Arithmetic Exception
เมื่อหาร double ด้วย 0 แล้วต้องการให้ throw Exception
double a=10.00; int b=0;
if (b == 0) throw new ArithmeticException();
System.out.println(a/b);
..., ClassNotFoundException, DataFormatException, DestroyFailedException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, InstantiationException, InterruptedException, InvalidMidiDataException, InvalidPreferencesFormatException, InvocationTargetException, IOException, LastOwnerException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, RuntimeException, ServerNotActiveException, SQLException, TooManyListenersException ...
9. เจชาร์ป (J#) เจชาร์ป เป็นผลงานของบริษัทไมโครซอฟท์ แต่มีหลักการ หรือทฤษฎีที่ต่อยอดมาจากภาษาจาวาของบริษัทซัน และเจพลัสพลัส (J++) จึงมีโครงสร้างภาษาเหมือนกัน ดังนั้นผู้ที่เคยศึกษาภาษาจาวาของบริษัทซันมาก่อน จึงสามารถพัฒนาภาษาจาวาด้วยเจชาร์ปได้โดยง่ายภายใต้สภาวแวดล้องของดอทเน็ต แต่ผลการแปลโปรแกรมผ่านเจชาร์ปจะไม่ได้ไบท์โค้ด (Byte Code) หรือแฟ้ม .class เหมือนผลการแปลด้วยตัวแปลภาษาของบริษัทซัน และเจชาร์ปไม่สนับสนุนการพัฒนาแอพเพล็ท (Applet)
นักพัฒนาสามารถใช้งานตัวแปลภาษาในสภาวะแวดล้อมบนวินโดว์ โดยเปิด Microsoft Visual Studio และสร้าง VJ# Console Application เมื่อจัดเก็บโครงงาน (Project) จะสร้างห้อง C:\Documents and Settings \admin \My Documents \Visual Studio 2005 \Projects \ConsoleApplication1 และแฟ้มที่ถูกสร้างขึ้น คือ Program.jsl
แฟ้มหลักสำหรับการเป็นตัวแปลภาษา คือ แฟ้ม vjc.exe (Visual Java Compiler) เก็บอยู่ในห้อง C:\WINDOWS.0 \Microsoft.NET \Framework \v2.0.50727 หากใช้ตัวแปลภาษาตัวนี้เพื่อแปลแฟ้มรหัสต้นฉบับชื่อ Program.jsl ผ่าน DOS Command ในสภาวะแวดล้อมที่เหมาะสมก็จะทำได้ ซึ่งผลจากการแปลแฟ้ม Program.jsl จะได้แฟ้ม Program.exe มีขนาด 4096 Byte มิใช่แฟ้ม Program.class เหมือนภาษาจาวาของบริษัทซัน
ตัวอย่างการแปล
DOS> vjc x.jsl
DOS> vjc x1.jsl x2.jsl /out:app.exe
10. โครงการจาวาภิวัฒน์ (Javapiwat) (!sipachiangmai.org) - หลักสูตร พื้นฐาน ภาษาการโปรแกรมจาวา (SL-110)
- หลักสูตร ภาษาการโปรแกรมจาวา (SL-275) (Java Certification FAQ)
- ตัวอย่างข้อสอบ (JAVA Programmer Quiz)
1. thaiall.com/quiz (ข้อสอบชุดเล็ก เริ่ม 18 กรกฎาคม 2548)
2. thaiall.com/scjp (Pactice SCJP)
3. javaranch.com (Text 65 Questions + Online Checking 60 Questions)
4. jchq.net (Text 180 Questions)
5. danchisholm.net (Text 400 Questions)
6. 4tests.com (40 Questions ทำทีละข้อ แล้ว Download ข้อใหม่)
7. ! sun.com (Online Quiz for practice เฉลยทันที)
Java Certified Programmer สนับสนุนโดย SIPA สาขาเชียงใหม่
- sipa.or.th , !sipachiangmai.org
- เตรียมสอบ SCJP 5.0 (MZ)
- เตรียมสอบ SCJP 1.6 (whizlabs.com)
- Forum for SCJP
Sun Certified Programmer (Java 2 Platform 1.4)
1. Declarations and Access Control
2. Flow Control, Assertions and Exception Handling
3. Garbage Collection
4. Language Fundamentals
5. Operators and Assignments
6. Overloading, Overriding, Runtime Type & Object Orient.
7. Threads
8. Fundamental Classes in the java.lang package
9. The Collections Framework
Sun Certified Programmer (Java 2 Platform 5.0)
1. Declarations, Initialization and Scoping
2. Flow Control
3. API Contents
4. Concurrency
5. OO Concepts
6. Collections /Generics
7. Fundamentals
ต.ย.ใบรับรอง ของ Certify Programmer Score Report ทราบผลหลังสอบทันที

Click to ... Practice in thaiall.com website
SCJP
in Applet
beta version
ภาพนี้ได้จากโพสต์ในพันทิพย์ เรื่อง "ยอบรับได้ไหม ว่าเด็กจบวิทย์คอมตกงานเพราะอาจารย์ห่วย" ผู้เขียนชื่อ ทาสเทวี เขียนได้ดีมาก สะท้อนจากผู้เป็นอาจารย์ที่รู้ลึกรู้จริง บอกว่าเคยพบเด็กพูดว่า "พี่ครับ จบไปผมก็ไม่ได้ใช้ ผมไม่ทำงาน นี้หรอก เหนื่อย" แต่ผมชอบภาพประกอบครับ เพราะถ้าคิดตามโพสต์แล้วเหนื่อยใจ
ภาพนี้ชวนให้ประเมิน จุดแข็ง จุดอ่อน ของแต่ละภาษา บรรทัดแรกถามว่า "คุณจะเลือกใช้ภาษาไหน" คนแรกเสนอว่า perl ยืดหยุ่น ปรับได้ง่าย คนที่สองเสนอว่า c++ เร็ว และทรงพลัง คนที่สามเสนอว่า delphi ประณีต โครงสร้างสวยงาม คนที่สี่เสนอว่า vb ใคร ๆ ก็เขียนได้ คนที่ห้าเสนอว่า c# จัดการง่าย และทันสมัย
ข้อโต้แย้ง
หนึ่ง - แต่อยู่นอกเหนือการควบคุมอย่างรวดเร็ว สอง - แต่ขี้เหล่ และไม่ปลอดภัย สาม - แต่ดีในอดีต ดูวันที่ขายด้วย สี่ - แน่ใจนะว่าต้องการจริง ๆ ห้า - แต่มาพร้อมราคานะ บรรทัดสุดท้าย "เลือกที่ใช่อันเดียวสำหรับงาน คือ ภาษาจาวา
" + http://pantip.com/topic/32323444
+ http://www.thaiall.com/blog/burin/6173/
+ กระแส เรียนคอมพิวเตอร์ ไม่ตกงาน
+ 6 สาขาวิชา ที่ไม่ตกงานในอเมริกา
+ วิศวกรรมคอมพิวเตอร์ วิศวกรรมซอฟท์แวร์ วิทยาการคอมพิวเตอร์ ..
+ เผยบัณฑิตใหม่ จบบริหารธุรกิจ เสี่ยงตกงานมากสุด
ปรับแก้ และ compile โปรแกรมนี้
beautifulcode.java
beautifulcode_no_br.java
ตัวอย่างโปรแกรม beautifulcode.java ถูกปรับให้ผิดทุกบรรทัดยกเว้นบรรทัดแรกที่เป็น comment เป็นความผิดแบบพิมพ์ผิด แต่ไม่ผิด logic ที่ต้องปรับขั้นตอนใหม่ ท่านคิดว่าแต่ละบรรทัดผิดอย่างไร
สร้างแฟ้มจำนวนมาก ด้วย จาวา
createalbum.java
a0001.htm (26 bytes)
ต.ย. 73 : สร้างหมื่นแฟ้มใช้เวลา 10 วินาที
หากต้องการสร้างแฟ้มจำนวนมาก แล้วใช้โปรแกรม vscode editor ช่วยจัดการ ก็จะเป็นการฝึกใช้โปรแกรม editor ที่น่าสนใจ เริ่มจากการสร้างแฟ้มด้วยภาษาจาวา โดยปรับ code นี้เพื่อสร้าง 10000 แฟ้ม พบว่า เวลาในการประมวลผลใช้ไปประมาณ 11 , 12 หรือ 18 วินาที ซึ่งมากหรือน้อยกว่านี้ขึ้นอยู่กับการใช้งาน cpu และ memory ในขณะนั้น การตรวจสอบเวลาในการประมวลผลสามารถสร้าง batch file ช่วยได้
เช่น echo %TIME% และ java createalbum และ echo %TIME%
แล้ว ฟลุ๊ค ชวนใช้คลาส time เพื่อแสดงเวลา
System.out.println(java.time.LocalTime.now());
แล้ว พบ Blog ภาษาจาว่าน่าสนใจที่ dekgenius.com
https://compiler.javatpoint.com/opr/test.jsp?filename=Simple
import java.util.Date;
import java.lang.Math;  
public class Simple{
public static void main(String args[]){
char x = (char)((new Date().getTime() % 26) + 65);
System.out.println(x); // same time
x = (char)((new Date().getTime() % 26) + 65);
System.out.println(x); // same time
x = (char)((Math.random() * 100 % 26) + 65);
System.out.println(x); // difference number
x = (char)((Math.random() * 100 % 26) + 65);
System.out.println(x); // difference number
}
}
https://sandbox.onlinephpfunctions.com/
echo chr(rand() % 26 + 65);
echo chr(rand() % 26 + 65);
echo chr(rand() % 26 + 65);
Thaiall.com