Bài giảng Lập trình hướng đối tượng (dùng Java) Chương 2 Ngôn ngữ lập trình Java cung cấp cho người học các kiến thức Lịch sử ngôn ngữ Java, giới thiệu các IDE cơ bản, cách biên dịch và chạy chương trình Java, các kiểu dữ liệu và cấu trúc dữ liệu cơ bản trong Java, phương thức trong Java,... Mời các bạn cùng tham khảo.
Trang 1LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trang 2Nội dung
1 Lịch sử ngôn ngữ Java
2 Giới thiệu các IDE cơ bản
3 Cách biên dịch và chạy chương trình Java
4 Các kiểu dữ liệu và cấu trúc dữ liệu cơ bản trong Java
5 Phương thức trong Java
6 Khai báo phương thức
7 Phương thức tĩnh
8 Nạp chồng các phương thức
Trang 3Cơ bản về ngôn ngữ Java
Trang 4Lịch sử ngôn ngữ Java
James Gosling và nhóm kỹ sư của Sun Microsystems bắt đầu dự án ngôn ngữ Java vào tháng 6 năm 1991 để lập trình điều khiển các thiết bị điện tử (tivi, máy giặt, tủ lạnh, …)
Ngôn ngữ nhanh, gọn, hiệu quả và độc lập thiết bị
Ra đời 1995, tên gọi ban đầu “Oak” sau đó đổi tên thành
“Java”
Kế thừa cú pháp của C & đặc trưng Hướng đối tượng của C++
Trang 5Lịch sử ngôn ngữ Java
• Tháng 6/1995 Sun giới thiệu ngôn ngữ Java (Java 1.0)
• 13/11/2006, Sun phát hành Java với phần lớn miễn phí
và phần mềm mã nguồn mở theo các điều khoản GNU, General Public License (GPL)
• Ngày 08/05/ 2007, Sun cung cấp miễn phí code lõi của Java và open-source
Trang 6Lịch sử ngôn ngữ Java
Các phiên bản
• Nền tảng J2SE (Java Standard Edition) tiêu chuẩn
• Nền tảng J2EE (Java Enterprise Applications Edition) cho các ứng dụng doanh nghiệp
• Nền tảng J2ME (Java Mobile Applications Edition) cho các ứng dụng di động
Trang 7Ngôn ngữ Java
• Là một ngôn ngữ hướng đối tượng (Object Oriented
Programming) đầy đủ: không thể viết theo hướng thủ tục
• Cho phép tạo Application hoặc Applet (chạy trên trình duyệt có hỗ trợ Java)
• Sử dụng 2 cơ chế: Interpreter | Compiler
• Viết một lần (Write Once), Chạy ở mọi thiết bị khác nhau (Run Anywhere)
Trang 8Đặc điểm ngôn ngữ Java
1 Đơn giản (Simple)
2 Hoàn toàn hướng đối tượng (Object Oriented)
3 Độc lập phần cứng và hệ điều hành (Platform
independent)
4 Bảo mật (Secure)
5 Mạnh mẽ (Robust)
6 Đa luồng (Multithreading)
7 Hiệu suất cao (High performance)
8 Phân tán (Distributed)
9 Linh động (Dynamic)
Trang 9Đặc điểm ngôn ngữ Java
Đơn giản: Java được thiết kế để dễ học, quen thuộc Nếu
hiểu được những khái niệm cơ bản về OOP, sẽ dễ dàng làm chủ Java
Loại bỏ những đặc trưng phức tạp:
Con trỏ
Định nghĩa chồng toán tử
Đa kế thừa thay bằng interface
Loại bỏ struct và union
…
Trang 10Đặc điểm ngôn ngữ Java
• Hướng đối tượng: Mọi thứ là một đối tượng Java có
thể dễ dàng mở rộng kể từ khi nó được dựa trên mô hình đối tượng
• Độc lập phần cứng và hệ điều hành: Khi Java được
biên dịch, nó không được biên dịch vào một nền tảng
cụ thể mà là bytecode Bytecode này được thông dịch bởi máy ảo (JVM) tùy vào nền tảng mà nó đang thực thi Không cần biên dịch lại mã nguồn
Trang 11Đặc điểm của ngôn ngữ Java
• Bảo mật: Quản lý thực thi chương trình ở nhiều mức
1 Dữ liệu và phương thức được đóng gói bên trong lớp
2 Trình biên dịch kiểm soát mã an toàn và kiểm soát
tuân thủ đúng quy tắc của Java
3 Trình thông dịch kiểm soát bytecode đảm bảo quy tắc
an toàn trước khi thực thi
4 Kiểm soát việc nạp vào bộ nhớ, giới hạn truy xuất
trước khi nạp vào hệ thống
Trang 12Đặc điểm của ngôn ngữ Java
• Mạnh mẽ: Java nỗ lực loại trừ tình huống dễ bị lỗi
bằng cách nhấn mạnh chủ yếu vào việc kiểm tra lỗi thời điểm biên dịch và thực thi
Khai báo kiểu dữ liệu tường minh
Không dùng con trỏ và phép toán con trỏ
Kiểm soát việc truy xuất ngoài phạm vi dữ liệu mảng
Cấp phát và giải phóng bộ nhớ được thực hiện tự động (garbage collection)
Cơ chế bẫy lỗi giúp kiểm soát và đơn giản trong xử
lý lỗi và phục hồi sau lỗi
Trang 13Đặc điểm của ngôn ngữ Java
• Đa luồng: Có thể viết chương trình có thể làm nhiều việc
cùng một lúc Cho phép các nhà phát triển xây dựng các ứng dụng tương tác chạy đồng thời & đồng bộ
• Hiệu suất cao: Với việc sử dụng các trình biên dịch
Just-In-Time (bytecode machine code)
• Phân tán: Java được thiết kế để hỗ trợ ứng dụng chạy
trên mạng, cho môi trường phân tán, chạy trên nhiều nền khác nhau của Internet
Trang 14Đặc điểm của ngôn ngữ Java
• Linh động: Java được coi là linh động hơn so với C
hoặc C++ vì nó được thiết kế để thích ứng với môi trường phát triển mở
• Các chương trình Java có thể xử lý số lượng lớn thông tin thực thi mà có thể được dùng để xác minh và giải quyết các truy cập đến các đối tượng trong thời gian thực thi
Trang 15Các thành phần trong môi trường Java
1 Java language
2 Bytecode definitions
3 Java/ Sun Class libraries
4 The Java Virtual Machine (JVM)
5 The structure of class file
Trang 16Chương trình
Java (file.java)
javac.exe : compiler
Dùng cơ chế Time thông dịch bytecode thành lệnh
Just-In-máy cụ thể
Trang 17Java Run-time Environment (JRE) Compile-Time
Trang 18Java Run-time
Environment (JRE) Run-Time
Trang 20Các công cụ chính trong JDK
Trong thư mục BIN của JDK có:
• Javac (Java Compiler): Dịch source code Independent Bytecode
• java : Thực thi class file trong JVM
• appletviewer : cho phép chạy applet mà không cần Browser
Trang 21Các IDE cơ bản
• Netbeans: miễn phí và open-source
http://www.netbeans.org/index.html
• Eclipse: open-source http://www.eclipse.org/
• Thiết lập môi trường làm việc cho Java sau khi cài đặt, ví dụ
Windows: Thêm vào Path ‘c:\Program Files\java\jdk\bin’
Trong Linux, UNIX,Solaris, FreeBSD: Thêm vào cuối
file bashrc: ‘export PATH=/path/to/java:$PATH'
Kiểm tra xem cài đặt thành công? dùng lệnh
javac -version java -version
Trang 22Sử dụng IDE Eclipse
• Tạo mới Project
Trang 24Sử dụng IDE EclipseTạo mới class
Trang 26Sử dụng IDE Eclipse
Trang 27Sử dụng IDE Eclipse
• Viết code
Trang 28Sử dụng IDE Eclipse
Trang 30• Quy định với định danh:
• Không đặt trùng với từ khóa
• Không bắt đầu bằng chữ số
• Ký tự được phép sử dụng: chữ cái, chữ số, $, _
• Phân biệt chữ hoa, chữ thường
age, $salary, _value, 1_value 123abc, -salary
Trang 31Keyword
Trang 32Cách đặt tên trong Java
Phân biệt hoa thường (Case Sensitivity): Hello hello
Tên lớp: Ký tự đầu của mỗi từ phải viết IN HOA
Ví dụ: class MyFirstJavaClassTên phương thức: từ đầu viết chữ thường, những từ sau viết IN HOA ký tự đầu
Ví dụ: public void myMethodName()Tên chương trình: Đặt tên trùng khớp với tên lớp
Ví dụ: Lớp 'MyFirstJavaProgram’
sẽ được lưu là 'MyFirstJavaProgram.java'Hằng số viết IN HOA
Ví dụ: MAX_LINE
Trang 33Các kiểu dữ liệu cơ bản
• Biến là một mục dữ liệu được đặt tên
• Cách khai báo một biến:
type name [= <giá trị khởi tạo>];
byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; char aChar = 'S';
boolean aBoolean = true;
Trang 34Các kiểu dữ liệu cơ bản
Integers
byte Byte-length integer 8-bit two’s
complement short Short integer 16-bit two’s
numbers
float Single-precision floating
double Double-precision floating
Other types
char A single character 16-bit Unicode
character boolean A boolean value
(true/false) true or false
Trang 35Các kiểu dữ liệu cơ bản
Literal Value Kiểu dữ liệu
Trang 36Phạm vi của biến
Trang 38% op1 % op2 Phép lấy phần dư của op1 /
op2
Chú ý với phép toán %: Dùng cho cả số thực
Quy tắc: a % b = (dấu của a) abs(a) % abs(b);
Ví dụ: -5 % 3 = -2; -5 % -3 = -2; 5 % 3 = 2; 5 % -3 = 2
Trang 40Phép toán số học (viết tắt)
++ op++ Tăng op lên 1; trả về giá trị của op
trước khi tăng ++ ++op Tăng op lên 1; trả về giá trị của op
sau khi tăng op Giảm op đi 1; trả về giá trị của op
trước khi giảm op Giảm op đi 1; trả về giá trị của op sau
khi giảm
Ví dụ 1: a = 5; b = a++ + ++a + a++; //a = ?, b = ?;
Ví dụ 2: a = 5; b = a + ++a + a++; //a = ?, b = ?;
Trang 41Phép toán quan hệ
Operato
> op1 > op2 Trả về true nếu op1 lớn hơn op2
>= op1 >= op2 Trả về true nếu op1 lớn hơn hoặc bằng
op2
< op1 < op2 Trả về true nếu op1 nhỏ hơn op2
<= op1 <= op2 Trả về true nếu op1 nhỏ hơn hoặc bằng
op2
== op1 == op2 Trả về true nếu op1 bằng op2 (hoặc nếu
2 biến đều reference đến 1 object)
!= op1 != op2 Trả về true nếu op1 khác op2 (hoặc nếu
2 biến reference đến 2 object khác nhau)
Trang 42Phép toán điều kiện
Operato
&& op1 && op2 Trả về true nếu op1 và op2 true Không
lượng giá op2 nếu op1 false
|| op1 || op2 Trả về true nếu op1 hoặc op2 true
Không lượng giá op2 nếu op1 true
! !op Trả về true nếu op false
Trang 43Phép toán shift trên bit
Operato
<< op1 << op2 Dịch trái op1 op2 bits.
>> op1 >> op2 Dịch phải op1 op2 bits Lấp đầy bên bên
trái bằng bit dấu (Signed right shift).
>>> op1 >> op2 Dịch phải op1 op2 bits Lấp đầy bên trái
bằng 0 (Unsigned right shift).
• Ví dụ: 13 >> 1: 6; -13 >> 1: -6; -13 >>> 1: 2147483641;
1 << 31: -2147483648
• Trước khi thực hiện các phép toán, các kiểu dữ liệu integer (byte, short, char) được chuyển thành kiểu int Và kết quả trả về là kiểu int (trừ các phép toán ++, , op=)
Trang 44Phép toán trên bit
Operato
& op1 & op2 AND bit Chỉ áp dụng cho kiểu integeral.
| op1 | op2 OR bit Chỉ áp dụng cho kiểu integeral.
^ op1 ^ op2 XOR bit Chỉ áp dụng cho kiểu integeral.
~ ~op Lấy bù bit (complement) (0->1, 1->0)
Chỉ áp dụng cho kiểu integral.
Trang 45Phép toán gán
Operato
= op1 = op2 Gán giá trị op2 cho op1 Trả về giá trị
của op1 sau khi gán.
op= op1 op= op2 Viết tắt của op1 = op1 op op2 Có một
lợi thế: không phải ép kiểu.
Trang 46methods Khai báo danh sách các biến.
(type) (type)op Ép kiểu
new Tạo đối tượng Tạo đối tượng/array mới.
instance
of op1 instanceof op2 Return true nếu op1 là một thể hiện của op2 (op2 là class type, interface
type, array type).
Trang 47Biểu thức
• Biểu thức là một chuỗi các biến, toán tử, lời gọi phương thức được tạo thành theo đúng cú pháp của ngôn ngữ Kết quả trả về một giá trị
Ví dụ:
aChar = ‘S’, “The string “ + “value”, Character.isUpperCase(aChar)
• Thứ tự lượng giá các toán hạng trong biểu thức: từ trái -> phải Sau
đó phép toán được thực hiện dựa trên thứ tự tính toán của toán tử
Trang 493. Gọi phương thức: System.out.println(“String”);
4. Tạo đối tượng: Integer obj = new Integer(4);
• Câu lệnh khai báo: double aValue = 933.24;
• Câu lệnh điều khiển: for, if, while, do while, switch,
return, break, continue
Trang 50Hiển thị dữ liệu
System.out.println(): Hiển thị dữ liệu và xuống dòng
System.out.print(): Hiển thị dữ liệu
System.out.printf(): Hiển thị dữ liệu có định dạng System.out.format(): Hiển thị dữ liệu có định dạng
Dùng toán tử + để nối các dữ liệu khi hiển thị
Trang 52Nhập dữ liệu từ bàn phím – java.io.*
1 Đọc dữ liệu vào bộ đệm:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
2 Chuyển dữ liệu từ bộ đệm vào xâu
Trang 53Nhập dữ liệu từ bàn phím – java.io.*
Trang 54Nhập dữ liệu từ bàn phím – java.util.Scanner
Trang 55Cấu trúc lệnh điều khiển trong Java
Trang 57int n = 10, m = 10;
n = m + 1; //n = 11}
m = m + 1; //Sai cú pháp}
Trang 61Cấu trúc rẽ nhánh if…else
Trang 62Cấu trúc rẽ nhánh if, if…else
Áp dụng:
• Cho bài toán kiểm tra số chính phương
• Đầu vào: số nguyên n
• Đầu ra: cho biết n là chính phương (căn bậc 2 của n là nguyên) hay không?
Trang 63Cấu trúc rẽ nhánh if…else lồng nhau
if (bt điều kiện 1){ //Nếu điều kiện 1 đúng
else{ //Không điều kiện nào thoả
khối lệnh cho trường hợp còn lại;
}
Trang 64Cấu trúc rẽ nhánh if…else lồng nhau
• Xếp loại học tập cho học sinh theo bảng sau
Điểm trung bình (dtb) Xếp loại
Từ 5.0 đến dưới 7.0 Trung bình
Từ 7.0 đến dưới 8.o Khá
Trang 65Cấu trúc rẽ nhánh if…else lồng nhau
Trang 66Cấu trúc rẽ nhánh if else lồng nhau
Áp dụng
• Cho bài toán giải phương trình bậc nhất
• Đầu vào: số nguyên a và b
• Đầu ra: nghiệm của phương trình bậc nhất: ax + b = 0
Trang 67• giá trị có kiểu byte,
short, char int, String
• break thoát khỏi switch
Trang 69Cấu trúc switch…case
Áp dụng: Cho bài toán đọc một số nguyên gồm 3 chữ số
• Đầu vào: số nguyên n gồm 3 chữ số
• Đầu ra: số n ghi bằng chữ
Trang 71} while(bt điều kiện);
Lặp khi điều kiện còn đúng Kiểm tra điều kiện sau khi
thực hiện lệnh (thực hiện ít nhất 1 lần)
Trang 72Cấu trúc lặp while, do…while
Kết quả
Trang 73Cấu trúc lặp while, do…while
Kết quả
Trang 74while vs do…while
Nếu dùng while
Nếu dùng do…while
Trang 77Cấu trúc lặp for
Áp dụng: Viết lại bài toán tính giai thừa dùng cấu trúc lặp for
Trang 80if (j == 2) continue outer;
if (j == 3) break;
if (j == 4) break outer;
} }
outer System.out.println(“ sum = “ + sum);
Trang 81Cấu trúc dữ liệu cơ bản trong java
Trang 82Cấu trúc mảng 1 chiều - Array
• Mảng là nhóm giá trị có cùng kiểu, kề nhau, cùng tên gọi, truy xuất phần tử bằng chỉ số đi từ 0
• Định nghĩa có chỉ định số phần tử (size)-> cấp bộ nhớ
char ch[] = new char [5];
• Định nghĩa và khởi tạo ban đầu (in-line initialization):
int a[] = { 1, 4, 12, 7, 8};
//hoặc int [] a = { 1, 4, 12, 7, 8};
Trang 83Toán tử new sẽ xóa bộ nhớ, các giá trị = 0
!!! Sau khi chỉ định kích thước thì kích thước này sẽ không đổi (thuộc tính length của mảng)
Trang 84Ví dụ tìm max trong mảng 1 chiều
Trang 85Bài tập
Viết chương trình xoá phần tử có giá trị x nếu có
• Đầu vào: mảng 1 chiều số nguyên a, số nguyên x
• Đầu ra:
• mảng sau khi xoá x (nếu có)
• xuất mảng theo giá trị tăng dần
Trang 87{17, 18, 19, 20}};
//Có thể không cần chỉ định //số dòng và số cột cho
Trang 89Mảng 2 chiều
Trang 90Bài tập
Cho bài toán nhập vào ma trận đối xứng cho đồ thị vô hướng có trọng số
• Đầu vào: số đỉnh của đồ thị (n)
• Đầu ra: ma trận đối xứng
Trang 91Xâu ký tự - String
• Là một lớp trong Java
• Khai báo
• String variable = new String(literalString);
• String varialbe = new String(char[] charArr)
Trang 92String toLowerCase() chuyển thành chữ thường String s = String s1 = s.toLowerCase();"Lap trinh Java";
//s1 = “lap trinh java”
String toUpperCase() chuyển thành chữ hoa String s = String s1 = s.toUpperCase();"Lap trinh Java";
//s1 = “LAP TRINH JAVA”
Trang 93= 0: 2 xâu giống nhau
< 0: xâu nhỏ hơn anotherString
> 0: xâu lớn hơn anotherString
String s1 = "Lap trinh Java"; String s2 = "Huong doi tuong"; String s3 = "lap trinh java";
int n1 = s1.compareTo(s2); //n1>0
int n = s1.compareTo(s2);
//n=0
Trang 94boolean
equalsIgnoreCase(String
anotherString)
so sánh với một đối tượng bất kỳ, không phân biệt chữ hoa chữ thường
char[] toCharArray chuyển xâu thành mảng ký tự String s1 = char []arr = s1.toCharArray();"abcd";
//arr = ‘a’, ‘b’, ‘c’, ‘d’
Trang 95int indexOf(String str) trả về vị trí của str trong xâu
String s1 = "Lap trinh OOP Java"; String s2 = "Java";
int n = s1.indexOf(s2);
//n = 14
Trang 96Các phương thức của String
String replace (char
oldChar, char newChar)
String s1 = "huong doi tuong"; s1 = s1.replace("ng", "mh"); //s1 = “huomh doi tuomh”
String s1 = "huong doi tuong"; s1=s1.replaceFirst("ng", "mh"); //s1 = “huomh doi tuong”
String[] split (String
regex) chia xâu thành các xâu con bởi xâu regex
String s1 = "Lap,trinh;Java"; String arr[] = s1.split("[ ,;]"); //arr = “Lap”, “trinh”, “Java”
String trim() trả về xâu được loại bỏ dấu cách ở đầu và cuối
Trang 97char []data = {'a', 'b', 'c', 'd'};
char []data = {'a', 'b', 'c', 'd'};
String s = String.valueOf(data, 1, 2);
//s = “bc”
static String format()
trả về xâu hiển thị giá trị của đối tượng bất kỳ theo định dạng
Trang 98Bài tập
Cho bài toán tìm từ dài nhất
• Đầu vào: một câu s
• Đầu ra: từ có độ dài dài nhất
Lưu ý: Các từ có thể cách nhau bởi khoảng trắng, dấu chấm câu
Trang 99Bài tập
Cho bài toán đảo các từ trong câu
• Đầu vào: một câu s
• Đầu ra: câu s sau khi đảo các từ
• Ví dụ:
s = “ca an kien”
đảo từ: “kien an ca”