นิพจน์และโครงสร้างควบคุม ของภาษาjava

ไวยากรณ์ภาษาจาวา
สัญลักษณ์และคำที่ใช้ในภาษาจาวาประกอบด้วย
คอมเม็นต์ (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
ขนาดและช่วงค่าของชนิดข้อมูลแบบพื้นฐาน
ชนิดข้อมูลขนาด(บิต)ช่วงค่า
boolean1true
char16'\u0000' ถึง '\uFFFF'
byte8-128 ถึง +127
short16-32,768 ถึง +32,767
int32-2 ยกกำลัง 31 ถึง +2 ยกกำลัง 31-1
long64-2 ยกกำลัง 63 ถึง +2 ยกกำลัง 63-1
float32-3.40E +38 ถึง +3.40E+38
double64-1.80E+308 ถึง +1.80E+308
ตัวแปรและการกำหนดค่า
-ตัวแปรในภาษาจาวาอาจเป็นตัวแปรที่มีชนิดข้อมูลแบบพื้นฐานหรือชนิดข้อมูลแบบอ้างอิง
-ตัวแปรที่มีชนิดข้อมูลแบบพื้นฐานจะเก็บค่าของตัวแปรในหน่วยความจำ  เช่น int x = 7;
-ตัวแปรที่มีชนิดข้อมูลแบบอ้างอิงจะเก็บตำแหน่งอ้างอิงในหน่วยความจำ เช่น String s = new String(“Thana”);                   
ภาษาจาวาจะกำหนดตำแหน่งอ้างอิงเริ่มต้นให้มีค่าเป็น null โดยอัตโนมัติ ซึ่งเนื้อที่ในหน่วยความจำเพื่อเก็บข้อมูลต่างๆ ของตัวแปรชนิดข้อมูลแบบอ้างอิงจะถูกสร้างขึ้น เมื่อมีการเรียกใช้คำสั่ง new
ตัวอย่าง   คำสั่ง   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)
ขอบเขตของตัวแปร
ตัวแปรในภาษาจาวามี 2 ประเภท
     1.ตัวแปรที่เป็นคุณลักษณะของออปเจ็คหรือคุณลักษณะของคลาส
     2.ตัวแปรภายใน
สำหรับค่าคงที่หรือตัวแปรที่อยู่ภายในบล็อกของเมธอด จะมีขอบเขตการใช้งานอยู่ภายในบล็อกเท่านั้น
ค่าเริ่มต้นที่ถูกกำหนดให้อัตโนมัติ
ชนิดข้อมูลค่าเริ่มต้น
booleanfalse
byte0
short0
int0
long0L
float0.0f
double0.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<4true
<=น้อยกว่าหรือเท่ากับ3<=4true
>มากกว่า3>4false
>=มากกว่าหรือเท่ากับ3>=4false
==เท่ากับ3==4false
!=ไม่เท่ากับ3!=4true
ตัวดำเนินการทางตรรกศาสตร์ (Logical Operators)
เครื่องหมายความหมาย
!กลับค่าทางตรรกะ
&& หรือ &AND ค่าทางตรรกะ
|| หรือ |OR ค่าทางตรรกะ
^Exclusive-OR ค่าทางตรรกะ
ตัวดำเนินการแบบบิต (Bitwise Operators)
ตัวดำเนินการข้อมูลเชิงบิตของเลขจำนวนเต็ม
ตัวดำเนินการความหมาย
~Complement
&AND
|OR
^XOR
ตัวดำเนินการแบบ shift บิต
ตัวดำเนินการความหมาย
>>signed right shift
>>>unsigned right shift
<<left shift
ตัวดำเนินการของข้อความ
เครื่องหมาย + เป็นตัวดำเนินการที่จะเชื่อมข้อความสองข้อความเข้าด้วยกัน
ตัวถูกดำเนินการ (Operand) ตัวหนึ่งจะต้องเป็นข้อมูลชนิดข้อความ
การที่ตัวถูกดำเนินการอีกตัวหนึ่งไม่ใช่ข้อมูลชนิดข้อความ ตัวถูกดำเนินการจะถูกให้เป็นข้อมูลชนิดข้อความอัตโนมัติ