D ng c b n c a m t t p tin mã ngu n Java có c u trúc nh sau :
package packageName; // Khai báo tên gói, n u có
import java.awt.*; // Khai báo tên th vi n s n có, n u c n dùng
class className // Khai báo tên l p {
/* ây là dòng ghi chú */
int var; // Khai báo bi n
public void methodName() // Khai báo tên ph ng th c { /* Ph n thân c a ph ng th c */ statement (s); // L nh th c hi n } } M t t p mã ngu n Java có th có ba ph n chính:
• Ph n khai báo tên gói (kh i) b ng t khoá package. • Ph n khai báo th vi n tham kh o b ng t khoá import. • Ph n khai báo n i dung l p b ng t khoá class.
Khai báo Package
Package đ c dùng đ đóng gói các l p trong ch ng trình l i v i nhau thành m t kh i. ây là m t cách h u hi u đ l u tr các l p g n gi ng nhau ho c có cùng m t module thành m t kh i th ng nh t.
Cú pháp khai báo tên gói b ng t khoá package: package <Tên gói>;
đ t tên package trong ch ng trình, ng i ta có th ti n hành nh đ t tên th m c trên đa. Ngh a là b t d u b ng tên có ph m vi l n, cho đ n các tên có ph m vi nh , cu i cùng là tên các gói tr c ti p ch a các l p. Ph m vi đ t tên gói, trên th c t , đ c ti n hành theo th t ph m vi l n đ n nh nh sau:
• Tên t ch c • Tên công ty • Tên d án
• Tên modul trong d án
• Tên các ch c n ng trong modul. Ví d :
• Tên mi n c a công ty là syz.com
• Tên d án là pro
• D án có hai modul là mod1 và mod2
• Modul mod1 có hai ch c n ng là k t n i c s d li u connection và bi u di n d li u
bean.
• Modul mod2 có hai ch c n ng là giao ti p interface và x lí yêu c u process. Khi đó, c u trúc kh i c a d án đ c mô t nh hình 3.3
Khi đó, trong ch c n ng bean có l p User, thì ph i khai báo tên kh i trong l p này nh sau: package com.syz.pro.mod1.bean;
u đi m c a package:
• Cho phép nhóm các l p vào v i nhau thành các đ n v nh h n. Vi c thao tác trên các đ n v kh i s g n h n thao tác trên m t t p các l p.
• Tránh vi c xung đ t khi đ t tên l p. Vì các l p không cùng package thì có th đ t tên trùng nhau. Khi s l ng l p c a ch ng trình quá l n ta có th tránh ph i đ t tên khác nhau cho các l p b ng cách đ t chúng vào các package khác nhau.
• Cho phép b o v các l p. Khi ch ng trình l n, vi c chia nh ch ng trình thành các package s thu n l i h n cho vi c qu n lí và phát tri n.
• Tên gói còn đ c dùng đ đnh danh l p trong ng d ng.
L u ý:
• Dòng l nh khai báo tên kh i ph i đ c đ t đ u tiên trong t n tin mã ch ng trình.
com
syz
pro
mod1 mod2
connection bean interface process
• Ch đ c khai báo t i đa m t tên kh i đ i v i m i t p mã ngu n Java.
• Các t p tin c a các l p n m cùng gói ng d ng ph i đ c l u trong cùng m t th m c (tên th m c là tên kh i) theo c u trúc kh i c a d án.
• Tên kh i nên đ t theo ch th ng vì tên kh i s là tên th m c t ng ng trong đa, tránh nh m l n v i tên các t p tin là tên các l p c a ch ng trình.
• Khi không phân chia ch ng trình thành kh i (ch ng trình đ n gi n), không c n thi t ph i khai báo tên kh i đ u ch ng trình.
Khai báo th vi n
Khai báo th vi n đ ch ra nh ng th vi n đã đ c đnh ngh a s n mà ch ng trình s tham kh o t i. Cú pháp khai báo th vi n v i t khoá import nh sau:
import <Tên th vi n>;
Java chu n cung c p m t s th vi n nh sau:
• java.lang: cung c p các hàm thao tác trên các ki u d li u c b n, x lí l i và ngo i l , x lí vào ra trên các thi t b chu n nh bàn phím và màn hình.
• java.applet: cung c p các hàm cho xây d ng các applet (s trình bày trong Ch ng 6). • java.awt: cung c p các hàm cho xây d ng các ng d ng đ ho v i các thành ph n giao
di n multi media (s trình bày chi ti t trong Ch ng 6).
• java.io: cung c p các hàm x lí vào/ra trên các thiêt b chu n và các thi t b ngo i vi. • java.util: cung c p các hàm ti n ích trong x lí liên quan đ n các ki u d li u có c u trúc
nh Date, Stack, Vector.
Ví d , n u trong ch ng trình c n đ n các thao tác chuy n ki u đ i d li u t ng minh (t ki u string sang ki u int), thì ta s ph i tham kh o th vi n java.lang:
import java.lang.*;
L u ý:
• N u mu n khai báo tham kh o nhi u th vi n, ph i khai báo tham kh o m i th vi n v i m t t khoá import.
• N u ch tham kh o m t vài l p trong m t th vi n, nên ch rõ tham kh o l p nào, thay vì ph i khai báo tham kh o c gói (b ng kí hi u “*”) vì tham kh o c gói s t ng kích c t p tin class sau khi biên d ch.
• N u không tham kh o th vi n nào, không c n thi t ph i khai báo các tham kh o v i t khoá import.
Khai báo l p
Ph n th ba là ph n khai báo l p và n i dung c a l p, ph n này luôn b t bu c ph i có đ i v i m t t p mã ngu n Java:
• Khai báo tên l p v i t khoá class. • Khái báo các thu c tính c a l p.
• Khai báo các ph ng th c c a l p
Vi c khai báo l p v i các thu c tính và ph ng th c s đ c trình bày chi ti t trong ch ng 4.
3.2.2 Ch ng trình Java đ u tiên
Ch ng trình sau đây cho phép hi n th m t thông đi p (N m trong t p mã ngu n First.java):
Ch ng trình 3.1
package vidu.chuong3;
// ây là ch ng trình “First.java” class First
{
public static void main(String args[]) {
System.out.println(“Hello World”); }
}
biên d ch mã ngu n, ta s d ng trình biên d ch javac. Trình biên d ch xác đnh tên c a file ngu n t i dòng l nh nh mô t d i đây (gi s đang th m c ch a package vidu và bi n môi tr ng PATH đã đ c thi t l p đúng qui cách):
>javac vidu/chuong3/First.java
Trình d ch javac t o ra file First.class ch a các mã “bytecodes”. Nh ng mã này ch a th th c thi
đ c. ch ng trình th c thi đ c ta c n dùng trình thông d ch “java interpreter” v i l nh
java. L nh đ c th c hi n nh sau:
>javac vidu.chuong3.First
K t qu s hi n th trên màn hình nh sau:
Hello World
3.2.3 Phân tích ch ng trình đ u tiên
Trong Java, t t c mã l nh đ u ph i đ c t ch c vào trong m t l p nh t đnh. Do đó, m i t p tin mã ngu n xác đnh ít nh t m t l p Java và tên t p tin ph i trùng v i tên l p. Java phân bi t ch hoa và ch th ng, cho nên tên t p tin c a ch ng trình trên ph i trùng v i tên l p: First.java.
package vidu.chuong3;
ây là dòng khai báo tên kh i c a ch ng trình, vì tên kh i c a ch ng trình đ c đ t theo hai m c:
• M c th nh t là ki u bài: ví d (vidu) ho c bài t p (baitap).
Vì đây là ví d , n m ch ng 3 nên thu c vào gói vidu.chuong3. ng th i, t p tin First.java s n m trong th m c: ../vidu/chuong3/.
Ch ng trình này không tham kh o th vi n nào nên không c n l nh import nào.
// ây là ch ng trình “First.java”
Ký hi u “// ” dùng đ chú thích dòng l nh. Trình biên d ch s b qua dòng chú thích này. Java h tr hai lo i chú thích:
• Lo i chú thích trên m t dòng, dùng “//”. Trình biên d ch s b qua n i dung b t đ u t kí hi u “//” cho đ n h t dòng l nh ch a nó.
• Lo i chú thích trên nhi u dòng có th b t đ u v i “/*” và k t thúc v i “*/”. Trình biên d ch s b qua n i dung n m gi a hai kí hi u này.
Dòng k ti p khai báo l p có tên First: B t đ u v i t khoá class, k đ n là tên l p
class First
M t đnh ngh a l p n m tr n v n gi a hai ngo c móc m “{“ và đóng “}”. Các ngo c này đánh d u b t đ u và k t thúc m t kh i l nh.
public static void main(String args[ ])
ây là ph ng th c chính, t đây ch ng trình b t đ u vi c th c thi c a mình. T t c các ng d ng java đ u s d ng m t ph ng th c main này.
• T khoá public là m t ch đnh truy xu t. Nó cho bi t thành viên c a l p có th đ c truy xu t t b t c đâu trong ch ng trình.
• T khoá static cho phép main đ c g i t i mà không c n t o ra m t th hi n (instance) c a l p. Nó không ph thu c vào các th hi n c a l p đ c t o ra.
• T khoá void thông báo cho máy tính bi t r ng ph ng th c s không tr l i b t c giá tr nào khi th c thi ch ng trình.
• String args[] là tham s dùng trong ph ng th c main. Khi không có m t thông tin nào
đ c chuy n vào main, ph ng th c đ c th c hi n v i các d li u r ng – không có gì trong d u ngo c đ n.
• System.out.println(“Hello World”); Dòng l nh này hi n th chu i “Hello World” trên màn hình. L nh println() cho phép hi n th chu i đ c truy n vào lên màn hình.
Truy n đ i s trong dòng l nh
Ch ng trình 3.2 minh ho các tham s (argument) c a các dòng l nh đ c ti p nh n nh th nào trong ph ng th c main.
Ch ng trình 3.2
package vidu.chuong3; class PassArgument{
public static void main(String args[]) {
System.out.println(“This is what the main method received”); System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); } } Biên d ch ch ng trình: >javac PassArgumet.java Th c thi ch ng trình v i dòng l nh: >java PassArgument A 123 B1 S thu đ c trên màn hình k t qu :
This is what the main method received A
123 B1
3.3 CÁC KI U D LI U VÀ TOÁN T C B N TRÊN JAVA 3.3.1 Khai báo bi n 3.3.1 Khai báo bi n
Cú pháp khai báo bi n:
dataType varName;
Trong đó, dataType là ki u d li u c a bi n, varName là tên bi n. Trong Java, vi c đ t tên bi n ph i tuân theo các quy t c sau:
• Ch đ c b t đ u b ng m t kí t (ch ), ho c m t d u g ch d i , ho c m t kí t dollar • Không có kho ng tr ng gi a tên
• B t đ u t kí t th hai, có th dùng các kí t (ch ), ch s , d u dollar, d u g ch d i • Không trùng v i các t khoá
Ph m vi ho t đ ng c a bi n
M t bi n có ph m vi ho t đ ng trong toàn b kh i l nh mà nó đ c khai báo. M t kh i l nh b t
đ u b ng d u “{” và k t thúc b ng d u “}”:
• N u bi n đ c khai báo trong m t c u trúc l nh đi u khi n, bi n đó có ph m vi ho t đ ng trong kh i l nh t ng ng.
• N u bi n đ c khai báo trong m t ph ng th c (Không n m trong kh i l nh nào), bi n đó có ph m vi ho t đ ng trong ph ng th c t ng ng: có th đ c s d ng trong t t c các kh i l nh c a ph ng th c.
• N u bi n đ c khai báo trong m t l p (Không n m trong trong m t ph ng th c nào), bi n đó có ph m vi ho t đ ng trong toàn b l p t ng ng: có th đ c s d ng trong t t c các ph ng th c c a l p.
3.3.2 Ki u d li u
Trong Java, ki u d li u đ c chia thành hai lo i: • Các ki u d li u c b n
• Các ki u d li u đ i t ng
Ki u d li u c b n
Java cung c p các ki u d li u c b n nh sau:
byte: Dùng đ l u d li u ki u s nguyên có kích th c m t byte (8 bít). Ph m vi bi u di n giá tr t -128 đ n 127. Giá tr m c đnh là 0.
char: Dùng đ l u d li u ki u kí t ho c s nguyên không âm có kích th c 2 byte (16 bít). Ph m vi bi u di n giá tr t 0 đ n u\ffff. Giá tr m c đnh là 0.
boolean: Dùng đ l u d li u ch có hai tr ng thái đúng ho c sai (đ l n ch có 1 bít). Ph m vi bi u di n giá tr là {“True”, “False”}. Giá tr m c đnh là False.
short: Dùng đ l u d li u có ki u s nguyên, kích c 2 byte (16 bít). Ph m vi bi u di n giá tr t - 32768 đ n 32767. Giá tr m c đnh là 0.
int: Dùng đ l u d li u có ki u s nguyên, kích c 4 byte (32 bít). Ph m vi bi u di n giá tr t -2,147,483,648 đ n 2,147,483,647. Giá tr m c đnh là 0.
float: Dùng đ l u d li u có ki u s th c, kích c 4 byte (32 bít). Giá tr m c đnh là 0.0f.
double: Dùng đ l u d li u có ki u s th c có kích th c lên đ n 8 byte. Giá tr m c đnh là 0.00d
long: Dùng đ l u d li u có ki u s nguyên có kích th c lên đ n 8 byte. Giá tr m c đnh là 0l.
Ki u d li u đ i t ng
Trong Java, có 3 ki u d li u đ i t ng:
class: D li u ki u l p đ i t ng do ng i dùng đnh ngh a. Ch a t p các thu c tính và ph ng th c.
interface: D li u ki u l p giao ti p do ng i dùng đnh ngh a. Ch a các ph ng th c c a giao ti p.
Ép ki u (Type casting)
Ví d , nhi u khi g p tình hu ng c n c ng m t bi n có d ng integer v i m t bi n có d ng float.
x lý tình hu ng này, Java s d ng tính n ng ép ki u (type casting) c a C/C++. o n mã sau
đây th c hi n phép c ng m t giá tr d u ph y đ ng (float) v i m t giá tr nguyên (integer). float c = 35.8f;
int b = (int)c + 1;
u tiên giá tr d u ph y đ ng c đ c đ i thành giá tr nguyên 35. Sau đó nó đ c c ng v i 1 và k t qu là giá tr 36 đ c l u vào b.
Trong Java có hai lo i ép ki u d li u:
• N i r ng (widening): quá trình làm tròn s t ki u d li u có kích th c nh h n sang ki u có kích th c l n h n. Ki u bi n đ i này không làm m t thông tin. Ví d chuy n t
int sang float. Chuy n ki u lo i này có th đ c th c hi n ng m đnh b i trình biên d ch. • Thu h p (narrowwing): quá trình làm tròn s t ki u d li u có kích th c l n h n sang
ki u có kích th c nh h n. Ki u bi n đ i này có th làm m t thông tin nh ví d trên. Chuy n ki u lo i này không th th c hi n ng m đnh b i trình biên d ch, ng i dùng ph i th c hi n chuy n ki u t ng minh.
3.3.3 Các toán t
Java cung c p các d ng toán t sau: • Toán t s h c • Toán t bit • Toán t quan h • Toán t logic • Toán t đi u ki n • Toán t gán Toán t s h c
Các toán h ng c a các toán t s h c ph i d ng s . Các toán h ng ki u boolean không s d ng
đ c, song các toán h ng ký t cho phép s d ng lo i toán t này. M t vài ki u toán t đ c li t kê trong b ng d i đây.
Toán t Mô t