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
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 |
Có thể bạn quan tâm!
- Lập trình Java - 2
- Lập trình Java - 3
- Đường Dẫn Của Thư Mục Cài Đặt Java
- Danh Sách Các Toán Tử Trên Kiểu Số Thực
- Hàm – Phương Thức (Function – Method) Khái Niệm
- Một Ví Dụ Về Hai Phương Pháp Giải Quyết Oop Và Structured
Xem toàn bộ 267 trang tài liệu này.
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:
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.
-Kiểu dữ liệu char:
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:
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[])
{
float a = (float) 12; //chuyển kiểu số nguyên 12 sang float
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
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).
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:
Ý 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 |
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
float dec=1.0F; //khai báo và gán giá trị cho biến kiểu float
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 trong bộ nhớ. Mỗi lần ta khai báo kích thước của một mảng, nó sẽ không thể thay đổi. Dữ liệu trên mảng có thể là kiểu dữ liệu nguyên thủy hoặc đối tượng. Cũng như các biến, ta có thể gán các giá trị vào mảng tại các phần tử được tạo ra trong mảng. Nếu không, Java sẽ gán giá trị mặc định vào tất cả các phần tử của mảng, giá trị mặc định phụ thuộc vào kiểu dữ liệu. Ví dụ nếu kiểu dữ liệu là nguyên (int) thì giá trị mặc định ban đầu sẽ là 0.
Khai báo mảng
Đặc trưng của mảng là một cặp dấu ngoặc vuông ([]), một mảng được khai báo bằng hai cách :
Cặp ngoặc vuông đặt sau tên biến Cặp ngoặc vuông đặt sau kiểu dữ liệu Cú pháp như sau:
Datatype identifier[]; hoặc Datatype[] identifier; Ví dụ 1.5:
int arrInt[]; hoặc int[] arrInt; int[] arrInt1, arrInt2, arrInt3; Cấp phát bộ nhớ cho mảng
Sau khi khai báo, bản thân mảng chưa được xác định (chưa được cấp phát bộ nhớ), bởi vì Java không cho phép chỉ định số phần tử khi khai báo. Để định vị cho một mảng trong bộ nhớ ta cần dùng từ khóa new.
Cú pháp như sau:
Identifier = new datatype[n];
Trong đó Identifier là tên biến mảng đã được khai báo, datatype là kiểu dữ liệu của mảng, n là số phần tử của mảng.
Ví dụ 1.6: để cấp phát một vùng nhớ cho một mảng arrInt đã khai báo ở trên gồm 100 phần tử kiểu int ta thực hiên như sau:
int arrInt = new int[100];
Tuy nhiên Java cũng cho phép thực hiện việc cấp phát vùng nhớ cho mảng trong khi khai báo theo cú pháp như sau:
Datatype identifier[] = new Datatype[n]; Ví dụ 1.7:
char ch[] = new char [10]; // khai báo và cấp phát bộ nhớ bằng từ khóa new Lệnh này sẽ tạo ra mảng ch có 10 phần tử kiểu char được đánh số từ 0 đến 9.
Khởi tạo mảng
Chúng ta có thể khởi tạo giá trị ban đầu cho các phần tử của mảng khi nó được khai báo.
Ví dụ 1.8:
int arrInt[] = {1, 2, 3}; chararrChar[] = {„a‟, „b‟, „c‟};
string arrStrng[] = {“ABC”, “EFG”, „GHI‟};
Truy cập mảng
Chỉ số mảng trong Java bắt đầu tư 0. Vì vậy phần tử đầu tiên có chỉ số là 0, và phần tử thứ n có chỉ số là n-1. Các phần tử của mảng được truy xuất thông qua chỉ số của nó đặt giữa cặp dấu ngoặc vuông ([]).
Ví dụ 1.9: khai báo mảng
int arrInt[] = {1, 2, 3};
int x = arrInt[0]; // x sẽ có giá trị là 1. int y = arrInt[1]; // y sẽ có giá trị là 2. int z = arrInt[2]; // z sẽ có giá trị là 3.
1.2.5. Toán tử và biểu thức
a) Toán tử
Toàn tử là các ký hiệu sử dụng cho các phép toán, thường được tham gia vào việc thành lập các biểu thức.
Trong Java có các loại toán tử sau:
Toán tử hai ngôi:
nhỏ hơn | a < b | a nhỏ hơn b | |
<= | nhỏ hơn hoặc bằng | a <= b | a nhỏ hơn hoặc bằng |
> | lớn hơn | a > b | a lớn hơn b |
>= | lớn hơn hoặc bằng | a >= b | a lớn hơn hoặc bằng b |
+ | phép cộng | a + b | a cộng b |
– | phép trừ | a – b | a trừ b |
* | phép nhân | a * b | a nhân b |
/ | phép chia | a / b | a chia b |
% | phép tính modulo | a % b | a modulo b |
<< | dịch chuyển bit sang trái | a << n | dịch số a sang trái n bit |
>> | dịch chuyển bit sang | a >> b | dịch số a sang phải n bit |
phải | |||
>>> | dịch chuyển bit sang phải và điền 0 vào các bit trống | a >>> b | dịch a sang phải n bit và điền 0 vào các bit trống |
& | Phép AND trên bit | a & b | 4 & 2 = 0 |
| | Phép OR trên bit | a | b | 4 | 2 = 6 |
^ | Phép XOR trên bit | a ^ b | 4 ^ 2 = 1 |