Các câu lệnh nhập xuất cơ bản• Cách 1: Dùng BufferReader dùng phương thức read hoặc readLine, có ngoại lệ IOException – Ta phải khai báo một BufferReader – Dữ liệu nhập vào luôn luôn là
Trang 1Người biên soạn: Hồ Quang Thái (MSCB: 2299)
BM Công Nghệ Phần Mềm, Khoa CNTT&TT
Email: hqthai@cit.ctu.edu.vn
Số tín chỉ: 2 (20 LT + 20TH)
Trang 2Ngôn ngữ Lập trình JAVA
Trang 5/**
* I think this class is possibly the most amazing thing you will
* ever see Let me tell you about my own personal vision and
* motivation in creating it.
* <p>
* It all began when I was a small child, growing up on the
* streets of Idaho Potatoes were the rage, and life was good
Trang 6• Thông tin Javadoc sẽ được hiển thị trong phần gợi ý khi viết code
Trang 7• Bảng các tag @ có trong Javadoc
@see Tên lớp liên kết mô tả cho phần
See also (Xem thêm)
Class, method, or variable
@author Tên tác giả Class
@version Chuỗi phiên bản Class
@param Tên tham số và mô tả Method
@return Mô tả giá trị trả về Method
@exception Tên ngoại lệ và mô tả Method
@deprecated Cho biết một mục đã bị lỗi thời
hoặc có một mục khác thay thế
Class, method, or variable
@since Ghi chú phiên bản API khi mục này
được thêm vào
Variable
Trang 8System.out.print(“Hello World !!”);
System.out.println(“Hello World !!”);
• Ngoài ra cũng có thể sử dụng System.out printf() tương tự như C và C++
Trang 10Các câu lệnh nhập xuất cơ bản
• Có 2 phương pháp để nhập giá trị từ bàn phím:
Trang 11Các câu lệnh nhập xuất cơ bản
• Cách 1: Dùng BufferReader dùng phương thức
read() hoặc readLine(), có ngoại lệ IOException
– Ta phải khai báo một BufferReader
– Dữ liệu nhập vào luôn luôn là chuỗi ký tự, ta phải chuyển đổi đến kiểu cần thiết
// Dòng này không cần thiết
// System.in là dòng dòng dữ liệu từ bàn phím
InputStreamReader rdr = new InputStreamReader(System.in);
// Dùng InputStreamReader là dữ liệu từ bàn phím
BufferedReader reader = new BufferedReader(rdr);
// Lấy dữ liệu nhập, luôn luôn là chuỗi
String in = reader.readLine();
// transfer that String to an integer
int number = Integer.parseInt(in);
Trang 12Các câu lệnh nhập xuất cơ bản
// much easier declaration
Scanner scan = new Scanner(System.in);
int number = scan.nextInt();
Trang 14• Tên không được trùng với từ khóa.
và count là 2 tên khác nhau.
Trang 17• Java chia kiểu dữ liệu ra làm 2 loại: Kiểu sơ cấp chuẩn (Primitive
Types) và kiểu tham chiếu (Reference Types)
Chuyên đề ngôn ngữ lập trình 2 - Java
Trang 18Các kiểu tham chiếu
• Object: là kiểu cơ sở của mọi kiểu khác.
• String: là kiểu tham chiếu có sẵn cho phép các biến kiểu này có thể lưu trữ dữ liệu chuỗi ký tự.
• Class: là kiểu do người lập trình định nghĩa
• Interface: kiểu do người lập trình định nghĩa
• Array: kiểu do người lập trình định nghĩa cho phép các biến kiểu này chứa các phần tử là
những giá trị cùng kiểu
Trang 19KIỂU DỮ LIỆU
• Kiểu sơ cấp chuẩn (primitive types):
• Kiểu tham chiếu (Reference Types): Là kiểu do người dung tự định nghĩa.
Chuyên đề ngôn ngữ lập trình 2 - Java
Trang 20Kiểu số nguyên
int myHex = 0xF; // hexadecimal (base 16)
int myOct = 07; // octal (base 8)
Trang 21Kiểu số thực
• Lưu trữ số thực có dấu chấm động
• Chuyển đổi kiểu
• Số nguyên viết dưới dạng số mũ khoa học
• Chú ý rằng trong Java, các giá trị thực đều được lưu thành
double Nếu muốn gán 1 giá trị thực cho kiểu float, cần
Trang 22CHAR, BOOL, PHẠM VI BIẾN
• Kiểu Char mang ký tự giá trị Unicode
• Kiểu Bool
• Phạm vi biến, quy định biến trong và biến
ngoài được quy định như C và C++
char c = '3'; // Unicode char
char myChar = '\u0000'; // \u0000 to \uFFFF
bool b = true; // bool value
Trang 25Toán tử tăng giảm
• Toán tử dùng để tăng hoặc giảm 1 đơn vị
• Cả 2 toán tử này đều có thể sử dụng trước và sau một biến
Trang 26Toán tử so sánh
• Toán tử luôn trả về giá trị đúng hoặc sai của một biểu thức
• Toán tử logic, là toán tử kết hợp && và ||
bool x = (2 == 3); // false // equal to
x = (2 != 3); // true // not equal to
x = (2 > 3); // false // greater than
x = (2 < 3); // true // less than
x = (2 >= 3); // false // greater than or equal to
x = (2 <= 3); // true // less than or equal to
bool x = (true && false); // false // logical and
x = (true || false); // true // logical or
x = !(true); // false // logical not
Trang 28Thứ tự ưu tiên của các toán tử
Trang 29• Khai báo và khởi tạo biến string
• Để nối chuỗi, chúng ta dung toán tử + hoặc +=
• Dùng ‘\n’ để xuống dòng
String a = "Hello" ; String a = new String( "Hello" );
String b = a + “ World” ; // Hello World
a += “ World” ; // Hello World
String c
= “Hello ” +
“World”;
string c = “Hello\nWorld”;
Trang 30• Dưới đây là bảng các ký tự đặt biệt
\uFFFFF Ký tự unicode
Trang 31String b = a.replace( “i”,“o”); // Strong
b = “My ” concat(a); // My String
b = a.substring(0, 3); // Str
b = a.toUpperCase(); // STRING
int i = a.length(); // 6
StringBuffer sb = new StringBuffer( "Hello" );
sb.Append(“ World”); // Hello World
sb.Remove(0, 5); // World
sb.Insert(0, “Bye”); // Bye World
string s = sb.ToString(); // Bye World
Trang 32• Mảng là 1 tập hợp các phần tử có cùng kiểu dữ liệu, mỗi phần tử có một vị trí xác định.
Trang 33Khai báo và khởi tạo mảng
• Do mảng thuộc kiểu tham chiếu nên ta cần khai báo và khởi tạo đối tượng mảng
• Khai báo:
• Khởi tạo đối tượng mảng:
• Truy xuất giá trị:
• Ta cũng có thể vừa khai báo vừa gán giá trị
Trang 35• Trong Array thông thường thì số lượng phần tử phải được xác định trước ArrayList ra đời để giải quyết vấn đề này ArrayList hỗ trợ sắp xếp và các hàm tiện
ích khác.
• Dữ liệu thành viên trong ArrayList phải là kiểu tham
chiếu
// Khai báo và khởi tạo một ArrayList
java.util.ArrayList a = new java.util.ArrayList();
a.add( "Hi" ); // Thêm một phần tử
a.set(0, "Hello" ); // Thay đổi phần từ đầu tiên
a.remove(0); // Xóa phần tử đầu tiên
a.add("Hello World"); // Thêm lại một phần tử
String s = (String)a.get(0); // Hello World
Trang 36• Trong Array thông thường thì số lượng phần
tử phải được xác định trước ArrayList ra đời
để giải quyết vấn đề này ArrayList hỗ trợ sắp
xếp và các hàm tiện ích khác
• Dữ liệu thành viên trong ArrayList phải là kiểu
tham chiếu// Khai báo và khởi tạo một ArrayList
ArrayList a = new ArrayList();
a.Add( "Hi" ); // Thêm một phần tử
a.Insert(0, "Hello" ); // Thay đổi phần từ đầu tiên
a.RemoveAt(0); // Xóa phần tử đầu tiên
a.Add("Hello World"); // Thêm lại một phần tử
String s = a[0]; // Hello World
Trang 37• Sử dụng else if khi muốn tiếp tục xét một
trường hợp với biểu thức điều kiện khác
• Sử dụng else để xét những trường còn lại
Trang 39Câu lệnh switch
• Câu lệnh switch kiểm tra trường hợp điều
kiện dựa trên một biến kiểu số nguyên hoặc
chuỗi trong một nhóm các nhãn case
int x = new java.util.Random().nextInt(3);
switch (x)
{
case 0: System.out.print(x + " is 0"); break;
case 1: System.out.print(x + " is 1"); break;
default: System.out.print(x + " is 2"); break;
}
Trang 41Vòng lặp while
• Vòng lặp while thực thi các dòng lệnh trong
{ } khi điều kiện đúng
Trang 44Vòng lặp for each
• Cho phép đi qua 1 tập hợp các phần tử
• Chú ý là các phần tử phải là read-only và dòng lặp foreach không thể thay đổi các thành phần
Trang 45Câu lệnh break và continue
• break: Cho phép thoát khỏi vòng lặp không
cần kiểm tra điều kiện của vòng lặp
• continue: cho phép kết thúc lần lặp hiện hành
và chuẩn bị bắt đầu lần lặp kế tiếp
• Tuy nhiên ta có thể sử dụng với nhãn:
myLoop : for (int i = 0, j = 0; i < 10; i++)
{
while (++j < 10)
{
break myLoop; // end for
continue myLoop; // start next for
} }
Trang 46Khối lệnh đã được đặt nhãn
• Là khối lệnh có đặt nhãn dùng để sử dụng
chung với break
validation: {
if(true)
break validation; }
Trang 47Phương thức
• Tất cả các phương thức phải nằm trong một
lớp, Java không có phương thức toàn cục bên
ngoài
• Từ khóa void được sử dụng cho những
phương thức không trả về giá trị nào
class MyApp {
void MyPrint(){
System.Console.Write("Hello World");
} }
Trang 48Gọi phương thức
• Để gọi một phương thức, cần có một thể hiện
(instance) của lớp MyApp bằng từ khóa new
• Dùng dấu chấm (.) phía sau thể hiện để gọi
phương thức của lớp đối tượng đó
class MyApp {
public static void Main(){
MyApp m = new MyApp();
m.MyPrint(); // Hello World
}
void MyPrint(){
System.Console.Write("Hello World");
} }
Trang 49Tham số
• Tham số truyền vào phương thức có kiểu dữ liệu xác định, các tham số cách nhau bởi dấu phẩy (,)
public void MyPrint(string s1, string s2)
MyApp m = new MyApp();
m.MyPrint("Hello", " World"); // Hello World
}
Trang 50• Với kiểu tham chiếu (lớp, giao tiếp và mảng)
nó sẽ sao chép địa chỉ bộ nhớ truyền vào
phương thức
Trang 51Truyền tham số
public static void main(String[] args)
{
int x = 0; // Kiểu dữ liệu sơ cấp
m.set(x); // Truyền giá trị
System.out.print(x); // 0
int[] y = {0}; // Kiểu tham chiếu
m.set(y); // Truyền địa chỉ
Trang 52Lệnh return
• Một phương thức có thể trả lại một giá trị.
• Từ khóa return sẽ trả lại giá trị tương ứng với kiểu
public static void Main(){
MyApp m = new MyApp();
Trang 53Kiến trúc chương trình Java
Dạng cơ bản của một tập tin Java có cấu trúc như sau :
package packageName; // Khai báo tên gói, nếu có
import java.awt.*; // Khai báo tên thư viện sẵn nếu có
class className // Khai báo tên lớp
}
Trang 54Kiến trúc chương trình Java
Một tập tin mã nguồn Java có thể có ba phần chính:
• Phần khai báo tên gói (khối) bằng từ khoá package
• Phần khai báo thư viện tham khảo bằng từ khoá
import
• Phần khai báo nội dung lớp bằng từ khoá class
Trang 55Kiến trúc chương trình Java
Phần khai báo Package:
• Package được dùng để đóng gói các lớp trong chương trình lại với nhau thành một khối.
• Cú pháp khai báo tên gói bằng từ khoá package:
package <Tên gói>;
• Phạm vi đặt tên gói, trên thực tế, được tiến hành theo thứ tự phạm vi lớn đến nhỏ như sau:
Tên tổ chức
Tên công ty
Tên dự án 34
Tên modul trong dự án
Tên các chức năng trong module.
Trang 56Kiến trúc chương trình Java
Ví dụ về Package:
Trang 57Kiến trúc chương trình Java
Ưu điểm của package:
• Cho phép nhóm các lớp vào với nhau thành các đơn vị nhỏ hơn Việc thao tác trên các đơn vị khối sẽ gọn hơn thao tác trên một tập các lớp
• Tránh việc xung đột khi đặt tên lớp Vì các lớp không cùng package thì có thể đặt tên trùng nhau
• Cho phép bảo vệ các lớp Khi chương trình lớn, việc chia nhỏ chương trình thành các package sẽ thuận lợi hơn cho việc quản lí và phát triển
• Tên gói còn được dùng để định danh lớp trong ứng dụng
Trang 58Kiến trúc chương trình Java
Lưu ý khi sử dụng package:
• Dòng lệnh khai báo tên khối phải được đặt đầu tiên trong tập tin mã chương trình
• Chỉ được khai báo tối đa một tên khối đối với mỗi tệp mã nguồn Java
• Các tệp tin của các lớp nằm cùng gói ứng dụng phải được lưu trong cùng một thư mục (tên thư mục là tên khối) theo cấu trúc khối của dự án
• Tên khối nên đặt theo chữ thường vì tên khối sẽ là tên thư mục tương ứng trong ổ đĩa, tránh nhầm lẫn với tên các tệp tin là tên các lớp của chương trình
• Khi không phân chia chương trình thành khối (chương trình đơn giản), không cần thiết phải khai báo tên khối ở đầu chương trình.
Trang 59Kiến trúc chương trình Java
Khai báo thư viện:
• Khai báo thư viện để chỉ ra những thư viện đã được định nghĩa sẵn mà
chương trình sẽ tham khảo tới Cú pháp khai báo thư viện với từ khoá
import như sau:
• Java chuẩn cung cấp một số thư viện như sau:
và ngoại lệ, xử lí vào ra trên các thiết bị chuẩn
liệu có cấu trúc như Date, Stack, Vector
Trang 60Kiến trúc chương trình Java
Lưu ý khi khai báo thư viện:
• Nếu muốn khai báo tham khảo nhiều thư viện, phải khai báo
• Nếu chỉ tham khảo một vài lớp trong một thư viện, nên chỉ rõ tham khảo lớp nào, thay vì phải khai báo tham khảo cả gói
• Nếu không tham khảo thư viện nào, không cần thiết phải khai
báo các tham khảo với từ khoá import.
• Ta cũng có thể chỉ import các giá trị tĩnh trong lớp tham chiếu bằng cách import static (sẽ nói về từ khóa static trong chương
sau)
Trang 61Kiến trúc chương trình Java
Khai báo lớp:
• Khai báo lớp và nội dung của lớp, phần này luôn bắt buộc phải có đối với một tập tin mã nguồn Java:
– Khai báo tên lớp với từ khoá class
– Khái báo các thuộc tính của lớp
– Khai báo các phương thức của lớp.