LẬP TRÌNH JAVA
Nguyễn Hữu Thể
JAVA CƠ BẢN
1
java - s¬ l¦îc vÒ ng«n ng÷
LÞch sö ph¸t triÓn:
1990: Ng«n ng÷ Oak ®ưîc t¹o ra bëi
James Gosling trong dù ¸n Green cña Sun MicroSystems nh»m ph¸t triÓn phÇn mÒm cho c¸c thiÕt bÞ d©n dông.
1995: Oak ®æi tªn thµnh Java.
2
Chương trình dịch Java
“Write One, Run Any Where”
3
Chương trình dịch Java
4
Java development kit (JDK)
Bé ph¸t triÓn øng dông java gåm:
javac: tr×nh biªn dÞch ng«n ng÷ java thµnh m· byte code
java (m¸y ¶o java - Java Virtual Machine): Th«ng dÞch m·
bytecode cña c¸c chư¬ng tr×nh kiÓu application thµnh m· thùc thi cña m¸y ®Ých.
appletviewer: Bé th«ng dÞch thùc thi applet.
javadoc: T¹o tµi liÖu tù ®éng.
jdb: Gë rèi.
rmic: T¹o stub cho øng dông kiÓu RMI.
rmiregistry: Phôc vô tªn (Name Server) trong hÖ thèng RMI
5
Download JDK
6
Download JDK
7
Tool
Notepad
NotePad ++
Netbeans
Eclipse
8
Tool
Notepad
NotePad ++
Netbeans
Eclipse
9
Tool
Eclipse
10
Chương trình Java đầu tiên
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
11
Kiểu dữ liệu cơ sở
Là các dữ liệu được xác định trong ngôn ngữ
12
KiÓu m¶ng
// Long syntax
int[] numbers = new int[5] {20, 1, 42, 15, 34};
// Short syntax
int[] numbers2 = {20, 1, 42, 15, 34};
int[][] numbers = new int[3][3];
int[][] numbers2 = {{2, 3, 2}, {1, 2, 6}, {2, 4, 5}};
13
KiÓu m¶ng
int[] anArray; // declares an array of integers
anArray = new int[10]; //create an array of integers
anArray[0] = 100; // initialize first element
anArray[1] = 200; // initialize second element
anArray[2] = 300; // etc.
Mảng kiểu chuỗi
String[][] names = {{"Mr. ", "Mrs. ", "Ms. "},
{"Smith", "Jones"}};
String a = names[0][0]
//Mr
String b = names[1][0]); //Smith
14
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.
15
Chuyển đổi kiểu dữ liệu
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
16
Chuyển đổi kiểu dữ liệu (2)
17
É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
18
Ép kiểu tường minh
Khi cần chuyển sang kiểu có độ chính xác cao hơn
19
Định dạng nhập xuất
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
20
Đị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);
}
21
Lớp Scanner
Cho phép người dùng đọc giá trị của một vài kiểu
Scanner scaner = new Scanner(System.in);
Đối tượng InputStream
public static void main(String[] args) { }
Một số phương thức của Scanner:
22
Dãy Escape
23
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 (!)
24
Toán tử
25
Toán tử
26
Toán tử
27
Toán tử
28
Các toán tử làm việc với bit
Phép toán trên bit:
& , | , ^ , << , >> ,>>>, ~ int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0; c = a & b; /* 12 = 0000 1100 */
c = a | b; /* 61 = 0011 1101 */
c = a ^ b; /* 49 = 0011 0001 */
c = ~a; /*-61 = 1100 0011 */
c = a << 2; /* 240 = 1111 0000 */
c = a >> 2; /* 15 = 1111 */
c = a >>> 2; /* 15 = 0000 1111 */
29
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 nhau
System.out.println(name + " is a " + color);
Độ ưu tiên của các toán tử
30
Tính kết hợp của các phép toán
31
Từ khóa
Từ khóa abstract
Ý nghĩa Dùng để khai báo lớp, hàm trừu tượng.
Được sử dụng để kết thúc vòng lặp hoặc cấu trúc switch.
boolean Kiểu dữ liệu logic
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
continue Được dùng trong vòng lặp để bắt đầu một vòng lặp mới.
default Được sử dụng trong lệnh switch.
do Được sử dụng trong vòng lặp điều kiện sau.
32
Từ khóa (2)
Ý nghĩa
Từ khóa double
Kiểu dữ liệu số thực.
else Khả năng lựa chọn thứ 2 trong câu lệnh If.
extends Chỉ rằng một lớp được kế thừa từ một lớp khác.
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.
finally
Phần cuối của khối xử lý ngoại lệ.
Câu lệnh lặp.
Kiểu số thực. float
for
goto Nhảy tới dòng lệnh bất kì đã được đặt nhãn
if Câu lệnh lựa chọn.
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.
33
Từ khóa (3)
Từ khóa instance of
Ý nghĩa 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.
Kiểu số nguyên. long
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ề
34
short Kiểu số nguyên.
Từ khóa (4)
Từ khóa static
Ý nghĩa Dùng để khai báo biến, thuộc tính tĩnh.
super Truy xuất đến lớp cha.
switch Lệnh lựa chọn.
synchronized Một phương thức độc quyền truy xuất trên một đối tượng.
this Ám chỉ chính lớp đó.
throw Ném ra ngoại lệ.
throws Khai báo phương thức ném ra ngoại lệ.
true
Giá trị logic.
try Sử dụng để bắt ngoại lệ.
void Dùng để khai báo một phương thức không trả về giá trị.
while Dùng trong cấu trúc lặp.
35
java - øng dông kiÓu application (2)
VÝ dô øng dông HelloWorld:
§Þnh nghÜa trong líp HelloWorld
Chøa trong tËp tin HelloWorld.java
Chó gi¶i: System.out.print() : in ra mµn h×nh
36
vÝ dô (1)
In ra mµn h×nh:
Sö dông phư¬ng thøc System.out.print(arg1 + arg2+ ...+argn);
arg1, arg2, argn: c¸c tham sè cã kiÓu tïy ý.
37
vÝ dô (2)
§äc ký tù tõ bµn phÝm:
Sö dông phư¬ng thøc int System.in.read();
Gi¸ trÞ tr¶ vÒ lµ thø tù trong b¶ng m· ascii cña c¸c ký tù nhËn
tõ bµn phÝm.
38
java - cÊu tróc ®iÒu khiÓn
LÖnh if - else
PhÐp to¸n ?
LÖnh switch
While
Do - while
For
Break
Continue
Return
39
LÖnh if - else
if ( condition ) { Task for the true condition; } else { Task for the false condition; }
40
PhÐp to¸n ?
PhÐp to¸n ?:(condition) ? Operation1 : Operation2; <=> if ( condition == true ) { return value of Operation1; }
else { return value of Operation2 ;}
41
LÖnh switch
switch ( variable ) {
case value1 : { Task 1; break; }
case value2 : { Task 2; break; }
. . .
default: Task n;
}
42
LÖnh switch
43
while
while (condition == true){
The condition is true, so we have to do this task;
}
44
do - while
do {
Do this task until the condition gets false;
} while (condition ==true) ;
45
for
for (khëi t¹o; ®iÒu kiÖn; bưíc t¨ng/gi¶m){
The condition is true, so we do this task;
operation2;
}
46
LÖnh break
Vßng lÆp sÏ kÕt thóc khi gÆp lÖnh break;
47
LÖnh continue
C¸c lÖnh sau lÖnh continue sÏ bÞ bá qua, mét chu kú lÆp míi
b¾t ®Çu.
48
§æi chuçi thµnh sè
49
Truyền đối số qua dòng lệnh
Đối số của chương trình
C¸c ®èi sè ®a vµo chư¬ng tr×nh c¸ch nhau kho¶ng tr¾ng trªn dòng
lÖnh.
C¸c ®èi sè chøa trong mét m¶ng kiÓu chuçi (String) : args.
Sè lưîng ®èi sè chØ ra bëi thuéc tÝnh length cña m¶ng.
50
Try-catch-finally
Sử dụng khối try, catch, finally để bắt giữ các 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
Khối lệnh có thể ném ngoại lệ
51
Chuỗi (String)
Java hỗ trợ Unicode mỗi kí tự dài 16 bit Ví dụ hằng chuỗi
System.out.println(“Hello world”);
Ghép chuỗi:
Dùng các toán tử + và += để ghép chuỗi.
Ví dụ:
double distance = 45.5; System.out.println("Distance = "+ distance +" miles.");
Distance = 45.5 miles.
Chuỗi
Khai báo và sử dụng kí tự
char có độ dài 2 bytes và chứa các số nguyên không dấu. Hằng kí tự được biểu diễn trong dấu nháy đơn (’) Có thể nhập các kí tự đơn bằng dãy escape sequence \uxxx chỉ
định thứ tự theo thập lục phân.
char c = '\u0a76'; System.out.println("Char = "+ c);
String - Constructor
public String() ; public String(String original); public String(char value[]); public String(char value[], int offset, int count); public String(int[] codePoints, int offset, int count); public String(byte bytes[], int offset, int length, String charsetName); public String(byte bytes[], int offset, int length, Charset charset); (1.6) public String(byte bytes[], String charsetName); public String(byte bytes[], Charset charset); (1.6) public String(byte bytes[], int offset, int length); public String(byte bytes[]) public String(StringBuffer buffer); public String(StringBuilder builder); public String(byte ascii[], int hibyte, int offset, int count); public String(byte ascii[], int hibyte);
String
Ví dụ:
String s = new String();
Chú ý:
• Kí tự trong Java là kí tự 16bit, không phải ASCII 8 bit
• Các encoding (charset): các chế độ mã hóa kí tự nền được sử
dụng trong hệ thống để chuyển đổi kí tự ASCII thành Unicode.
– VD: UTF-8, UTF-16, US-ASCII, ISO-8859-1, …
Chiều dài =0
Các phương thức chuỗi String
Demo:
Phương thức kiểm tra lớp String
• length(), charAt(), getChars(..), getBytes(…), hashCode()
Phương thức so sánh lớp String
• equals(…), equalsIgnoreCase(…), compareTo(…), compareToIgnoreCase (…), regionMatches(…), startsWith(…), endWith(…) Phương thức lập chỉ mục lớp String • indexOf(…), lastIndexOf(…) Phương thức chuyển đổi lớp String
• substring(…), concat(…), replace(…), toLowerCase(…),
toUpperCase(…), trim(), toCharArray(…), intern()
Các phương thức chuỗi
Demo
Tính dung lượng và chiều dài lớp StringBuffer:
• length(), capacity(), ensureCapacity(…), setLength(…)
Phương thức char của StringBuffer
• charAt(…), getChars(…), setCharAt(…)
Nối thêm lớp StringBuffer
• append(…) Xóa, thay thế
• delete(…), replace(…)
Chuỗi con
• substring(…)
Chèn lớp
• insert(…)
Khác
• reverse(), toString(), readObject(…)
Lớp Character
58
Ví dụ
Các kí số Character
Character rất hữu ích khi: chuyển đổi kí tự thành số nguyên trong
1 cơ số.