Ngôn ngữ lập trình Java

Một phần của tài liệu Bài giảng lập trình java phần 1 đh sư phạm kỹ thuật nam định (Trang 28)

Java là một ngôn ngữ lập trình hướng đối tượng. Tất cả các lớp trong Java đều dựa trên lớp Object, là cha của tất cả các lớp. Các lớp có liên quan được tổ chức thành các gói (packages). Các gói cũng có thể chứa các gói khác hoặc các giao diện. Một giao diện là một loạt các phương pháp mà các lớp Java có thể thực thi.

Các chương trình mã nguồn Java (*.java) đầu tiên được biên dịch thành các file bytecode (tập tin mã nhị phân) (*.class). Sau đó trình thông dịch Java sẽ chuyển đổi các bytecode thành các mã máy theo bộ xử lý cụ thể.

1.2.2. Cấu trúc chƣơng trình Java

Vềcơ bản cấu trúc chung của một chương trình Java có dạng như sau: import packages //chỉ định các gói hay lớp sẽđược dùng trong chương trình class Classname

{ /* Đây là dòng chú thích */ int num1, num2; //khai báo biến Methodname()

{ // Thân phương thức

statements; // kết thúc lệnh bằng dấu ; }

}

Trong đó phần đầu của một chương trình Java, “import packages” xác định thông tin môi trường. Để làm được việc này, chương trình được chia thành các lớp hoặc các gói riêng biệt. Những gói này sẽđược chỉ dẫn trong chương trình. Thông tin này được chỉ ra với sự trợ giúp của lệnh nhập “import”. Mỗi chương trình có thể có nhiều hơn một lệnh nhập. Dưới đây là một ví dụ về lệnh nhập:

import java. awt.*;

Lệnh này nhập gói „awt‟. Gói này dùng để tạo các đối tượng GUI. Ở đây java là tên của thư mục chứa gói „awt‟. Ký hiêu “*” chỉ tất cả các lớp thuộc gói này.

Trong java, tất cả các mã, bao gồm các biến và cách khai báo nên được thực hiện trong phạm vi một lớp. Bởi vậy, từng khai báo lớp được tiến hành sau lệnh nhập. Một chương trình đơn giản có thể chỉ có một vài lớp. Những lớp này có thể mở rộng thành các lớp khác. Mỗi lệnh đều được kết thúc bởi dấu chấm phảy “;”. Chương trình còn có thể bao gồm các ghi chú, chỉ dẫn. Khi dịch, chương trình dịch sẽ tự loại bỏ các ghi chú này.

18

Các ghi chú dùng để gợi nhớ lại quá trình suy nghĩ, kiểm nghiệm các lập luận hoặc khi cần bổ sung, sửa chữa, nâng cấp chương trình. Java hỗ trợ 3 cách ghi chú sau:

Bắt đầu Kết thúc Mục đích /* */ Nội dung ở giữa là phần ghi chú // (không có) Phần dòng còn lại là ghi chú /** */ Nội dung ở giữa là phần ghi chú dùng cho JavaDoc Bảng 1.1. Bảng các ký hiệu ghi chú

Có thể phân chia các thành phần trong một chương trình Java làm 5 loại sau: - Các tên định danh (identifiers): là tên các biến, các phương thức và các lớp để trình biên dịch định danh duy nhất. Tên định danh gồm các mẫu tự, dấu _ hoặc dấu $, các ký tựđặc biệt không khác được dùng.

- Các từkhoá (keywords): là các tên định danh sẵn được Java dành riêng, không được dùng các từ khóa đểdùng làm các tên định danh. Các từ khoá của Java gồm:

Từ khóa Ý nghĩa

abstract dùng để thông báo một phương thức trừu tượng, cần có một phương thức con không trừu tượng lấp lên. Một phương thức là trừu tượng sẽ không có phần mã lệnh (MethodBody)

boolean kiểu biến logic, chỉ có hai giá trị đúng, sai (TRUE, FALSE). Chúng khác với C/C++ biến kiểu này chỉ chiếm 1 bit trong bộ nhớ. break từkhoá dùng để thoát ra khỏi vòng lặp

byte kiểu dữ liệu có giá trị 8 bit

case một trường hợp trong cấu trúc switch

catch sử dụng khi nhận về các kết quả lỗi, được sử dụng trong xử lý ngoại lệ

char kiểu dữ liệu ký tự

class Khai báo Lớp

const khai báo hằng

continue dùng để nhảy vềđầu vòng lặp

19

do nằm trong câu lệnh vòng lặp (do … while) else nằm trong cấu trúc lựa chọn (if … else …)

extends dẫn xuất, được sử dụng để khai báo một lớp được kế thừa từ một lớp khác

final Dùng để khai báo hằng số, phương thức không thể ghi đè, hoặc lớp không thể kế thừa

finally phương thức kết thúc float kiểu số thực

for dùng để thực hiện một vòng lặp xác định if nằm trong cặp lệnh điều khiển if ... then … else

implements cài đặt, dùng để khai báo một lớp là cài đặt của một giao diện import cho biết dùng các thư viện nào

instanceof dùng trong kiểu định danh thời gian chạy(Runtime Type Identification) kiểm tra một đối tượng có phải là một thể hiện của lớp hay không

int kiểu biến nguyên

interface giao diện, sử dụng để khai báo giao diện

long kiểu số nguyên

native nguồn, gốc: Khai báo phương thức được viết bằng ngôn ngữ biên dịch C++

new dùng để tạo một đối tượng mới

package gói, đóng gói

private từkhóa khai đối tượng tiếp sau là cục bộ

protected không bị chồng, sử dụng trong các lớp dẫn xuất public đối tượng khai báo tiếp theo sau là biến toàn cục return trở về lệnh gọi

short kiểu biến nguyên

statictis đối tượng khai báo tiếp theo sau là tĩnh

20

swith dùng trong cấu trúc lựa chọn (switch case)

synchronized đồng bộ, sử dụng để khai báo một phương thức độc quyền truy xuất trên một đối tượng

this đối tượng hiện đang xét throw trả về lỗi

throws cho biết phương thức hay biến sẽ trả về (báo) khi có lỗi (dùng trong khai báo phương thức)

transient Giá trị của biến được khai báo kiểu này sẽkhông được lưu giữnhư trước khi một đối tượng (chứa biến đó) được lưu trữ

try Sử dụng để bắt ngoại lệ

void Dùng để khai báo một phương thức không trả về giá trị

volatile Giá trị của biến được khai báo kiểu này có thể được thay đổi đột xuất bởi các phần khác của chương trình

while dùng trong cặp lệnh vòng lặp

Bảng 1.2. Các từ khóa của Java

- Các dấu cách (separators): thông báo cho trình biên dịch java cách xác định các thành phần ngữnghĩa của chương trình.

- Các hằng (literals): là các giá trị bất biến trong một chương trình. Các hằng có thể là các số, các chuỗi, các ký tự, hoặc các giá trị Boolean.

- Các toán tử (operators): chỉ định một đánh giá hoặc một phép toán được thực hiện trên dữ liệu hay các đối tượng. Ví dụ : +, -, *, /, %

1.2.3. Kiểu dữ liệu cơ sở, hằng, biến a) Các kiểu dữ liệu cơ sở: a) Các kiểu dữ liệu cơ sở:

Java cung cấp các kiểu dữ liệu cơ sở. Các kiểu dữ liệu này được dùng để tạo các kiểu dữ liệu dẫn xuất

- Kiểu số nguyên, Java có bốn loại số nguyên: byte, short, int, long

Kiểu Kích thước Giá trị nhỏ nhất Giá trị lớn nhất

byte 7 bits -128 127

Short 16 bits -32768 32767

21 long 62 bits -9.223.372.036.854 9.223.372.036.854 Bảng 1.3. Các kiểu số nguyên Các phép tính trên biến số nguyên gồm: Toán tử Phép toán == Bằng nhau != Không bằng > Lớn hơn < Nhỏhơn >= Lớn hơn hoặc bằng <= Nhỏhơn hoặc bằng + Cộng - Trừ * Nhân / Chia % Lấy phần dư của phép chia ++ Tăng 1 -- Giảm 1

~ Phép toán phủđịnh trên bit & Phép toán AND trên bit

| Phép toán OR trên bit

^ Phép toán XOR trên bit

<< Dịch chuyển sang trái n bit >> Dịch chuyển sang phải n bit

>>> Dịch chuyển sang phải và điền 0 vào bit trống

Bảng 1.4. Các phép toán trên kiểu số nguyên

Nếu hai toán hạng đều dạng long thì kết quả sẽ là dạng long 64 bits. Nếu có một toán hạng không phải dạng long thì sẽđược chuyển sang dạng long trước khi thực hiện

22

phép toán. Nếu cả hai toán hạng không phải là long (byte, short) thì sẽđược đổi sang int trước khi thực hiện phép toán. Trong Java không thể chuyển biến boolean sang int như các ngôn ngữ khác.

-Kiểu số thực, Java có 2 loại số thực là: float và double

Kiểu Kích cỡ Giá trị nhỏ nhất Giá trị lớn nhất

float 32 bits -3.40292347E+38 3.40292347E+38

double 64 bits -1.79769313486231570E+308 1.79769313486231570E+308

Bảng 1.5. Các loại số thực Các phép toán trên kiểu số thực gồm: Toán tử Phép toán == Bằng nhau != Không bằng > Lớn hơn < Nhỏhơn >= Lớn hơn hoặc bằng <= Nhỏhơn hoặc bằng + Cộng - Trừ * Nhân / Chia % Lấy phần dư ++ Tăng 1 -- Giảm 1 Bảng 1.6. Các phép toán trên kiểu số thực

Biến kiểu float và double có thể được chuyển sang các kiểu dữ liệu số khác nhưng không thể chuyển sang kiểu dữ liệu boolean.Khi thực hiện phép tính java sẽ chuyển các toán hạng về kiểu dữ liệu cao nhất rồi mới tính toán. Java đưa ra một số thực NaN (Not a Number) dùng cho các giá trị không thể xác định được trong khoảng từ vô cực âm đến vô cực dương. Nó giải quyết lỗi phép chia cho 0.

23

Char là kiểu dữ liệu về ký tự, một biến char sẽ có giá trị là một ký tự Unicode, có kích thước 16 bits từ„\u0000‟ đến „\uFFFF‟.

-Kiểu dữ liệu boolean:

Boolean là kiểu dữ liệu chỉ có hai giá trị là True và False dùng để xác định kết quả một điều kiện và có kích thước là một bit. Do đó ta không thể chuyển kiểu giữa boolean sang int hay ngược lại .

Giá trị mặc định:

Một lỗi hay gặp phải khi lập trình là sử dụng những biến chưa khởi tạo. Điều này tạo ra những lỗi không thể đoán trước (như định dạng lại đĩa, chép đè lên CMOS), bởi vì chúng có thể nhận bất kỳ giá trị nào trong vùng nhớ khi chương trình bắt đầu chạy. Java đã tránh được lỗi trên bằng cách luôn khởi tạo giá trị mặc định cho các biến. Các giá trịđược xác định phụ thuộc vào kiểu của biến theo bảng sau:

Kiểu Giá trị mặc định Byte 0 Short 0 Int 0 Long 0L float 0.0f double 0.0d char null boolean false Các biến dẫn xuất null Bảng 1.7. Giá trị mặc định

-Chuyển kiểu (type casting):

Trong một biểu thức của chương trình không phải lúc nào các biến cũng thuộc về cùng một kiểu dữ liệu. Vì vậy để các biến thuộc về cùng một kiểu dữ liệu nào đó Java cho phép chuyển kiểu đối với một biến ở 2 hướng: chuyển kiểu hẹp (Narrowing conversion – từ kiểu lớn về kiểu nhỏ) và chuyển kiểu nới rộng (Widening conversion - từ kiểu nhỏ về kiểu lớn)

Ví dụ 1.4:

class TypeCast

{ public static void main (String args[]) {

24

System.out.println (“a = “+a); // a = 12.0

float b = 15.682f; int c = (int) b + 20;

System.out.println (“c = “+c); // c = 35

} }

chuyển kiểu mở rộng(Widening) – quá trình làm tròn số theo hướng mở rộng không làm mất thông tin về độ lớn của mỗi giá trị.Biến đổi theo hướng mở rộng chuyển một giá trị sang một dạng khác có độ rộng phù hợp hơn so với nguyên bản. Biến đổi theo hướng lại thu nhỏ lại (Narrowing) làm mất thông tin vềđộ lớn của giá trị được chuyển đổi. Chúng không được thực hiện khi thực hiện phép gán. Ở ví dụ trên giá trị thập phân sau dấu phảy sẽ bị mất.

b) Đặt tên (Identifier)

Một tên là một chuỗi các ký tự gồm các chữ, số, dấu gạch dưới (_), và dấu dollar ($).

Việc đặt tên cho một hằng và biến cần theo những quy tắc sau:

- Ký tựđầu phải là ký tự chữ, dấu _, hay dấu $.Không thể bắt đầu bởi một số - Sau ký tựđầu, có thể dùng các ký tự chữ, ký số, dấu _, dấu $

- Không được có khoảng trắng

- Không được trùng với các từ khóa

c) Hằng (literal):

Hằng là một giá trị thực được sử dụng trong chương trình, được biểu diễn như chính nó chứ không phải là một giá trị của một biến hay một kết quả của một biểu thức. Ví dụ hằng 3.14159 thay cho số Pi.

-Khai báo hằng:

Để khai báo hằng ta dùng từ khoá final đặt trước kiểu dữ liệu và tên hằng cú pháp như sau:

Cú pháp:

final datatype identifier =value [, identifier=value[,…] ]; Trong đó

- datatype là kiểu dữ liệu - identifier là tên hằng - value là giá trị của hằng

Ví dụ sau sẽ khai báo một hằng tên PI thuộc kiểu số thực (float) có giá trị là 3.14159

25 final float PI = 3.14159;

- Có các loại hằng sau: Hằng số nguyên:

Hằng số nguyên có thể được biểu diễn dưới dạng thập phân (decimal), bát phân (octal), thập lục phân (hexadecimal).

Integer Long Octal Hexadecimal

0 0L 0 0x0 1 1L 01 0x1 10 10L 012 0xA 15 15L 017 0xF 16 16L 020 0x10 100 100L 0144 0x64 Bảng 1.8. Hằng số nguyên Hằng số thực:

Các hằng thực có thể biểu diễn bằng dạng thập phân như 5.1693 hay dạng mũ như 6.2e23. Để chỉ rõ hằng kiểu float ta thêm “f” hay “F” phía sau hằng, hoặc hằng thực ta thêm “d” hay “D”.

Hằng ký tự:

Một hằng ký tự là một ký tựđơn hay một chuỗi ESCAPE, được đặt trong hai dấu nháy đơn. Chuỗi ESCAPE được dùng để biểu diễn các ký tựđặc biệt như tab („\t‟) hay một động tác đặc biệt như xuống dòng („\n‟). Ta có bảng liệt kê các chuỗi ESCAPE thường dùng: Chuỗi Ý nghĩa \b Xóa lùi \t Tab ngang \n Xuống hàng \f Đẩy trang \r Dấu enter \” Dấu nháy kép

26

\‟ Dấu nháy đơn

\\ Dấu sổngược

\uxxxx Ký tự Unicode

Bảng 1.9. Các hằng số thực

Hằng chuỗi ký tự:

Mặc dù Java không cung cấp kiểu dữ liệu cơ sở string, ta vẫn có thể khai báo một hằng chuỗi trong chương trình. Một hằng chuỗi được đặt giữa 2 dấu nháy kép, nó có thể là hằng chuỗi rỗng hay có nhiều ký tự.

Khi sử dụng một hằng chuỗi ký tự, ta xem như đã tạo ra một đối tượng của lớp String và không cần chú ý đến các thao tác về bộ nhớnhư tạo và xóa các vùng nhớ cho các hằng chuỗi ký tự. Java có một hệ thống quản lý vùng nhớ tựđộng làm việc này.

d. Biến

Các ứng dụng sử dụng các biến để lưu trữ các dữ liệu cần thiết hoặc các dữ liệu được tạo ra trong quá trình thực thi chương trình. Các biến được xác định bởi một tên biến và có một phạm vi tác động. Phạm vi tác động của biến được xác định một cách rõ ràng trong chương trình.

Việc khai báo một biến bao gồm 3 thành phần: kiểu biến, tên của nó và giá trị ban đầu được gán cho biến (không bắt buộc). Để khai báo nhiều biến ta sử dụng dấu phẩy để phân cách các biến. Khi khai báo biến, luôn nhớ rằng Java phân biệt chữ thường và chữ in hoa (case -sensitive).

Cú pháp:

Datatype identifier [=value] [, identifier[=value]… ];

Để khai báo một biến nguyên (int) có tên là counter dùng để lưu giá trịban đầu là 1, ta có thể thực hiện như sau:

int counter = 1;

Java có những yêu cầu hạn chế đặt tên biến mà bạn có thể gán giá trị vào. Những hạn chếnày cũng giống các hạn chếkhi đặt tên cho các định danh mà ta đã thảo luận ở các phần trước của chương này.

Java cho phép khai báo biến khá linh hoạt như sau: char ch; //khai báo một biến kiểu char

int count, num ; //khai báo hai biến trên cùng dòng int count =10; char ch =‟A‟; //khai báo và khởi tạo biến int num = 012; //gán giá trị bát phân

int num = 0x18; // gán giá trị thập lục phân

27

char ch=‟\u0020‟; //khai báo và khởi tạo một giá trị Unicode cho biến ch int a=5, b=10; //khai báo và khởi tạo nhiều biến cùng lúc

int c=a+b; //khởi tạo biến bằng biểu thức

e) Phạm vi hoạt động của hằng và biến

Tất cả các biến trong ứng dụng Java đều có một phạm vi (scope), hay là các đặc trưng xác định nơi có thể truy cập biến chỉ bằng tên của nó. Nếu biến nằm trong vùng phạm vi, thì có thể tương tác với nó bằng tên. Nếu biến nằm ngoài vùng phạm vi thì điều này là không thể.

Có nhiều mức phạm vi trong ngôn ngữ Java, được xác định bởi vị trí khai báo của biến ởđâu.Đoạn mã dưới đây chỉ ra vị trí khai báo các biến:

public class SomeClass { member variable scope

public void SomeMethod(parameters ) { method parameter scope local variable declaration(s) local scope someStatementWithACodeBlock { block scope } } }

Phạm vi của một biến trải rộng từ đầu đoạn (hoặc đầu khối) cho đến cuối đoạn (hoặc cuối khối) mã lệnh mà nó được khai báo trong đó.

1.2.4. Kiểu dữ liệu Mảng (Array)

Mảng được dùng đểlưu trữ các khoản mục (items) cùng kiểu dữ liệu liền kề nhau

Một phần của tài liệu Bài giảng lập trình java phần 1 đh sư phạm kỹ thuật nam định (Trang 28)

Tải bản đầy đủ (PDF)

(146 trang)