ไวยากรณ์ภาษาจาวา
สัญลักษณ์และคำที่ใช้ในภาษาจาวาประกอบด้วย
คอมเม็นต์ (comment) เช่น // หรือ /* */
การตั้งชื่อ (identifier) เช่น ชื่อคลาส ชื่อเมธอด ชื่อตัวแปร หรือชื่อค่าคงที่
คีย์เวิร์ด (keywords) คือชื่อที่มีความหมายพิเศษในภาษาจาวา เช่น if for ฯลฯ
สัญลักษณ์แยกคำ (separators) เช่น ; ( ) , . { }
ช่องว่าง (white space) เช่น ช่องว่าง แท็ป การขึ้นบรรทัดใหม่
ข้อมูลค่าคงที่ (literals) คำที่ใช้แสดงข้อมูล ที่เป็นตัวเลขจำนวนเต็ม ตัวเลขทศนิยม ตัวอักขระ ข้อความ หรือ ค่าทางตรรกะ(boolean)
ชนิดข้อมูลแบบพื้นฐาน
ชนิดข้อมูลในภาษาจาวาแบ่งเป็นสองประเภทใหญ่ๆคือ ชนิดข้อมูลแบบพื้นฐาน (primitive data type) และชนิดข้อมูลแบบอ้างอิง (reference data type)
ชนิดข้อมูลแบบพื้นฐานแบ่งออกเป็น 4 ประเภทดังนี้
1.ชนิดข้อมูลตรรกะ (Logical) คือชนิด boolean
2.ชนิดข้อมูลอักขระ (Textual) คือชนิด char
3.ชนิดข้อมูลตัวเลขจำนวนเต็ม (Integral) คือชนิด byte,short,int และ long
4.ชนิดข้อมูลตัวเลขทศนิยม (Floating point) คือชนิด float และ double
ขนาดและช่วงค่าของชนิดข้อมูลแบบพื้นฐาน
1.ชนิดข้อมูลตรรกะ (Logical) คือชนิด boolean
2.ชนิดข้อมูลอักขระ (Textual) คือชนิด char
3.ชนิดข้อมูลตัวเลขจำนวนเต็ม (Integral) คือชนิด byte,short,int และ long
4.ชนิดข้อมูลตัวเลขทศนิยม (Floating point) คือชนิด float และ double
ขนาดและช่วงค่าของชนิดข้อมูลแบบพื้นฐาน
ชนิดข้อมูล | ขนาด(บิต) | ช่วงค่า |
boolean | 1 | true |
char | 16 | '\u0000' ถึง '\uFFFF' |
byte | 8 | -128 ถึง +127 |
short | 16 | -32,768 ถึง +32,767 |
int | 32 | -2 ยกกำลัง 31 ถึง +2 ยกกำลัง 31-1 |
long | 64 | -2 ยกกำลัง 63 ถึง +2 ยกกำลัง 63-1 |
float | 32 | -3.40E +38 ถึง +3.40E+38 |
double | 64 | -1.80E+308 ถึง +1.80E+308 |
ตัวแปรและการกำหนดค่า
-ตัวแปรในภาษาจาวาอาจเป็นตัวแปรที่มีชนิดข้อมูลแบบพื้นฐานหรือชนิดข้อมูลแบบอ้างอิง
-ตัวแปรที่มีชนิดข้อมูลแบบพื้นฐานจะเก็บค่าของตัวแปรในหน่วยความจำ เช่น int x = 7;
-ตัวแปรที่มีชนิดข้อมูลแบบอ้างอิงจะเก็บตำแหน่งอ้างอิงในหน่วยความจำ เช่น String s = new String(“Thana”);
-ตัวแปรที่มีชนิดข้อมูลแบบพื้นฐานจะเก็บค่าของตัวแปรในหน่วยความจำ เช่น int x = 7;
-ตัวแปรที่มีชนิดข้อมูลแบบอ้างอิงจะเก็บตำแหน่งอ้างอิงในหน่วยความจำ เช่น String s = new String(“Thana”);
ภาษาจาวาจะกำหนดตำแหน่งอ้างอิงเริ่มต้นให้มีค่าเป็น null โดยอัตโนมัติ ซึ่งเนื้อที่ในหน่วยความจำเพื่อเก็บข้อมูลต่างๆ ของตัวแปรชนิดข้อมูลแบบอ้างอิงจะถูกสร้างขึ้น เมื่อมีการเรียกใช้คำสั่ง new
ตัวอย่าง คำสั่ง Date d; และคำสั่ง d = new Date(16,8,2002);
ตัวอย่าง คำสั่ง Date d; และคำสั่ง d = new Date(16,8,2002);
การส่งตัวแปรผ่าน argument
กรณีที่ส่งตัวแปรชนิดข้อมูลแบบพื้นฐานให้กับ argument การเปลี่ยนแปลงค่าของ argument ในเมธอดจะไม่มีผลกระทบต่อค่าของตัวแปรที่ส่งมา
กรณีที่ส่งตัวแปรชนิดข้อมูลแบบอ้างอิงให้กับ argument จะเป็นการส่งตำแหน่งอ้างอิงให้กับ argument จึงทำให้ค่าของตัวแปรที่ส่งมาจะถูกเปลี่ยน แปลงตาม argument ในเมธอด
ตัวอย่างโปรแกรม
import java.util.*;
public class ArgumentPassing {
public void method1(int x) {
x = 3;
}
public void method2(Date d) {
d.setDate(1);
d.setMonth(1);
d.setYear(2002);
}
public int method3() {
return 0;
}
public static void main(String args[]) {
int x = 4;
ArgumentPassing obj = new ArgumentPassing();
Date d1 = new Date(16,12,1980);
obj.method1(x);
System.out.println("x = "+x);
obj.method2(d1);
System.out.println("Date = "+d1);
obj.method3();
}
}
การแปลงชนิดข้อมูล
การแปลงชนิดข้อมูลมีสองรูปแบบคือ
-การแปลงข้อมูลที่กว้างขึ้น (widening conversion) คือการแปลงจากชนิดข้อมูลที่มีขนาดเล็กกว่าไปเป็นชนิดข้อมูลที่มีขนาดใหญ่กว่า
-การแปลงข้อมูลที่แคบลง (narrowing conversion) คือการแปลงจากชนิดข้อมูลที่มีขนาดใหญ่กว่าไปเป็นชนิดข้อมูลที่มีขนาดเล็กลง ซึ่งอาจมีผลให้เสียความละเอียดของข้อมูลบางส่วนไป
ตัวอย่างของการแปลงชนิดข้อมูล
ภาษาจาวาจะปรับชนิดข้อมูลให้อัตโนมัติ ในกรณีต่อไปนี้
กำหนดค่าชนิดข้อมูลที่เล็กกว่าให้กับตัวแปรชนิดข้อมูลที่ใหญ่กว่าอาทิเช่น
int i = 4;
long l = i;
นิพจน์ i จะถูกปรับชนิดข้อมูลจาก int ให้เป็น long โดยอัตโนมัติ
กำหนดค่าชนิดข้อมูลจำนวนเต็มให้กับจำนวนเลขทศนิยมอาทิเช่น
double x = 3;
นิพจน์ 3 จะถูกปรับชนิดข้อมูลจาก int ให้เป็น double โดยอัตโนมัติ
Typecasting
ภาษาจาวาจะสามารถทำการแปลงชนิดข้อมูล ให้เป็นชนิดข้อมูลที่มีขนาดเล็กลงได้ โดยใช้วิธีการที่เรียกว่า typecasting
รูปแบบ
(targetType) expression
ตัวอย่าง
int amount = (int)3.0;
นิพจน์
นิพจน์ คือข้อความที่อาจประกอบด้วยข้อมูลค่าคงที่ ตัวแปร ตัวดำเนินการ และวงเล็บ นิพจน์ แบ่งเป็น
1.นิพจน์คณิตศาสตร์ (Arithmetic Expression)
2.นิพจน์ตรรกศาสตร์ (Logical Expression)
1.นิพจน์คณิตศาสตร์ (Arithmetic Expression)
2.นิพจน์ตรรกศาสตร์ (Logical Expression)
ขอบเขตของตัวแปร
ตัวแปรในภาษาจาวามี 2 ประเภท
1.ตัวแปรที่เป็นคุณลักษณะของออปเจ็คหรือคุณลักษณะของคลาส
2.ตัวแปรภายใน
สำหรับค่าคงที่หรือตัวแปรที่อยู่ภายในบล็อกของเมธอด จะมีขอบเขตการใช้งานอยู่ภายในบล็อกเท่านั้น
1.ตัวแปรที่เป็นคุณลักษณะของออปเจ็คหรือคุณลักษณะของคลาส
2.ตัวแปรภายใน
สำหรับค่าคงที่หรือตัวแปรที่อยู่ภายในบล็อกของเมธอด จะมีขอบเขตการใช้งานอยู่ภายในบล็อกเท่านั้น
ค่าเริ่มต้นที่ถูกกำหนดให้อัตโนมัติ
ชนิดข้อมูล | ค่าเริ่มต้น |
boolean | false |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0 |
char | '\u0000' |
คลาส | null |
ตัวอย่างแสดงขอบเขตของตัวแปร
public class VariableScopeDemo {
public int i; // object variable
public void method1() {
int j = 4; // local variable
int k = 2; // another local variable
}
public void method2() {
int j = 0; //local variable
System.out.println(i); // calling an object variable i
// System.out.println(k); // illegal
}
}
ตัวอย่างแสดงตัวแปรภายในและตัวแปรของออปเจ็ค
public class ScopeExample {
private int i=1;
public void method1() {
int i=4, j=5;
this.i = i+j;
method2(7);
}
public void method2(int i) {
int j=8;
this.i = i+j;
}
}
public class TestScoping {
public static void main(String args[]) {
ScopeExample scope = new ScopeExample();
scope.method1();
}
}
ตัวดำเนินการแบบต่างๆ
ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operators)
เ้ครื่องหมาย | ความหมาย | ตัวอย่างนิพจน์ |
+ | บวก | a+b |
- | ลบ | a-b |
* | คูณ | a*b |
/ | หาร | a/b |
% | เศษจากการหาร | a%b |
ตัวดำเนินการแบบสัมพันธ์ (Relational Operators)
เครื่องหมาย | ความหมาย | ตัวอย่าง | ผลลัพธ์ |
< | น้อยกว่า | 3<4 | true |
<= | น้อยกว่าหรือเท่ากับ | 3<=4 | true |
> | มากกว่า | 3>4 | false |
>= | มากกว่าหรือเท่ากับ | 3>=4 | false |
== | เท่ากับ | 3==4 | false |
!= | ไม่เท่ากับ | 3!=4 | true |
ตัวดำเนินการทางตรรกศาสตร์ (Logical Operators)
เครื่องหมาย | ความหมาย |
! | กลับค่าทางตรรกะ |
&& หรือ & | AND ค่าทางตรรกะ |
|| หรือ | | OR ค่าทางตรรกะ |
^ | Exclusive-OR ค่าทางตรรกะ |
ตัวดำเนินการแบบบิต (Bitwise Operators)
ตัวดำเนินการข้อมูลเชิงบิตของเลขจำนวนเต็ม
ตัวดำเนินการ | ความหมาย |
~ | Complement |
& | AND |
| | OR |
^ | XOR |
ตัวดำเนินการแบบ shift บิต
ตัวดำเนินการ | ความหมาย |
>> | signed right shift |
>>> | unsigned right shift |
<< | left shift |
ตัวดำเนินการของข้อความ
เครื่องหมาย + เป็นตัวดำเนินการที่จะเชื่อมข้อความสองข้อความเข้าด้วยกัน
ตัวถูกดำเนินการ (Operand) ตัวหนึ่งจะต้องเป็นข้อมูลชนิดข้อความ
การที่ตัวถูกดำเนินการอีกตัวหนึ่งไม่ใช่ข้อมูลชนิดข้อความ ตัวถูกดำเนินการจะถูกให้เป็นข้อมูลชนิดข้อความอัตโนมัติ