CÔNG NGHỆ JAVA
CH2. CÁC THÀNH PHẦN CƠ BẢN
03/06/18 1
Nội dung
• Chú thích • Khối lệnh và câu lệnh • Tập kí tự dùng trong Java • Từ khóa và tên • Kiểu dữ liệu • Hằng • Biến • Chuyển đổi kiểu dữ liệu • Định dạng nhập xuất • Biểu thức và toán tử • Các câu lệnh điều khiển
03/06/18 2
Chú thích (1)
• Chú thích 1 dòng: bắt đầu bằng dấu //
• Chú thích nhiều dòng:
– bắt đầu bằng /* – kết thúc bằng */
03/06/18 3
Chú thích (2)
– Chú thích javadoc:
• dùng để tài liệu hóa các lớp public hay protected • Bắt đầu bằng /** • Kết thúc bằng */
03/06/18 4
Chú thích (3)
Mục đích
Bắt đầu
Kết thúc
*/
/*
Đoạn code bị giới hạn là phần ghi chú
//
Ghi chú trên 1 dòng, trình biên dịch bỏ qua từ // đến cuối dòng
/**
*/
Ghi chú dành cho javadoc, trình biên dịch sẽ bỏ qua
03/06/18 5
Câu lệnh & khối lệnh (1)
• Một câu lệnh trong java sẽ được kết thúc
bằng dấu chấm phẩy (;) – Ví dụ:
private void timgiatriXmax(Integer begin, Integer i, List list) {
double xmax = list.get(begin).getX(); int index = begin;
for (int j = begin + 1; j <= i; j++) {
if (list.get(j).getX() >= xmax) { xmax = list.get(j).getX(); index = j; }
} this.listdiemchot.add(list.get(index));
}
03/06/18 6
Câu lệnh & khối lệnh (2)
• Các câu lệnh đơn có thể nối lại với nhau
tạo thành các khối lệnh thuộc 1 lớp. • Bộ lệnh của Java không giới hạn trong
cặp dấu ngoặc { và }
• Khối lệnh có thể được đặt trong khối lệnh
khác.
public class Student {
private String name; private GregorianCalendar bithDay; private double mark;
}
03/06/18 7
Tên
• Qui tắc đặt tên:
– Tên có thể được bắt đầu bằng một kí tự, hoặc
dấu: $, _
– Tên không thể bắt đầu bằng 1 số – Không được trùng với từ khóa – Tên không được chứa dấu cách – Java phân biệt chữ hoa và chữ thường
03/06/18 8
Tập kí tự dùng trong Java
• Java được xây dựng dựa trên bộ kí tự
sau: – 26 chữ cái hoa: A…Z, 26 chữ cái thường: a…
z
– 10 chữ số: 0…9 – Các kí hiệu toán học: +, -, *, /, %, =, ()… – Dấu nối: _ – Các kí hiệu đặc biệt khác: :, :, {}, [], ?, \, &, !,
#, $, …
– Bên cạnh đó Java còn dùng bộ kí tự Unicode
03/06/18 9
Từ khóa (1)
• là những từ có ý nghĩa xác định • Thường dùng để khai báo các kiểu dữ
liệu, viết các toán tử và câu lệnh
• Chú ý:
– Không được dùng từ khóa để đặt tên cho
hằng, biến, mảng, hàm, …
– Từ khóa phải viết bằng chữ thường
03/06/18 10
Từ khóa (2)
Từ khóa
Ý nghĩa
Dùng để khai báo lớp, hàm trừu tượng. abstract
Kiểu dữ liệu logic boolean
Được sử dụng để kết thúc vòng lặp hoặc cấu trúc switch. break
Kiểu dữ liệu số nguyên. byte
Được sử dụng trong lệnh switch. case
Kiểu dữ liệu kí tự. char
Được sử dụng trong xử lý ngoại lệ. catch
Dùng để khai báo lớp. class
Khai báo biến theo sau là biến hằng const
Được dùng trong vòng lặp để bắt đầu một vòng lặp mới. continue
Được sử dụng trong lệnh switch. default
Được sử dụng trong vòng lặp điều kiện sau. do
03/06/18 11
Từ khóa (3)
Từ khóa
Ý nghĩa
Kiểu dữ liệu số thực. double
Khả năng lựa chọn thứ 2 trong câu lệnh If. else
Chỉ rằng một lớp được kế thừa từ một lớp khác. extends
Giá trị logic. false
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.
Phần cuối của khối xử lý ngoại lệ. finally
Kiểu số thực. float
Câu lệnh lặp. for
Nhảy tới dòng lệnh bất kì đã được đặt nhãn goto
Câu lệnh lựa chọn. if
implements Chỉ rằng một lớp triển khai từ một giao diện.
import Khai báo sử dụng thư viện.
03/06/18 12
Từ khóa (3)
Từ khóa
Ý nghĩa
instanceof Kiểm tra một đối tượng có phải là một thể hiện của một lớp hay không.
int Kiểu số nguyên.
interface sử dụng để khai báo giao diện.
long Kiểu số nguyên.
Khai báo phương thức được viết bằng ngôn ngữ C++. native
new Tạo một đối tượng mới.
null Một đối tượng không tồn tại.
package Dùng để khai báo một gói.
private Đặc tả truy xuất.
public Đặc tả truy xuất.
protected Đặc tả truy xuất.
return Trả giá trị về
short Kiểu số nguyên.
03/06/18 13
Từ khóa (4)
Từ khóa
Ý nghĩa
Dùng để khai báo biến, thuộc tính tĩnh. static
Truy xuất đến lớp cha. super
Lệnh lựa chọn. switch
synchronized Một phương thức độc quyền truy xuất trên một đối tượng.
Ám chỉ chính lớp đó. this
Ném ra ngoại lệ. throw
Khai báo phương thức ném ra ngoại lệ. throws
Giá trị logic. true
Sử dụng để bắt ngoại lệ. try
Dùng để khai báo một phương thức không trả về giá trị. void
Dùng trong cấu trúc lặp. while
03/06/18 14
Kiểu dữ liệu
• Mỗi biến phải có 1 kiểu dữ liệu • Kiểu dữ liệu xác định miền giá trị cho biến
03/06/18 15
Kiểu dữ liệu nguyên thủy
• là các dữ liệu được xác định trong ngôn
ngữ
03/06/18 16
Kiểu dữ liệu dẫn xuất
• Tham chiếu tới một giá trị hay là tập hợp
các giá trị mà biến khai báo.
• Các kiểu dữ liệu dẫn xuất:
03/06/18 17
Giá trị mặc định
• Lỗi hay gặp phải khi lập trình là sử dụng biến chưa khởi tạo • Java hỗ trợ khởi tạo các giá trị mặc định cho các biến.
03/06/18 18
Hằng
• Từ khóa final chỉ dẫn đến 1 biến không
thể thay đổi giá trị.
• Các hàm và lớp cũng có thể được khai
báo final – Hàm final không thể viết chồng – Lớp final không thể là lớp con
final int MAX = 10;
03/06/18 19
Biến (1)
• Biến là một vị trí trong bộ nhớ máy tính mà ở đó giá trị được lưu trữ và có thể được truy xuất sau đó.
• Sử dụng để lưu trữ dữ liệu có thể thay đổi
trong quá trình thực thi
03/06/18 20
Biến (2)
• Tên biến phải là duy nhất trong 1 phạm vi • Các biến cần được khai báo trước khi sử
dụng
• Khai báo biến bao gồm đặc tả tên biến, và
đặc tả kiểu dữ liệu mà biến đại diện.
• Cú pháp:
Type variable; Hay Type variable = value;
03/06/18 21
Biến (3)
• Kiểu biến:
– Kiểu dữ liệu nguyên thủy – Tên của 1 lớp – Một mảng
• Để khai báo 1 biến mới ta phải khai báo 1 lớp mới, sau đó kiểu biến mới được khai báo kiểu là lớp mới đó.
03/06/18 22
Biến (4)
• Các loại biến trong Java:
– Biến đối tượng – Biến lớp – Biến cục bộ
03/06/18 23
Biến đối tượng
• Dùng để định nghĩa thuộc tính, trạng thái
cho 1 đối tượng
• Có thể là biến toàn cục của 1 đối tượng • Khai báo
Type variable;
03/06/18 24
Biến lớp
• Tương tự biến đối tượng nhưng giá trị
nằm trong chính lớp đó
• Ảnh hưởng toàn cục đến 1 lớp và tất cả
các đối tượng trong lớp đó
• Thích hợp dùng để trao đổi thông tin giữa các đối tượng khác nhau trong cùng một lớp hau theo dõi trạng thái toàn cục của đối tượng
• Cú pháp
static Type variable;
03/06/18 25
Biến cục bộ
• Được khai báo và sử dụng trong thân
phương thức
• Bắt buộc phải gán giá trị trước khi sử
dụng
• Java không có biến toàn cục, biến đối
tượng hoặc biến lớp được dùng để truyền thông tin toàn cục
03/06/18 26
Phạm vi của biến
• Biến toàn cục: có thể truy cập bất cứ đâu
trong toàn bộ chương trình
• Biến cục bộ tồn tại giới hạn và quan hệ chỉ
trong phần nhỏ của mã
public class MyClass {
int i; // member variable
int first() {
int j; // local variable // i va j deu co the truy cap tu day return 1;
}
int second() {
int j; // local variable // i va j deu co the truy cap tu day return 2;
}
}
03/06/18 27
Chuyển đổi kiểu dữ liệu (1)
• Dùng để chuyển từ một kiểu dữ liệu này
sang kiểu dữ liệu khác
• Có 2 dạng ép kiểu: – Ép kiểu ngầm định – Ép kiểu tường minh
03/06/18 28
Chuyển đổi kiểu dữ liệu (2)
03/06/18 29
Ép kiểu ngầm định
• Khi một kiểu dữ liệu được gán cho 1 biến của 1 kiểu khác tự động chuyển kiểu
• Điều kiện:
– Hai kiểu phải tương thích – Kiểu đích phải lớn hơn kiểu nguồn
03/06/18 30
Ép kiểu tường minh
• Khi cần chuyển sang kiểu có độ chính xác
cao hơn
03/06/18 31
Chuyển đổi kiểu dữ liệu
• Có 3 dạng chuyển đổi kiểu dữ liệu
– Chuyển đổi cho các kiểu dữ liệu cơ bản
(New Type) value;
– Chuyển đổi kiểu cho các đối tượng: các lớp chuyển đổi
phải kế thừa nhau
(New Class) object;
– Chuyển đổi cho các kiểu dữ liệu cơ bản sang đối tượng và
ngược lại:
• Chỉ chuyển đổi giữa các đối tượng có sẵn trong gói java.lang tương ứng với các dữ liệu nguyên thủy
int intObject = new Integer(32);
03/06/18 32
Khởi tạo biến
• Integers
byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE;
• real numbers
float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE;
• other primitive types
char aChar = 'S'; boolean aBoolean = true;
03/06/18 33
Nhập xuất dữ liệu
Nhập xuất dữ liệu là tác vụ mức hệ thống Gói java.io chứa các lớp cho việc xuất nhập. Cần tham khảo gói này. Java cung cấp class System mô tả hệ thống System.out là đối tượng xuất mặc định (màn hình) System.in là đối tượng nhập mặc định ( bàn phím) System.err là đối tượng xuất lỗi (màn hình) Methods xuất dữ liệu ra màn hình: System.out.print(Dữ liệu xuất); System.out.println(Dữ liệu xuất); Dữ liệu xuất có thể là : ký tự, số, chuỗi,…
03/06/18 34
Xuất dữ liệu (tt)
03/06/18 35
Định dạng nhập xuất (1)
• Mã định dạng: bất kì một đầu ra được hiển thị trên màn hình cần phải được định dạng
03/06/18 36
Định dạng nhập xuất (2)
• Hàm printf() trong Java được sử dụng để
định dạng kiểu dữ liệu ở console
• Ví dụ:
public static void main(String[] args) {
int i = 10; System.out.printf("gia tri cua i la %d", i);
}
03/06/18 37
Lớp Scanner
• Cho phép người dùng đọc giá trị của một
vài kiểu
public static void main(String[] args) {
Đối tượng InputStream
Scanner scaner = new Scanner(System.in);
}
• Một số phương thức của Scanner với System.in là đối tượng dòng đầu vào:
03/06/18 38
Dãy Escape
03/06/18 39
Các phương thức hữu dụng trong Character.class
Useful Methods in the Character Class
Method
Description
boolean isLetter(char ch) boolean isDigit(char ch)
Determines whether the specified char value is a letter or a digit, respectively.
boolean isWhiteSpace(char ch)
Determines whether the specified char value is white space according to the Java platform.
boolean isUpperCase(char ch) boolean isLowerCase(char ch)
Determines whether the specified char value is upper or lowercase, respectively.
char toUpperCase(char ch) char toLowerCase(char ch)
Returns the upper or lowercase form of the specified char value.
toString(char ch)
Returns a String object representing the specified character value.
int digit(char ch, int radix)
Returns the numeric value of the character in the specified radix.
03/06/18 40
Các toán tử số học
03/06/18 41
Phép toán 1 ngôi
03/06/18 42
Toán tử quan hệ và bằng nhau
• kết quả trả về luôn là một giá trị boolean
03/06/18 43
Các phép toán điều kiện
03/06/18 44
Các toán tử làm việc với bit
03/06/18 45
Toán tử luận lý
• Các biểu thức có kiểu trả về là boolean, có thể kết hợp lại với nhau bằng các toán tử luận lý như: – AND (& hoặc &&) – OR (| hoặc ||) – XOR (^) – NOT (!)
03/06/18 46
Toán tử gán
• Cú pháp:
– Ví dụ: a +=4; tương đương với a = a+4;
Variable operator = value; Tương ứng với Variable = Variable operator value;
03/06/18 47
Một số toán tử khác (1)
03/06/18 48
Một số toán tử khác (2)
03/06/18 49
Biểu thức & toán tử
• Phép toán trên kiểu chuỗi String:
– Java dùng toán tử + để nối hai chuỗi lại với
System.out.println(name + " is a " + color);
nhau
Độ ưu tiên của các toán tử
03/06/18 50
Tính kết hợp của các phép toán
03/06/18 51
Biểu thức
• Là sự kết nối các biến, các từ khóa hay các kí hiệu để trả về 1 giá trị của 1 kiểu nào đó.
• Giá trị của các biểu thức có thể là số,
chuỗi hoặc kiểu dữ liệu khác
• Các loại biểu thức: – Biểu thức logic – Biểu thức số học – Biểu thức gán
03/06/18 52
Các câu lệnh điều khiển
Kiểu
Từ khóa
Decision making
if-else, switch-case
Looping
for, while, do-while
Exception handling
try-catch-finally, throw
Branching
Break, continue, label:, return
03/06/18 53
Các câu lệnh điều khiển quyết định
03/06/18 54
Cấu trúc rẽ nhánh if (1)
condition
Cú pháp: if (expression) { statement(s) }
true true
false false
statement
03/06/18 55
Cấu trúc rẽ nhánh if (2)
03/06/18 56
Cấu trúc rẽ nhánh if (3)
• Ví dụ:
public static void main(String[] args) {
int testScore = 76; char grade; if (testScore >= 90) {
grade = 'A';
} if (testScore >= 80) {
grade = 'B';
???
} if (testScore >= 70) {
grade = 'C';
} if (testScore >= 60) {
grade = 'D';
} if (testScore >= 50) {
grade = 'E';
} else {
grade = 'F';
} System.out.println("Grade = "+ grade);
}
03/06/18 57
Cấu trúc rẽ nhánh phức: switch (1)
03/06/18 58
Cấu trúc rẽ nhánh phức: switch (2)
• Ví dụ
public static void main(String[] args) {
int month = 2; int numdays = 0; switch (month) {
case 2:
numdays = 28; break;
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
numdays = 31; break;
default: numdays = 30;
} System.out.println("num of day = "+ numdays);
}
03/06/18 59
So sánh giữa if và switch
Demo
03/06/18 60
Các câu lệnh điều khiển lặp
03/06/18 61
Vòng lặp for (1)
03/06/18 62
Vòng lặp for (2)
• Ví dụ:
public static void main(String[] args) {
for(int i=1; i<11; i++){
System.out.println("Count is: " + i);
}
}
for ( ; ; ) {
//vòng lặp vô tận
}
03/06/18 63
For each
Cú pháp:
for (iterable_type iterable_element : iterable) { Statements }
public static void main(String[] args) { int[] aray = { 32, 45, 789, 0, 3 }; for (int element : aray) {
System.out.print(element+" ");
}
}
03/06/18 64
Vòng lặp while (1)
03/06/18 65
Vòng lặp while (2)
Ví dụ:
public static void main(String[] args){ int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; } }
while (true){ // vòng lặp vô tận }
03/06/18 66
Vòng lặp do…while (1)
Thực thi ít nhất 1 lần
03/06/18 67
Vòng lặp do…while (2)
• Ví dụ:
public static void main(String[] args) { int count = 1; do { System.out.println("Count is: " + count); count++; } while (count <= 11); }
03/06/18 68
So sánh while và for
03/06/18 69
Câu lệnh rẽ nhánh
• Các loại câu lệnh rẽ nhánh thường gặp:
– break – continue – return
• continue và break có thể dùng cùng với
label hoặc không – label: dùng để chỉ định chỗ cho các lệnh
continue và break
03/06/18 70
Lệnh break (1)
• Lệnh break có 2 dạng:
– unlabeled form: dùng để thoát ra khỏi vòng
lặp như switch, for, while, or do-while
– labeled form: di chuyển tới vùng đặt label
public static void main(String[] args) {
Unlabled form
int out, in = 0; for (out = 0; out < 10; out++) {
for (in = 0; in < 20; in++) { if (in > 10)
break;
} System.out.println("inside the outer loop: out = " + out + ", in = " + in);
} System.out.println("end of the outer loop: out = " + out + ", in = “ + in);
}
71 03/06/18
Lệnh break (2)
public static void main(String[] args) {
int out, in = 0; outer: for (out = 0; out < 10; out++) {
Labeled form
for (in = 0; in < 20; in++) { if (in > 10)
break outer;
} System.out.println("inside the outer loop: out = " + out + ", in = " + in);
} System.out.println("end of the outer loop: out = " + out + ", in = “ + in);
}
03/06/18 72
Lệnh continue
• Dùng để nhảy qua(skip) vòng lặp (for,
while, do-while,…)
• Lệnh continue cũng có 2 dạng:
– Unlabeled form – Labeled form
03/06/18 73
Unlabeled form
public static void main(String[] args) {
StringBuffer searchMe = new StringBuffer("peter piper picked a peck of pickled peppers"); int max = searchMe.length(); int numPs = 0; System.out.println(searchMe); for (int i = 0; i < max; i++) {
// interested only in p's if (searchMe.charAt(i) != 'p')
Unlabeled form
continue;
// process p's numPs++; searchMe.setCharAt(i, 'P');
} System.out.println("Found " + numPs + " p's in the string."); System.out.println(searchMe);
}
03/06/18 74
Labeled form
public static void main(String[] args) {
// finds a substring(substring) in given string(serchMe) String searchMe = "Look for a substring in me"; String substring = "sub"; boolean foundIt = false; int max = searchMe.length() - substring.length(); test: for (int i = 0; i <= max; i++) {
int n = substring.length(), j = i, k = 0; while (n-- != 0) {
if (searchMe.charAt(j++) != substring.charAt(k++))
continue test;
Labeled form
} foundIt = true; break test;
} System.out.println(foundIt ? "Found it" : "Didn't find it");
}
03/06/18 75
Lệnh return (1)
• Lệnh return có 2 dạng:
– Trả về 1 giá trị:
• return ++count; • Giá trị trả về phải phù hợp với kiểu trả về của hàm
– Không trả vè giá trị nào cả:
• return; • Kiểu trả về của hàm phải là void
03/06/18 76
Lệnh return (2)
public void displayDayOfWeek(int day) {
public boolean seachFirst() {
if (day == 1) {
System.out.println("Sunday"); return;
int[] array = { 10, 5, 9, 3, 8, 5, 8, 5 }; int matchValue = 8; for (int i = 0; i < array.length; i++) {
} if (day == 2) {
if (matchValue == array[i]) return true;
System.out.println("Monday"); return;
} return false; }
} if (day == 3) {
System.out.println("Tueday"); return;
}
}
Trả về giá trị boolean
Không trả về giá trị
03/06/18 77
Try-catch-finally (1)
• Sử dụng khối try, catch, finally để bắt giữ
các ngoại lệ
Khối lệnh có thể ném ngoại lệ
Khối lệnh sẽ thực hiện nếu ngoại lệ xảy ra
Khối lệnh sẽ thực hiện bất chấp ngoại lệ xảy ra hay không
03/06/18 78
Try-catch-finally (2)
public static void method(String s) {
try {
System.out.println(Integer.parseInt(s));
} catch (NumberFormatException e) { System.out.println("wrong fomat");
}
}
03/06/18 79
Tóm tắt dạng câu hỏi Liệt kê 6 kiểu số cơ bản của Java và số bit bộ nhớ sẽ chiếm
dụng của chúng khi lưu trữ trị.
g) 9 << 2 h ) (9 >>3) ? 5 : -3
f) 4 >> 3
Kiểu luận lý (logic) trong java tên là gì? Kiểu ký tự tên là gì? chiếm mấy byte? Biến là gì? Hãy cho biết 3 tính chất của biến. Hãy liệt kê 4 loại toán tử trong java. Hãy cho biết kết qủa của biểu thức sau : a) 4 && 7 b) 4&7 c) 0 || 8 d) 0 | 8 e) 8 ^ 3 Trong java có phát biểu goto hay không ? Mảng là gì ? Mảng in-line là gì ? int a[] = new int { 1,2,3,9,0}; đúng hay sai? System.out.println( 12 & 9); sẽ xuất trị bao nhiêu? Phân tích dòng code: if (5&7>0 && 5|3) System.out(“Hello”) ; int m= System.in.read(); nếu gõ vào phím ‘C’, trị biến m là bao
nhiêu?
03/06/18 80
Bài tập
Viết các chương trình sau: Xuất bảng cửu chương từ 2 đến 9. Xuất trị bình phương, lập phương từ 1 đến
10.
Tạo 1 mảng số int dạng in-line 10 phần tử,
xuất mảng này tăng dần.
Nhập 1 mảng int các số mang trị là mã của các ký tự nhập từ bàn phím. Xuất mảng này dạng chữ rồi xuất mã của chúng. Xuất 100 số Fibonacci đầu tiên. Dãy
Fibonacci : 1,1,2,3,5,8,… 2 số đầu là 1, các số sau bằng tổng 2 số trước nó.
03/06/18 81
Bài tập
• Mô phỏng các phương thức trong lớp
String với mỗi String là một mảng các kí tự (char[]) (MyString)
• Mô phỏng StringTokenizer và các phép
toán trong đó.
• Thực hiện lớp MyDate để lưu trữ ngày
tháng năm với 1 số int duy nhất
03/06/18 82
Bài tập
Class MyString{
private char[] content; public MyString(char[] con); public MyString(String s); public int indexOf(char c); public int lastIndexOf(char c); public int indexOf(String sub);
public int lastIndexOf(String sub); public void insert(int index, String sub); public void replace(String old_s, String new_s); public void replaceAll(String old_s, String new_s);
}
03/06/18 83
Bài tập
public class StringAnalyzer { private String origin; private String delimiter; public StringAnalyzer(String origin, String delimiter) {
. . . . . .
} public boolean hasMoreElement(){
. . . . . .
} public String getNextElement(){
. . . . . .
}
}
03/06/18 84