Lesson Lesson Lesson Lesson 1111 ---- JavaJavaJavaJava
Nội dungNội dungNội dungNội dung
• Giới thiệu ngôn ngữ lập trình Java.
• Cú pháp
• Các kiểu dữ liệu.
• Lớp và đối tượng cơ bản.
• Thực hành.
Giới thiệu về JavaGiới thiệu về JavaGiới thiệu về JavaGiới thiệu về Java
Giới thiệu ngôn ngữ lập trình Giới thiệu ngôn ngữ lập trình Giới thiệu ngôn ngữ lập trình Giới thiệu ngôn ngữ lập trình JavaJavaJavaJava
• Java là gì ?
– Java là ngôn ngữ lập trình hướng đối tượng do Sun Microsystem đưa ra vào giữa thập niên 90.
• Java là ngôn ngữ lập trình thuần hướng đối tượng.
JDKJDKJDKJDK
• Bộ công cụ dành cho lập trình viên java được gọi là Java Development KitJava Development KitJava Development KitJava Development Kit (JDK).
• Từ version 1.2, bộ toolkit này được đổi tên thành Java 2 Software Developer KitJava 2 Software Developer KitJava 2 Software Developer KitJava 2 Software Developer Kit(J2SDK).
• Phiên bản hiện tại là 1.8.
JDKJDKJDKJDK
• JDK gồm các thành phần:
– Compiler.
– Debugger.
– Java Runtime Environment (JRE).
IDEIDEIDEIDE
• Netbeans.
• Eclipse.
• IntelliJ.
• Jbuilder.
• Jcreator.
IDEIDEIDEIDE
• Trong bài giảng này IDE được sử dụng là Netbeans.
NetbeansNetbeansNetbeansNetbeans
Download NetbeansDownload NetbeansDownload NetbeansDownload Netbeans
• Truy cập vào trang https://netbeans.org/
Download NetbeansDownload NetbeansDownload NetbeansDownload Netbeans
Cài đặtCài đặtCài đặtCài đặt
Cài đặtCài đặtCài đặtCài đặt
Cài đặtCài đặtCài đặtCài đặt
Tạo project java với Tạo project java với Tạo project java với Tạo project java với netbeans netbeans netbeans netbeans
Tạo project java với Tạo project java với Tạo project java với Tạo project java với netbeans netbeans netbeans netbeans
Tạo project java với Tạo project java với Tạo project java với Tạo project java với netbeans netbeans netbeans netbeans
Tạo project java với Tạo project java với Tạo project java với Tạo project java với netbeans netbeans netbeans netbeans
Tạo project java với Tạo project java với Tạo project java với Tạo project java với netbeans netbeans netbeans netbeans
Cú phápCú phápCú phápCú pháp
Các từ khóa trong javaCác từ khóa trong javaCác từ khóa trong javaCác từ khóa trong java
Cách đặt tên biếnCách đặt tên biếnCách đặt tên biếnCách đặt tên biến
• Tên bắt đầu bằng ký tự , ký tự gạch dưới hay kí tự $.
• Tên không được chứa các kí tự khoảng trắng, ký hiệu phép toán.
• Tên không được trùng từ khóa.
• Tên có độ dài bất kì.
• Tên phân biệt hoa thường.
Cách đặt tên classCách đặt tên classCách đặt tên classCách đặt tên class
• Như cách đặt tên biến tuy nhiên tên class chỉ gồm các kí tự.
• Tên class phải trùng với tên file.
Toán tửToán tửToán tửToán tử
Chú thíchChú thíchChú thíchChú thích
• Chú thích trong java giống c++.
// chú thích một dòng
/* chú thích một khối lệnh
....
*/
Các kiểu dữ liệuCác kiểu dữ liệuCác kiểu dữ liệuCác kiểu dữ liệu
Các kiểu dữ liệu cơ bảnCác kiểu dữ liệu cơ bảnCác kiểu dữ liệu cơ bảnCác kiểu dữ liệu cơ bản
• Kiểu số nguyên:
– byte: -128 đến 127.
– short: -215 đến 215 - 1.
– int: -231 đến 231 - 1.
– long: -263 đến 263 - 1.
Các kiểu dữ liệu cơ bảnCác kiểu dữ liệu cơ bảnCác kiểu dữ liệu cơ bảnCác kiểu dữ liệu cơ bản
• Kiểu số thực:
– float: 32 bits.
– double: 64 bits.
• Kiểu kí tự
– char: 16 bits.
• Kiểu lý luận
– boolean
Kiểu chuỗiKiểu chuỗiKiểu chuỗiKiểu chuỗi
• Kiểu chuỗi:
– String: một dãy các kí tự Unicode 16 bits (char).
– Dùng toán tử + để nối chuỗi.
– Phải so sánh bằng phương thức compareTocompareTocompareTocompareTo.
Các kiểu dữ liệu đối tượngCác kiểu dữ liệu đối tượngCác kiểu dữ liệu đối tượngCác kiểu dữ liệu đối tượng
• Array (kiểu mảng).
• Enum (kiểu liệt kê).
• Class.
• Interface.
HelloWorldHelloWorldHelloWorldHelloWorld
Cấu trúc chương trình JavaCấu trúc chương trình JavaCấu trúc chương trình JavaCấu trúc chương trình Java
HelloWorldHelloWorldHelloWorldHelloWorld
Lớp và các đối tượng cơ bảnLớp và các đối tượng cơ bảnLớp và các đối tượng cơ bảnLớp và các đối tượng cơ bản
Lớp MathLớp MathLớp MathLớp Math
• Là một phần của gói java.lang.java.lang.java.lang.java.lang.
• Chứa các phương thức có chức năng tínhtoán về toán học.
• Như:– Lũy thừa (pow)
– Căn (sqrt)
– Trị tuyệt đối (abs)
– ....
Lớp CollectionsLớp CollectionsLớp CollectionsLớp Collections
• Lớp hỗ trợ xử lý các thao tác về mảng.
• Gồm các interface
– Collection
– Set
– List
– Map
CollectionCollectionCollectionCollection
CollectionCollectionCollectionCollection
java.util.Queue java.util.List java.util.Set
Cho phép chứa các phần tử trùng lặp
Cho phép chứa các phần tử trùng lặp
Không cho phép chứa các phần tử trùng lặp
Không cho phép chứa các phần tử null
Cho phép chứa nhiều phần tử null
Tùy theo class thi hành Set hỗ trợ chứa phần tử null hay không. Nếu có hỗ trợ thì chỉ chứa nhiều nhất 1 phần tử null nếu có.
Cho phép chứa nhiều phần tử null
Class hierarchy of CollectionClass hierarchy of CollectionClass hierarchy of CollectionClass hierarchy of Collection
SummarySummarySummarySummary
ListListListList
• Các lớp con của List:
– ArrayList
– Vector
– LinkedList
Các thao tác cơ bản trên Các thao tác cơ bản trên Các thao tác cơ bản trên Các thao tác cơ bản trên listlistlistlist
SetSetSetSet
• Các lớp con của set:
– HashSet
– TreeSet
– ....
Các thao tác cơ bản trên setCác thao tác cơ bản trên setCác thao tác cơ bản trên setCác thao tác cơ bản trên set
MapMapMapMap
MapMapMapMap
• Các lớp con của Map:
– HashTable
– LinkedHashMap
– HashMap
– TreeMap
Các thao tác cơ bản trên Các thao tác cơ bản trên Các thao tác cơ bản trên Các thao tác cơ bản trên mapmapmapmap
Lớp I/OLớp I/OLớp I/OLớp I/O
• Các lớp chính liên quan đến việc xử lý IO đều nằm trong gói java.io.
• Các lớp xử lý IO trong java được chia thành 2 loại chính:
– InputStream và OutputStream xử lý byte, số.
– Reader và Writer xử lý ký tự và text.
InputStreamInputStreamInputStreamInputStream
• InputStream định nghĩa các phương thức sau – int available( )
– void close( )
– void mark(int numBytes)
– boolean markSupported( )
– int read( )
– int read(byte buffer[ ])
– int read(byte buffer[ ], int offset, int numBytes)
– void reset( )
– long skip(long numBytes)
InputStreamInputStreamInputStreamInputStream
• Một số lớp con tiêu biểu của InputStream:
– FileInputStream
– FilterInputStream
– ByteArrayInputStream
– StringBufferInputStream
– SequenceInputStream
– PipedInputStream
– …
OutputStreamOutputStreamOutputStreamOutputStream
• OutputStream định nghĩa các phương thức sau:
– void close( )
– void flush( )
– void write(int b)
– void write(byte buffer[ ], int offset, int numBytes)
– void write(byte buffer[ ])
OutputStreamOutputStreamOutputStreamOutputStream
• Một số lớp con của OutputStream:
– FileOutputStream
– FilterOutputStream
– ByteArrayOutputStream
– PipedOutputStream
Console I/OConsole I/OConsole I/OConsole I/O
• System.in: đọc dữ liệu trực tiếp từ bàn phím.
• System.out: ghi dữ liệu ra console.
• System.err
• Ví dụ: Nhập vào mảng n phần tử và xuất các phần tử ngược lại.
Console I/OConsole I/OConsole I/OConsole I/O
Đọc và ghi file Đọc và ghi file Đọc và ghi file Đọc và ghi file
• Đọc và ghi file dưới dạng byte stream được thực hiện thông qua 2 lớp FileInputStream và FileOutputStream.
Đọc fileĐọc fileĐọc fileĐọc file
• Tạo đối tượng FileInputStream, khởi tạo đối tượng với tên file cần đọc
• Dùng các hàm read() để đọc dữ liệu
• gọi close() để đóng stream lại.
Ví dụVí dụVí dụVí dụ
Ghi fileGhi fileGhi fileGhi file
• Tạo đối tượng FileOutputStream, khởi tạo đối tượng với tên file cần ghi.
• dùng các hàm write() để ghi dữ liệu.
• dùng flush() để đưa dữ liệu còn trong buffer vào file.
• gọi close() để đóng stream lại.
Ví dụVí dụVí dụVí dụ
Đọc và ghi dữ liệu nhị phânĐọc và ghi dữ liệu nhị phânĐọc và ghi dữ liệu nhị phânĐọc và ghi dữ liệu nhị phân
• Giải quyết nhu cầu đọc và ghi dữ liệu dưới dạng số nguyên, số thực, …
• Sử dụng lớp DataInputStream và DataOutputStream.
Đọc fileĐọc fileĐọc fileĐọc file
• Tạo đối tượng FileInputStream, khởi tạo đối tượng với tên file cần đọc.
• Tạo đối tượng DataInputStream với đầu vào là FileInputStream.
• Dùng các hàm read() của lớp DataInputStream để đọc dữ liệu.
• gọi close() để đóng stream.
Ví dụVí dụVí dụVí dụ
Ghi fileGhi fileGhi fileGhi file
• Tạo đối tượng FileOutputStream, khởi tạo đối tượng với tên file cần đọc.
• Tạo đối tượng DataOutputStream với đầu vào là FileOutputStream.
• Dùng các hàm write() của lớp DataInputStream để ghi dữ liệu.
• gọi close() để đóng stream.
Ví dụVí dụVí dụVí dụ
Tập tin truy cập ngẫu nhiênTập tin truy cập ngẫu nhiênTập tin truy cập ngẫu nhiênTập tin truy cập ngẫu nhiên
• Lớp RandomAccessFile dùng để truy cập tập tin ngẫu nhiên.
• Cung cấp phương thức giúp người dùng định vị đến một vị trí của con trỏ file
Ví dụVí dụVí dụVí dụ
Đọc/Ghi dữ liệu sử dụng các Đọc/Ghi dữ liệu sử dụng các Đọc/Ghi dữ liệu sử dụng các Đọc/Ghi dữ liệu sử dụng các character streamcharacter streamcharacter streamcharacter stream
• Để xử lý việc đọc ghi dữ liệu dưới dạng ký tự hoặc text, ta nên sử dụng các lớp đọc ghi dựa trên ký tự do Java cung cấp.
• Các character stream làm việc với dữ liệu Unicode
• Các character stream gồm: bộ đọc và bộ ghi.
ReaderReaderReaderReader
• Reader định nghĩa các phương thức sau: – void mark(int numChars) – boolean markSupported( ) – int read( ) – int read(char buffer[ ]) – abstract int read(char buffer[ ], int offset, int
numChars)– int read(CharBuffer buffer) – boolean ready( ) – void reset( ) – long skip(long numChars)
ReaderReaderReaderReader
• Một số lớp con của Reader:
– CharArrayReader
– FilterReader
– InputStreamReader
– PipedReader
– StringReader
– FileReader
WriterWriterWriterWriter
• Writer định nghĩa các phương thức sau:– Writer append(char ch)
– Writer append(CharSequence chars)
– Writer append(CharSequence chars, int begin, int end)
– void write(String str, int offset, int numChars)
– void write(int ch)
– void write(char buffer[ ])
– void write(String str)
WriterWriterWriterWriter
• Một số lớp con của Writer:
– CharArrayWriter
– OutputStreamWriter
– PipedWriter
– StringWriter
– PrintWriter
– FileWriter
Ví dụVí dụVí dụVí dụ
• FileReader
• FileWriter
• InputStreamReader
• OutputStreamWriter
• PrintWriter
• BufferedReader
Lớp ThreadLớp ThreadLớp ThreadLớp Thread
• Dùng để lập trình đa luồng (multithread).
• Nằm trong gói java.lang
Lớp ThreadLớp ThreadLớp ThreadLớp Thread
• Một thread có thể có các trạng thái
– Running
– Suspended
– Blocked
Tạo threadTạo threadTạo threadTạo thread
• Có 2 cách
– Kế thừa lớp Thread
– Implement interface RunnableRunnableRunnableRunnable
Tạo threadTạo threadTạo threadTạo thread
Làm việc với ThreadLàm việc với ThreadLàm việc với ThreadLàm việc với Thread
• Lập trình một ứng dụng multi thread tương tác với biến n với các yêu cầu sau:
– Thread 1: nếu n < 10000 thì cộng n thêm 1 và xuất ra chữ up.
– Thread 2: nếu n > 0 thì giảm n đi 1 và xuất ra chữ down.
Làm việc với ThreadLàm việc với ThreadLàm việc với ThreadLàm việc với Thread
Đồng bộ hóaĐồng bộ hóaĐồng bộ hóaĐồng bộ hóa
• Sử dụng phương thức Synchronized.
• Monitor trên đối tượng.
Sử dụng phương thức Sử dụng phương thức Sử dụng phương thức Sử dụng phương thức SynchronizedSynchronizedSynchronizedSynchronized
• Khi một thread đang thực hiện phương thức có từ khóa synchronized đi kèm, các thread khác muốn thực hiện phương thức này của cùng đối tượng sẽ phải chờ.
Sử dụng phương thức Sử dụng phương thức Sử dụng phương thức Sử dụng phương thức SynchronizedSynchronizedSynchronizedSynchronized
Monitor trên đối tượngMonitor trên đối tượngMonitor trên đối tượngMonitor trên đối tượng
• Để đảm bảo chỉ một thread được truy xuất vào đối tượng tại một thời điểm, ta có thể sử dụng lệnh synchronized đối với đối tượng đó.
Monitor trên đối tượngMonitor trên đối tượngMonitor trên đối tượngMonitor trên đối tượng
Giao tiếp giữa các threadGiao tiếp giữa các threadGiao tiếp giữa các threadGiao tiếp giữa các thread
• Java cung cấp các phương thức sau để hỗ trợ việc giao tiếp giữa các thread
– Wait
– Notify
– NotifyAll
Giao tiếp giữa các threadGiao tiếp giữa các threadGiao tiếp giữa các threadGiao tiếp giữa các thread
• Wait : yêu cầu thread hiện thời rời bỏ monitor và tạm dừng họat động
• Notify : đánh thức thread đầu tiên gọi wait trên đối tượng
• NotifyAll : đánh thức tất cả các thread gọi wait trên đối tượng
Giao tiếp giữa các threadGiao tiếp giữa các threadGiao tiếp giữa các threadGiao tiếp giữa các thread
Điều khiển threadĐiều khiển threadĐiều khiển threadĐiều khiển thread
• Suspend : tạm dừng thực thi thread
• Resume : kích hoạt lại thread đang tạm dừng
• Stop : chấm dứt hoạt động của thread
• Chú ý: các lệnh trên đã bị hủy trong phiên bản Java 1.6
Lớp NetLớp NetLớp NetLớp Net
• Dùng để lập trình mạng.
• Nằm trong gói java.net.
Lớp NetLớp NetLớp NetLớp Net
• Http– URL
– URLConnection
• Các lớp dùng cho giao thức TCP– Socket
– ServerSocket
• Các lớp dùng cho giao thức UDP– DatagramPacket
– DatagramSocket
– MulticastSocket
TCP TCP TCP TCP ---- SocketSocketSocketSocket
• Socket là đầu nối trên kết nối 2 chiều giữa 2 ứng dụng trên hệ thống mạng
TCP TCP TCP TCP ---- ServerSocketServerSocketServerSocketServerSocket
• ServerSocket lắng nghe trên 1 port để chờ các ứng dụng kết nối tới.
• Khi có client kết nối tới, server đồng ý sẽ tạo ra 1 Socket kết nối với socket của client.
• Server và Client có thể đọc/ghi trên đường liên kết vừa tạo ra.
TCP TCP TCP TCP ---- SocketSocketSocketSocket
• Làm việc trên socket
– Mở .
– Mở inputstream để đọc và outputstream để ghi xuống socket.
– Đọc và ghi dữ liệu từ các stream
– Đóng các stream
– Đóng socket.
Làm việc với TCP Làm việc với TCP Làm việc với TCP Làm việc với TCP ---- SocketSocketSocketSocket
• Lập trình chương trình sử dụng tcp socket với các yêu cầu sau:
– Server: lắng nghe và chấp nhận connect. Đọc một dòng và thêm vào chữ hello sau đó trả lại client.
– Client: Nhận một chuỗi từ console sau đó gửi lên server, sau đó nhận lại chuỗi trả về.
Làm việc với Làm việc với Làm việc với Làm việc với TCP TCP TCP TCP ---- SocketSocketSocketSocket
Làm việc với Làm việc với Làm việc với Làm việc với TCP TCP TCP TCP ---- SocketSocketSocketSocket
Làm việc với TCP Làm việc với TCP Làm việc với TCP Làm việc với TCP ---- SocketSocketSocketSocket
ServerClient
UDP UDP UDP UDP ---- DatagramDatagramDatagramDatagram
• Datagram là một thông điệp được gởi ra mạng.
• Sử dụng giao thức UDP
• Không đảm bảo : nội dung, thời gian nhận.
Làm việc với UDP Làm việc với UDP Làm việc với UDP Làm việc với UDP ----DatagramDatagramDatagramDatagram
• Lập trình chương trình sử dụng UDP để thực hiện các yêu cầu sau:
– Listener: Lắng nghe các gói tin và xuất dữ liệu trong gói tin dưới dạng chuỗi.
– Sender: Liên tục gửi một chuỗi.
Làm việc với UDP Làm việc với UDP Làm việc với UDP Làm việc với UDP ----DatagramDatagramDatagramDatagram
Làm việc với UDP Làm việc với UDP Làm việc với UDP Làm việc với UDP ----DatagramDatagramDatagramDatagram
Làm việc với UDP Làm việc với UDP Làm việc với UDP Làm việc với UDP ----DatagramDatagramDatagramDatagram
Thực hànhThực hànhThực hànhThực hành