1/20/2014
Bộ môn Hệ thống thông tin
Mục tiêu bài học
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Nêu được các quy ước đặt tên trong các
chương trình Java
Tạo ra các định danh hợp lệ
Mô tả các kiểu dữ liệu cơ bản trong Java và
cách sử dụng
Các toán tử
Sử dụng các câu lệnh điều kiện, cấu trúc lặp và
rẽ nhánh
Giải thích về phạm vi của biến
Khai báo, khởi tạo các biến và mảng trong Java
NHẬP MÔN JAVA
Chương 03. Cú pháp Java cơ bản
TS. Nguyễn Bình Minh
[email protected]
1
Department of Information Systems
1. Định danh
Nội dung
1.
2.
3.
4.
5.
6.
7.
8.
Định danh:
Định danh
Các kiểu dữ liệu
Hằng giá trị
Ép kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Tham số dòng lệnh
Department of Information Systems
Xâu ký tự thể hiện tên các biến,
các phương thức, các lớp và
nhãn
Phân biệt chữ hoa, chữ thường
Các ký tự có thể là chữ số,
chữ cái, '$' hoặc „_‟
Tên không được phép:
Bắt đầu bởi một chữ số
Trùng với từ khóa
Department of Information Systems
3
1. Định danh
1.
2.
3.
4.
5.
6.
7.
8.
yourname, yourName, Yourname, YourName là 4 định danh
khác nhau
Quy ước:
Gói (package): tất cả sử dụng chữ thường
Lớp (Class): viết hoa chữ cái đầu tiên trong các từ ghép lại
theexample
TheExample
Phương thức/thuộc tính (method/field): Bắt đầu bằng chữ
thường, viết hoa chữ cái đầu tiên trong các từ còn lại
theExample
Hằng (constants): Tất cả viết hoa
THE_EXAMPLE
Department of Information Systems
4
Nội dung
Phân biệt chữ hoa - chữ thường (case-sensitive)
2
5
Định danh
Các kiểu dữ liệu
Hằng giá trị
Ép kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Tham số dòng lệnh
Department of Information Systems
7
1
1/20/2014
2. Các kiểu dữ liệu
Kiểu dữ liệu nguyên thủy
Trong Java kiểu dữ liệu được chia thành hai loại:
Mọi biến đều phải khai báo
một kiểu dữ liệu
Kiểu dữ liệu nguyên thủy (primitive)
Số nguyên (interger)
Số thực (float)
Ký tự (char)
Boolean
Kiểu dữ liệu tham chiếu (reference)
Java phân loại thành 4 kiểu
dữ liệu nguyên thủy
Mảng (array)
Lớp (class)
Giao diện (interface)
Sẽ được học trong phần sau
Department of Information Systems
8
2.1. Số nguyên
10
Department of Information Systems
11
Ví dụ
Ký tự Unicode không dấu, được đặt giữa hai dấu nháy
đơn
2 cách gán giá trị:
9
Có thể phân thành từng phần
Khởi tạo với giá trị 0.0
2.3. Ký tự
Department of Information Systems
2.2. Số thực
Số nguyên có dấu
Khởi tạo với giá trị 0
Department of Information Systems
Các kiểu dữ liệu cơ bản chứa
một giá trị đơn
Kích thước và định dạng phải
phù hợp với kiểu của nó
Sử dụng các chữ số trong hệ 16: char uni ='\u05D0';
Sử dụng ký tự: char a = „A‟;
//Các bit thể hiện giá trị số -1
short s = (short) 0xffff;
//Các bit tương tự, thể hiện một ký tự Unicode
char c = '\uffff';
Giá trị mặc định là giá trị zero (\u0000)
// Chuyển từ kiểu short thành int giá trị -1
int i1 = s;
//Chuyển từ kiểu char thành int giá trị 65535
int i2 = c;
Department of Information Systems
12
Department of Information Systems
13
2
1/20/2014
2.4. Boolean
2.4. Boolean (2)
Giá trị boolean được xác định rõ ràng trong Java
Giá trị boolean được xác định rõ ràng trong Java
Một giá trị int không thể sử dụng thay cho giá trị boolean
Một biến boolean có thể lưu trữ giá trị hoặc true hoặc false
Biến boolean được khởi tạo là false
Department of Information Systems
Biến boolean được khởi tạo là false
Department of Information Systems
14
Nội dung
1.
2.
3.
4.
5.
6.
7.
8.
Một literal là một giá trị của các kiểu dữ liệu
nguyên thủy.
Gồm 5 loại:
Literals
integer
integer…………..7
floating point
floating point…7.0f
boolean
boolean……….true
character
character……….'A'
string
string………….."A"
Department of Information Systems
16
3. Giá trị hằng (2)
b. Số thực:
Hệ cơ số 8 (Octals) bắt đầu với chữ số 0
float literal kết thúc bằng ký tự f (hoặc F)
double literal kết thúc bằng ký tự d (hoặc D)
7.1f
032 = 011 010(2) = 16 + 8 + 2 = 26(10)
Hệ cơ số 16 (Hexadecimals) bắt đầu với 0 và ký
tự x
7.1D
0x1A = 0001 1010(2) = 16 + 8 + 2 = 26(10)
Kết thúc bởi ký tự “L” thể hiện kiểu dữ liệu long
Ký tự hoa, thường cho giá trị bằng nhau
0x1a , 0x1A , 0X1a , 0X1A đều có giá trị 26 trong hệ
decimal
Department of Information Systems
e (hoặc E) được sử dụng trong dạng biểu diễn khoa
học:
7.1e2
26L
17
3. Giá trị hằng (3)
a. Số nguyên:
15
3. Giá trị hằng (literal)
Định danh
Các kiểu dữ liệu
Hằng giá trị
Ép kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Tham số dòng lệnh
Department of Information Systems
Một giá trị int không thể sử dụng thay cho giá trị boolean
Một biến boolean có thể lưu trữ giá trị hoặc true hoặc false
Một giá trị thực mà không có ký tự kết thúc đi kèm sẽ
có kiểu là double
7.1 giống như 7.1d
18
Department of Information Systems
19
3
1/20/2014
3. Giá trị hằng (4)
3. Giá trị hằng (5)
* Escape sequence:
c. boolean:
true
false
\b
\f
\n
\r
\t
d. Ký tự:
Được đặt giữa 2 dấu nháy đơn
Ví dụ: „a‟, „A‟ hoặc '\uffff'
Được đặt giữa hai dấu nháy kép
Ví dụ: “Hello world”, “Xin chao ban”,…
Department of Information Systems
backspace
form feed
newline
carrage return
tab
Hiển thị các ký tự đặc biệt trong xâu
\" quotation mark
\‟ apostrophe
\\ backslash
e. Xâu ký tự:
Các ký tự điều khiển nhấn phím
Department of Information Systems
20
Nội dung
21
4. Ép kiểu dữ liệu (Casting)
Java là ngôn ngữ định kiểu chặt
1.
2.
3.
4.
5.
6.
7.
8.
Định danh
Các kiểu dữ liệu
Hằng giá trị
Ép kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Tham số dòng lệnh
Department of Information Systems
Gắn sai kiểu giá trị cho một biến có thể dẫn đến các lỗi biên dịch
hoặc các ngoại lệ của JVM
Ép kiểu dữ liệu cho phép sử dụng nó như một kiểu dữ
liệu khác
JVM có thể ngầm định chuyển từ một kiểu dữ liệu hẹp
sang một kiểu rộng hơn
Để chuyển sang một kiểu dữ liệu hẹp hơn, cần phải định
kiểu rõ ràng.
int a, b;
short c;
a = b + c;
int d;
short e;
e = (short)d;
double f;
long g;
f = g;
g = f; //error
Department of Information Systems
22
4. Ép kiểu dữ liệu (2)
Khởi tạo biến đơn
Chuyển đổi kiểu sẽ được thực hiện tự động nếu không
xảy ra mất mát thông tin
Các biến đơn (biến không phải là mảng) cần phải được
khởi tạo trước khi sử dụng trong các biểu thức
byte short int long float double
Ép kiểu trực tiếp (explicit cast) được yêu cầu nếu có
“nguy cơ” giảm độ chính xác
Có thể kết hợp khai báo và khởi tạo cùng một lúc.
Sử dụng = để gán (bao gồm cả khởi tạo)
Ví dụ:
int i, j;
// Khai báo biến
i = 0;
int k=i+1;
// Khai báo và khởi tạo cùng lúc
float x=1.0, y=2.0;
System.out.println(i); // In ra 0
System.out.println(k); // In ra 1
System.out.println(j); // Lỗi biên dịch
long p = (long) 12345.56; // p == 12345
int g = p; // không hợp lệ mặc dù kiểu int, có thể lưu giá trị 12345
char c = „t‟;
int j = c;
// tự động chuyển đổi
short k = c;
// không hợp lệ
short k = (short) c;
// ép kiểu trực tiếp
float f = 12.35;
// không hợp lệ
Department of Information Systems
23
24
Department of Information Systems
25
4
1/20/2014
Chuyển đổi kiểu dữ liệu
Nội dung
String str1 = “12”;
int i = Integer.parseInt(str1);
// i =12
String str2 = “45.67”;
double d= Double.parseDouble(str2);
// d=45.67
Department of Information Systems
1.
2.
3.
4.
5.
6.
7.
8.
26
Định danh
Các kiểu dữ liệu
Hằng giá trị
Ép kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Tham số dòng lệnh
Department of Information Systems
27
5.1. Toán tử số học
5. Toán tử
Toán tử (operators):
Kết hợp các giá trị đơn hoặc các biểu thức con thành
những biểu thức mới, phức tạp hơn và có thể trả về
giá trị.
Java cung cấp nhiều 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ử gán
Department of Information Systems
28
5.2. Toán tử bit
Department of Information Systems
Department of Information Systems
29
5.2. Phép toán bit (tiếp)
30
Department of Information Systems
31
5
1/20/2014
5.3. Phép toán quan hệ
Department of Information Systems
5.4. Phép toán logic
Department of Information Systems
32
5.5. Toán tử gán
5.5. Toán tử gán (tiếp)
Phép toán gán thu gọn:
Cú pháp
ten_bien = bieu_thuc;
Lấy giá trị của bieu_thuc gán cho ten_bien
Department of Information Systems
34
5.6. Thứ tự ưu tiên các phép gán
Postfix operators [] . (params) x++ x-Unary operators ++x --x +x -x ~ !
Creation or cast new (type)x
Multiplicative * / %
Additive + Shift << >> >>>
Relational < > <= >= instanceof
Equality == !=
Bitwise AND &
Bitwise exclusive OR ^
Bitwise inclusive OR |
Logical AND &&
Logical OR ||
Conditional (ternary) ?:
Assignment = *= /= %= += -= >>= <<= >>>= &= ^= |=
Department of Information Systems
35
5.7. Chú thích
Cho biết toán tử nào thực hiện trước – được xác định bởi các
dấu ngoặc đơn hoặc theo ngầm định như sau:
x = x + y; giống như
x += y;
Dạng lệnh gán thu gọn này còn áp dụng
được với các phép toán khác: +, -, *, /, %,
>>, <<, &, |, ^
Ví dụ:
int a, b, c;
a = 3;
b = a + 5;
c = a * b;
Department of Information Systems
33
Java hỗ trợ ba kiểu chú thích như sau:
36
// Chú thích trên một dòng
// Không xuống dòng
/* Chú thích một đoạn */
/** Javadoc * chú thích dạng Javadoc */
Department of Information Systems
37
6
1/20/2014
5.8. Câu lệnh
Nội dung
Các câu lệnh kết thúc bởi dấu;
Nhiều lệnh có thể viết trên một dòng
Một câu lệnh có thể viết trên nhiều dòng
1.
2.
3.
4.
5.
6.
7.
8.
Ví dụ :
System.out.println(
“This is part of the same line”);
a=0; b=1; c=2;
Department of Information Systems
Department of Information Systems
38
6.1. Cấu trúc rẽ nhánh
a. Câu lệnh if – else (tiếp):
Ví dụ:
Cú pháp
if (dieu_kien)
{cac_cau_lenh; }
else
{cac_cau_lenh; }
Biểu thức điều kiện nhận giá trị boolean
Mệnh đề else là tùy chọn
Các dấu ngoặc nhọn là không cần thiết với các câu lệnh
đơn, nhưng nên sử dụng để tăng sự rõ ràng.
if (x > 10) {
if (x != 20) {
System.out.println("x is not 20");
}
else {
System.out.println("x = " + x);
}
} else {
System.out.println("x is less than 11");
}
Department of Information Systems
40
6.1. Cấu trúc rẽ nhánh (3)
41
6.1. Cấu trúc rẽ nhánh (4)
a. Câu lệnh if – else (tiếp):
a. Câu lệnh if – else (tiếp):
Ví dụ: Kiểm tra số chẵn lẻ:
Dạng rút gọn của câu lệnh if-else:
class CheckNumber
{
public static void main(String args[]
{
int num =10;
if(num %2 == 0)
System.out.println (num+ “is an even number”);
else
System.out.println (num +”is an odd number”);
}
}
Department of Information Systems
39
6.1. Cấu trúc rẽ nhánh (2)
a. Câu lệnh if – else:
Department of Information Systems
Định danh
Các kiểu dữ liệu
Hằng giá trị
Ép kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Tham số dòng lệnh
42
(
? : )
Có thể viết mã ngắn hơn
Đảm bảo mã nguồn vẫn dễ đọc
if (x>LIMIT) {
warning = “Too Big”;
} else {
warning = null;
}
warning = (x>LIMIT) ? “Too Big” : null ;
Department of Information Systems
43
7
1/20/2014
6.1. Cấu trúc rẽ nhánh (5)
6.1. Cấu trúc rẽ nhánh (5)
b. Câu lệnh switch – case (tiếp):
b. Lệnh switch – case:
Kiểm tra một biến đơn với
nhiều giá trị khác nhau và
thực hiện trường hợp
tương ứng
break: Thoát khỏi lệnh
switch-case
default kiểm soát các giá
trị nằm ngoài các giá trị
case:
case a
case b
[tru
[false] e]
[false]
[tru
e]
case a
action(s)
break
case b
action(s)
break
case z
action(s)
break
switch (day)
case 0:
case 1:
rule =
break;
case 2:
…
case 6:
rule =
break;
default:
rule =
.
.
.
case z
[false]
[tru
e]
default
action(s)
Department of Information Systems
Thực hiện một câu lệnh hoặc một khối lệnh khi điều kiện
vẫn nhận giá trị true
while() thực hiện 0 hoặc nhiều lần
action state
do...while() thực hiện ít nhất một lần
[true]
condition
[false]
45
Ví dụ:
class WhileDemo{
public static void main(String args[]){
int a = 5,fact = 1;
while (a >= 1){
fact *=a;
a--;
}
System.out.println(“The Factorial of 5 is “+fact);
Department of Information Systems
}
Department of Information Systems
46
6.2. Cấu trúc lặp (2)
Ví dụ:
for (start_expr; test_expr; increment_expr){
// code to execute repeatedly
}
class ForDemo
{
public static void main(String args[])
{
int i=1,sum=0;
for (i=1;i<=10;i+=2)
sum+=i;
System.out.println (“Sum of first five
old numbers is “+sum);
}
}
Có thể khai báo biến trong câu lệnh for
Thường sử dụng để khai báo một biến đếm
Thường khai báo trong biểu thức “start”
Phạm vi của biến giới hạn trong vòng lặp
for (int index = 0; index < 10; index++) {
System.out.println(index);
}
Department of Information Systems
47
6.2. Cấu trúc lặp (2)
b. Vòng lặp for:
“error”;}
if (day == 0 || day == 1) {
rule = “weekend”;
} else if (day > 1 && day <7) {
rule = “weekday”;
} else {
rule = error;
}
}
int x = 2;
do {
x++;
System.out.println(x);
} while (x < 2);
“weekday”;
6.2. Cấu trúc lặp (2)
a. Vòng lặp while và do while:
“weekend”;
Department of Information Systems
44
6.2. Cấu trúc lặp
int x = 2;
while (x < 2) {
x++;
System.out.println(x);
}
{
48
Department of Information Systems
49
8
1/20/2014
6.2. Cấu trúc lặp (2)
6.3. Các lệnh thay đổi cấu trúc điều khiển
break
So sánh vòng lặp for và while:
Các câu lệnh for và while cung cấp chức năng
tương đương nhau
Các cấu trúc lặp thường được sử dụng trong các tình
hống khác nhau
while được sử dụng cho lặp từ đầu đến cuối
for được sử dụng để lặp với số vòng lặp cố định
int sum = 0;
for (int index = 1;index <= 10;index++)
{
sum += index;
}
int sum = 0;
int index = 1;
while (index <= 10) {
sum += index;
index++;
}
Department of Information Systems
continue
Có thể được sử dụng cho vòng lặp for,
while hoặc do...while
Bỏ qua các câu lệnh còn lại của vòng lặp hiện
thời và chuyển sang thực hiện vòng lặp tiếp
theo.
Department of Information Systems
Gắn nhãn: Tiếp tục thực hiện câu lệnh tiếp theo
sau vòng lặp được gắn nhãn
Không gắn nhãn: Thực hiện câu lệnh tiếp theo bên
ngoài vòng lặp
Department of Information Systems
50
6.3. Các lệnh thay đổi cấu trúc điều khiển
Có thể được sử dụng để thoát ra ngoài câu
lệnh switch
Kết thúc vòng lặp for, while hoặc
do...while
Có hai dạng:
6.3. Các lệnh thay đổi cấu trúc điều khiển
public int myMethod(int x) {
int sum = 0;
outer: for (int i=0; i0)
System.out.println(args[0]);
if (args.length>1)
System.out.println(args[1]);
if (args.length>2)
System.out.println(args[2]);
} // end of main
} // end of class
Department of Information Systems
11