Bài giảng Lập trình hướng đối tượng - Bài 2: Cú pháp Java cơ bản
8/31/17
Mục tiêu bài học
n Nêu được các quy ước đặt tên trong các chương
Bộ môn Công nghệ Phần mềm
Viện CNTT & TT
trình Java, tạo ra các định danh hợp lệ
n Mô tả các kiểu dữ liệu cơ bản trong Java và
Trường Đại học Bách Khoa Hà Nội
cách sử dụng
n Các toán tử
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
n Giải thích về phạm vi của biến
n Sử dụng các câu lệnh điều khiển, cấu trúc điều
Bài 02. Cú pháp Java cơ bản
kiện, cấu trúc lặp và rẽ nhánh
n Khai báo, khởi tạo các biến và mảng trong Java
2
Nội dung
Nội dung
1. Định danh
2. Các kiểu dữ liệu
3. Toán tử
1. Định danh
2. Các kiểu dữ liệu
3. Toán tử
4. Cấu trúc điều khiển
5. Mảng
4. Cấu trúc điều khiển
5. Mảng
3
4
1
8/31/17
1. Định danh
1. Định danh (2)
n Định danh:
n Quy ước với định danh (naming convention):
n
Xâu ký tự thể hiện tên các biến, các
n
Bắt đầu bằng chữ cái
phương thức, các lớp và nhãn
n Quy định với định danh:
n
Gói (package): tất cả sử dụng chữ thường
n
theexample
n
Các ký tự có thể là chữ số, chữ cái, '$'
hoặc ‘_’
n
n
n
Lớp (Class): viết hoa chữ cái đầu tiên trong các từ ghép
lại
n
Tên không được phép:
n
TheExample
n
n
n
Bắt đầu bởi một chữ số
Trùng với từ khóa
Chứa dấu cách
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
n
theExample
n
Phân biệt chữ hoa chữ thường
n
Yourname, yourname, YourName và
yourName là 4 định danh khác nhau
Hằng (constants): Tất cả viết hoa
n
THE_EXAMPLE
5
6
1. Định danh (3)
Nội dung
n Literals
1. Định danh
null true false
2. Các kiểu dữ liệu
3. Toán tử
4. Cấu trúc điều khiển
5. Mảng
n Từ khóa (keyword)
abstract assert boolean break byte case catch char
class continue default do double else extends final
finally float for if implements import instanceof
int interface long native new package private
protected public return short static strictfp super
switch synchronized this throw throws transient try
void volatile while
n Từ dành riêng (reserved for future use)
byvalue cast const future generic goto inner operator
outer rest var volatile
7
8
2
8/31/17
2. Các kiểu dữ liệu
2.1. Kiểu dữ liệu nguyên thủy
n
Trong Java kiểu dữ liệu được chia thành hai
loại:
n Mọi biến đều phải khai báo
một kiểu dữ liệu
n
Kiểu dữ liệu nguyên thủy (primitive)
n
Các kiểu dữ liệu cơ bản chứa
một giá trị đơn
n
n
n
n
Số nguyên (integer)
Số thực (float)
Ký tự (char)
n
Kích thước và định dạng phải
phù hợp với kiểu của nó
Giá trị logic (boolean)
n
Kiểu dữ liệu tham chiếu (reference)
n Java phân loại thành 4 kiểu
n
Mảng (array)
dữ liệu nguyên thủy
n
Đối tượng (object)
9
10
a. Số nguyên
b. Số thực
n Số nguyên có dấu
n Khởi tạo với giá trị 0.0
n Khởi tạo với giá trị 0
11
12
3
8/31/17
c. Ký tự
d. Giá trị logic
n Ký tự Unicode không dấu, được đặt giữa hai dấu
nháy đơn
n 2 cách gán giá trị:
n
n
Giá trị boolean được xác định rõ ràng trong Java
n
Một giá trị int không thể sử dụng thay cho giá trị boolean
n
Có thể lưu trữ giá trị hoặc true hoặc false
n
Sử dụng các chữ số trong hệ 16: char uni ='\u05D0';
Biến boolean được khởi tạo là false
n
Sử dụng ký tự: char a = ‘A’;
n Giá trị mặc định là giá trị zero (\u0000)
13
14
2.2. Giá trị hằng (literal)
a. Số nguyên
n Hệ cơ số 8 (Octals) bắt đầu với chữ số 0
n Literal là một giá trị của các kiểu dữ liệu
n
032 = 011 010(2) = 16 + 8 + 2 = 26(10)
nguyên thủy và xâu ký tự.
n Hệ cơ số 16 (Hexadecimals) bắt đầu với 0 và ký
n Gồm 5 loại:
tự x
n
n
n
n
n
integer
Literals
n
0x1A = 0001 1010(2) = 16 + 8 + 2 = 26(10)
floating point
boolean
character
string
integer…………..7
floating point…7.0f
boolean……….true
character……….'A'
string………….."A"
n Kết thúc bởi ký tự “L” thể hiện kiểu dữ liệu long
n
26L
n Ký tự hoa, thường cho giá trị bằng nhau
n
0x1a , 0x1A , 0X1a , 0X1A đều có giá trị 26 trong hệ
decimal
15
16
4
8/31/17
b. Số thực
c. boolean, ký tự và xâu ký tự
n float kết thúc bằng ký tự f(hoặc F)
n boolean:
n
7.1f
n
true
n
false
n double kết thúc bằng ký tự d(hoặc D)
n
7.1D
n Ký tự:
n
Được đặt giữa 2 dấu nháy đơn
Ví dụ: ‘a’, ‘A’ hoặc '\uffff‘
n e(hoặc E) được sử dụng trong dạng biểu
n
diễn khoa học:
n
7.1e2
n Xâu ký tự:
n 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
n
Được đặt giữa hai dấu nháy kép
Ví dụ: “Hello world”, “Xin chao ban”,…
n
n
7.1giống như 7.1d
17
18
d. Escape sequence
2.3. Chuyển đổi kiểu dữ liệu (Casting)
n Các ký tự điều khiển nhấn phím
n Java là ngôn ngữ định kiểu chặt
n
n
n
n
n
\b backspace
\f form feed
\n newline
n
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
\r return(về đầu dòng)
\t tab
n 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
n Hiển thị các ký tự đặc biệt trong xâu
n Để chuyển sang một kiểu dữ liệu hẹp hơn,
n
n
n
\" quotation mark
\’ apostrophe
\\ backslash
cần phải định kiểu rõ ràng.
double f;
int d;
short e;
long g;
f = g;
int a, b;
short c;
e = (short)d;
a = b + c;
g = f; //error
19
20
5
8/31/17
2.3. Chuyển đổi kiểu dữ liệu (2)
Ví dụ - chuyển đổi kiểu
long p = (long) 12345.56; // p == 12345
n Chuyển đổi kiểu sẽ
được thực hiện tự
int g = p;
// không hợp lệ dù kiểu int
//có thể lưu giá trị 12345
động nếu không xảy ra
mất mát thông tin
char c = ‘t’;
int j = c;
n
byte à short à int à
long à float à double
short k = c;
short k = (short) c;
float f = 12.35;
float f = 0.0;
n É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
float f = 0;
long l = 999999999999;
short k = 99999999;
21
22
Ví dụ - chuyển đổi kiểu (2)
Ví dụ - chuyển đổi kiểu (3)
n long l = 9999999999999L;
n int i = (int) l;
n int i = 99999999;
n short j = (short) i;
n System.out.println(i); //1316134911
n System.out.println(j); //-7937
n long l = 99999999999999L;
n int i = (int) l;
n int i = 9999999;
n short j = (short) i;
n System.out.println(i); //276447231
n System.out.println(j); //-27009
23
24
6
8/31/17
2.4. Khai báo và khởi tạo biến
Chú thích
n
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
n Java hỗ trợ ba kiểu chú thích như sau:
n
// Chú thích trên một dòng
// Không xuống dòng
n
Có thể kết hợp khai báo và khởi tạo cùng một lúc.
n
n
/* Chú thích một đoạn */
/** Javadoc * chú thích dạng Javadoc */
n
Sử dụng = để gán (bao gồm cả khởi tạo)
n
Ví dụ:
n
n
n
n
n
n
n
int i, j;
// Khai báo biến
i = 0;
int k =i+1;
float x=1.0f, y=2.0f;
System.out.println(i);
System.out.println(k);
System.out.println(j);
// In ra 0
// In ra 1
// Lỗi biên dịch
27
28
Câu lệnh
Nội dung
n Các câu lệnh kết thúc bởi dấu;
1. Định danh
n Nhiều lệnh có thể viết trên một dòng
n Một câu lệnh có thể viết trên nhều dòng
2. Các kiểu dữ liệu
3. Toán tử
n
Ví dụ:
4. Cấu trúc điều khiển
5. Mảng
System.out.println(
“This is part of the same line”);
a=0; b=1; c=2;
29
30
7
8/31/17
3. Toán tử (Operators)
3. Toán tử (2)
n 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ị.
n Toán tử số học
+, -, *, /, %
n Toán tử bit
n
n Java cung cấp nhiều dạng toán
n
AND: &, OR: |, XOR: ^, NOT: ~
tử sau:
n
Dịch bit: <<, >>
n
n
n
n
n
Toán tử số học
Toán tử bit, toán tử quan hệ
Toán tử logic
Toán tử gán
Toán tử một ngôi
n Toán tử quan hệ
==, !=, >, <, >=, <=
n Toán tử logic
n
n
&&, ||, !
31
32
Lưu ý
3. Toán tử (3)
int i = 10/3;
float f0 = 10;
float f1 = (float) 10/3;
float f2 = 10/3;
float f3 = f0/3;
System.out.println(i);
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
n Toán tử một ngôi
n
n
n
Đảo dấu: +, -
Tăng giảm 1 đơn vị: ++, --
Phủ định một biểu thức logic: !
n Toán tử gán
=, +=, -=, %= tương tự với >>, <<, &, |, ^
//3
n
//3.3333333
//3.0
//3.3333333
33
34
8
8/31/17
Ví dụ
Thứ tự ưu tiên của toán tử
n
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:
n int i;
n
n
n
n
n
n
n
n
n
n
n
n
n
n
n
Postfix operators [] . (params) x++ x--
Unary operators ++x --x +x -x ~ !
Creation or cast new (type)x
Multiplicative * / %
n System.out.println(i=5);
n System.out.println(i+=4);
n System.out.println(i++);
n System.out.println(--i);
//5
//9
//9
//9
Additive + -
Shift << >> >>> (unsigned shift)
Relational < > <= >= instanceof
Equality == !=
Bitwise AND &
Bitwise exclusive OR ^
Bitwise inclusive OR |
Logical AND &&
Logical OR ||
Conditional (ternary) ?:
Assignment = *= /= %= += -= >>= <<= >>>= &= ^= |=
35
36
Nội dung
4.1. Lệnh if - else
n Cú pháp
1. Định danh
2. Các kiểu dữ liệu
3. Toán tử
4. Cấu trúc điều khiển
5. Mảng
if (dieu_kien){
cac_cau_lenh;
}
else {
cac_cau_lenh;
}
n Biểu thức điều kiện nhận giá trị boolean
n Mệnh đề else là tùy chọn
37
38
9
8/31/17
Ví dụ - Kiểm tra số chẵn – lẽ
4.2. Lệnh switch - case
class CheckNumber
n Kiểm tra một biến đơn
{
với nhiều giá trị khác
public static void main(String args[])
[true]
nhau và thực hiện
trường hợp tương ứng
casea
{
break
break
casea
[false]
action(s)
int num =10;
[true]
caseb
if (num %2 == 0)
caseb
action(s)
[false]
n
break: Thoát khỏi lệnh
switch-case
System.out.println (num+ “la so chan”);
.
.
else
.
[true]
n
default kiểm soát các
giá trị nằm ngoài các giá
trị case:
System.out.println (num + “la so le”);
casez
casez
action(s)
break
[false]
}
}
default
action(s)
39
40
Ví dụ - Lệnh switch - case (1)
Ví dụ - Lệnh switch - case (2)
public class Test {
switch (day) {
case 0:
case 1:
public static void main(String args[]) {
int i = 2;
rule = “weekend”;
break;
case 2:
switch (i) {
case 1:
case 3:
case 4:
case 5:
case 6:
rule = “weekday”;
break;
default:
rule = “error”;
System.out.println("1");
case 2:
if (day == 0 || day == 1) {
rule = “weekend”;
} else if (day > 1 && day <7) {
rule = “weekday”;
} else {
System.out.println("2");
case 3:
System.out.println("3");
}
}
rule = error;
}
}
}
41
42
10
8/31/17
Bài tập: Tính số ngày trong tháng
4.3. Vòng lặp while và do while
n Input: Năm, tháng
n Thực hiện một câu lệnh hoặc một khối lệnh
n Output: số ngày trong tháng của năm đó
n Yêu cầu: sử dụng lệnh switch-case
n Gợi ý:
khi điều kiện vẫn nhận giá trị true
n
while() thực hiện 0 hoặc nhiều lần
action state
n
do...while() thực hiện ít nhất một lần
int x = 2;
while (x < 2) {
[true]
condition
n
n
n
Tháng 1, 3, 5, 7, 8, 10, 12: 31 ngày
Tháng 4, 6, 9, 11: 30 ngày
Riêng tháng 2:
x++;
[false]
System.out.println(x);
}
n
Năm thường: 28 ngày
int x = 2;
do {
n
Năm nhuận: 29 ngày (năm nhuận là “năm chia hết cho 4 và
không chia hết cho 100”, hoặc là “năm chia hết cho 400”)
x++;
System.out.println(x);
} while (x < 2);
43
45
Ví dụ - Vòng lặp while
4.4. Vòng lặp for
class WhileDemo{
n Cú pháp:
n
n
n
n
n
for (start_expr; test_expr; increment_expr){
// code to execute repeatedly
}
public static void main(String args[]){
int a = 5,fact = 1;
while (a >= 1){
3 biểu thức đều có thể vằng mặt
fact *=a;
Có thể khai báo biến trong câu lệnh for
n
n
n
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
a--;
}
System.out.println(“The Factorial of 5
is “+fact);
n Ví dụ:
n
n
n
for (int index = 0; index < 10; index++) {
System.out.println(index);
}
}
}
46
47
11
8/31/17
Ví dụ - vòng lặp for
4.5. Các lệnh thay đổi cấu trúc điều khiển
n break
class ForDemo
{
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:
public static void main(String args[])
{
int i=1, sum=0;
for (i=1;i<=10;i+=2)
sum+=i;
n
n
System.out.println (“Sum of first five
n
n
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
old numbers is “ + sum);
}
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
}
48
50
Ví dụ - break và continue
4.5. Các lệnh thay đổi cấu trúc điều khiển (2)
public int myMethod(int x) {
n continue
int sum = 0;
outer: for (int i=0; i<x; i++) {
n
Có thể được sử dụng cho vòng lặp for, while
hoặc do...while
inner: for (int j=i; j<x; j++){
sum++;
if (j==1) continue;
if (j==2) continue outer;
if (i==3) break;
n
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.
if (j==4) break outer;
}
}
return sum;
}
51
52
12
8/31/17
4.6. Phạm vi biến
Nội dung
n Phạm vi của biến là vùng chương trình mà trong đó biến có
1. Định danh
thể được tham chiếu đến
n
Các biến được khai báo trong một phương thức thì chỉ có
thể truy cập trong phương thức đó
2. Các kiểu dữ liệu
3. Toán tử
4. Cấu trúc điều khiển
5. Mảng
n
Các biến được khai báo trong vòng lặp hoặc khối lệnh thì
chỉ có thể truy cập trong vòng lặp hoặc khối lệnh đó
53
54
5. Mảng (array)
5.1. Khai báo và khởi tạo mảng
n Tập hợp hữu hạn các phần tử cùng kiểu
n Phải được khai báo trước khi sử dụng
n Khai báo:
n Khai báo, khởi tạo giá trị ban đầu:
n
Cú pháp:
n
kieu_dl[] ten_mang = {ds_gia_tri_cac_ptu};
n
Cú pháp:
n
Ví dụ:
n
kieu_dlieu[] ten_mang = new kieu_dlieu[KT_MANG];
n
int[] number = {10, 9, 8, 7, 6};
n
kieu_dlieu ten_mang[] = new kieu_dlieu[KT_MANG];
n Nếu không khởi tạo à nhận giá trị mặc định
n
Ví dụ:
variableName
reference
n
char c[] = new char[12];
tùy thuộc vào kiểu dữ liệu.
n Luôn bắt đầu từ phần tử có chỉ số 0
Array or Object
55
56
13
8/31/17
5.1. Khai báo và khởi tạo mảng (2)
Ví dụ - mảng
c[ 0 ]
-45
Tên của mảng (tất
cả các thành phần
trong mảng có
cùng tên, c)
n Ví dụ:
c[ 1 ]
c[ 2 ]
6
int MAX = 5;
0
boolean bit[] = new boolean[MAX];
float[] value = new float[2*3];
c[ 3 ]
c[ 4 ]
c[ 5 ]
c[ 6 ]
c[ 7 ]
c[ 8 ]
c[ 9 ]
c[ 10 ]
c[ 11 ]
72
1543
-89
0
c.length: cho biết
độ dài của mảng c
int[] number = {10, 9, 8, 7, 6};
System.out.println(bit[0]); // prints “false”
System.out.println(value[3]); // prints “0.0”
System.out.println(number[1]); // prints “9”
62
-3
1
Chỉ số (truy nhập đến
các thành phần của
mảng thông qua chỉ
số)
6453
78
57
58
5.2. Mảng nhiều chiều
5.2. Mảng nhiều chiều (2)
Column 0
Column 1
Column 2
Column 3
n Bảng với các dòng và cột
Row 0
Row 1
Row 2
b[ 0 ][ 0 ] b[ 0 ][ 1 ] b[ 0 ][ 2 ] b[ 0 ][ 3 ]
b[ 1 ][ 0 ] b[ 1 ][ 1 ] b[ 1 ][ 2 ] b[ 1 ][ 3 ]
b[ 2 ][ 0 ] b[ 2 ][ 1 ] b[ 2 ][ 2 ] b[ 2 ][ 3 ]
n
n
n
Thường sử dụng mảng hai chiều
Ví dụ khai báo mảng hai chiều b[2][2]
int b[][] = { { 1, 2 }, { 3, 4 } };
n
1 và 2 được khởi tạo cho b[0][0] và b[0][1]
n
3 và 4 được khởi tạo cho b[1][0] và b[1][1]
n
int b[3][4];
Chỉ số cột
Chỉ số hàng
Tên mảng
60
61
14
8/31/17
Bài tập
Bài tập
n
1. Viết chương trình nhập chiều cao h từ bàn phím, sau
đó hiển thị các tam giác hình sao có chiều cao h như dưới
đây. Chú ý có kiểm tra điều kiện của h: 2<=h<=10. Nếu
h nằm ngoài đoạn trên, yêu cầu người dùng nhập lại.
n 2. Nhập vào kích thước ô vuông n*n. Hiển thị
ra màn hình kết quả như ví dụ sau. Kiểm tra
3<=n<= 8
1
2
3
4
5
6
7
*
12 13 14
11 16 15
* * *
* * * * *
h
* * * * * * *
* * * * * * * * *
10
9
8
62
63
Bài tập
n 3. Viết chương trình nhập n số thực từ bàn
phím. Sau đó hỏi người sử dụng muốn sắp
xếp theo chiều tăng dần hay giảm dần rồi
đưa ra danh sách số thực của mảng đã sắp
xếp theo yêu cầu của người sử dụng
64
15
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 2: Cú pháp Java cơ bản", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_lap_trinh_huong_doi_tuong_bai_2_cu_phap_java_co_ba.pdf

