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  
pdf 15 trang yennguyen 20820 Free
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:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_2_cu_phap_java_co_ba.pdf