giới thiệu sơ lược về ngôn ngữ java

88
Giới thiệu sơ lược Giới thiệu sơ lược về ngôn ngữ Java về ngôn ngữ Java Sơ lược về ngôn ngữ Java Sơ lược về ngôn ngữ Java Các kiểu ứng dụng dưới Các kiểu ứng dụng dưới Java Java Cài đặt và cấu hình JDK Cài đặt và cấu hình JDK Chương trình ứng dụng Chương trình ứng dụng kiểu kiểu Application Application Một số kỹ thuật Một số kỹ thuật Ngoại lệ Ngoại lệ Nhập xuất Nhập xuất Luồng (Thread) Luồng (Thread) 1

Upload: cicely

Post on 08-Jan-2016

58 views

Category:

Documents


1 download

DESCRIPTION

Giới thiệu sơ lược về ngôn ngữ Java. Sơ lược về ngôn ngữ Java Các kiểu ứng dụng dưới Java Cài đặt và cấu hình JDK Chương trình ứng dụng kiểu Application Một số kỹ thuật Ngoại lệ Nhập xuất Luồng (Thread). 1. Sơ lược về ngôn ngữ Java. Lịch sử phát triển: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Giới thiệu sơ lược về ngôn ngữ Java

Giới thiệu sơ lược về Giới thiệu sơ lược về

ngôn ngữ Javangôn ngữ Java Sơ lược về ngôn ngữ JavaSơ lược về ngôn ngữ Java Các kiểu ứng dụng dưới Java Các kiểu ứng dụng dưới Java Cài đặt và cấu hình JDKCài đặt và cấu hình JDK Chương trình ứng dụng kiểu Chương trình ứng dụng kiểu

ApplicationApplication Một số kỹ thuậtMột số kỹ thuật Ngoại lệNgoại lệ Nhập xuấtNhập xuất Luồng (Thread)Luồng (Thread) 1

Page 2: Giới thiệu sơ lược về ngôn ngữ Java

Sơ lược về ngôn ngữ Java Sơ lược về ngôn ngữ Java

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. 1996: trở thành chuẩn công nghiệp cho Internet.

Đặc điểm: Ngôn ngữ hoàn toàn hướng đối tượng (Pure OOP). Ngôn ngữ đa nền: "Viết một lần ,  Chạy trên nhiều nền”. Ngôn ngữ đa luồng (multi-threading): xử lý và tính toán song

song. Ngôn ngữ phân tán (distributed): cho phép các đối tượng của một

ứng dụng được phân bố và thực thi trên các máy tính khác nhau. Ngôn ngữ động: cho phép mã lệnh của một chương trình được tải

từ một máy tính về máy của người yêu cầu thực thi chương trình. Ngôn ngữ an toàn: hạn chế các thao tác nguy hiểm cho máy tính

thật. Được đảm bảo bởi 4 tầng an toàn. Ngôn ngữ đơn giản, dễ học, kiến trúc chương trình đơn giản, trong

sáng.

2

Page 3: Giới thiệu sơ lược về ngôn ngữ Java

Sơ lược về ngôn ngữ Java Sơ lược về ngôn ngữ Java

Khả năng: Ngôn ngữ bậc cao.

Có thể được dùng để tạo ra các loại ứng dụng để giải quyết các vấn đề về số, xử lý văn bản, tạo ra trò chơi, và nhiều thứ khác.

Có các thư viện hàm hỗ trợ xây dựng giao diện (GUI) như AWT, Swing, …

Có các môi trường lập trình đồ họa như  JBuilder, NetBeans, Eclipse, …

Có khả năng truy cập dữ liệu từ xa thông qua cầu nối JDBC

Hỗ trợ các lớp hữu ích, tiện lợi trong lập trình các ứng dụng mạng (Socket) cũng như truy xuất Web hay nhúng vào trong trang Web (Applet).

Hỗ trợ lập trình phân tán  (Remote Method Invocation) cho phép một ứng dụng có thể được xử lý phân tán trên các máy tính khác nhau.

Lập trình trên thiết bị cầm tay (J2ME).

Xây dựng các ứng dụng trong môi trường xí nghiệp (J2EE).

...

3

Page 4: Giới thiệu sơ lược về ngôn ngữ Java

Sơ lược về ngôn ngữ Java Sơ lược về ngôn ngữ Java

Máy ảo Java: (JVM – Java Virtual Machine)

4

Để thực thi một ứng dụng của Java trên một hệ điều hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành đó:JRE (Java Runtime Environment)

Để thực thi một ứng dụng của Java trên một hệ điều hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành đó:JRE (Java Runtime Environment)

.java

.classMáy ảo Java (JVM) đóng vai trò là 1 cầu nối giữa ứng dụng viết bằng Java và Hệ điều hành.

Máy ảo Java (JVM) đóng vai trò là 1 cầu nối giữa ứng dụng viết bằng Java và Hệ điều hành.

Máy ảo Java (JVM) gồm các thành phần: Trình nạp lớp (Class Loader), Trình kiểm tra lớp (Class Verifier), Trình thực thi (Execution Unit).

Máy ảo Java (JVM) gồm các thành phần: Trình nạp lớp (Class Loader), Trình kiểm tra lớp (Class Verifier), Trình thực thi (Execution Unit).

Page 5: Giới thiệu sơ lược về ngôn ngữ Java

Sơ lược về ngôn ngữ Java Sơ lược về ngôn ngữ Java

Các kiểu ứng dụng dưới Java

5

Applet: • Ứng dụng được

nhúng vào các

trang web.• Mã ứng dụng

được lấy từ web

server

Applet: • Ứng dụng được

nhúng vào các

trang web.• Mã ứng dụng

được lấy từ web

server

Page 6: Giới thiệu sơ lược về ngôn ngữ Java

Sơ lược về ngôn ngữ JavaSơ lược về ngôn ngữ Java

Các kiểu ứng dụng dưới Java

6

Application: • Ứng dụng được

thực thi trên các

máy ảo Java.• Bộ thông dịch

dịch mã bytecode

của ứng dụng

thành mã máy

đích.

Application: • Ứng dụng được

thực thi trên các

máy ảo Java.• Bộ thông dịch

dịch mã bytecode

của ứng dụng

thành mã máy

đích.

Page 7: Giới thiệu sơ lược về ngôn ngữ Java

Sơ lược về ngôn ngữ JavaSơ lược về ngôn ngữ Java

Các kiểu ứng dụng dưới Java

7

Mobile: • Ứng dụng được thực thi trên các

máy ảo Java trên điện thoại di

động và các thiết bị cầm tay.

Mobile: • Ứng dụng được thực thi trên các

máy ảo Java trên điện thoại di

động và các thiết bị cầm tay.

Java.netJava.net

Page 8: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và cấu hình JDK

Cài đặt Phiên bản: jdk-7u11-windows-i586.exe Thư mục cài đặt: C:\Program Files\Java\jdk1.7.0_11

Cấu hình Đặt biến môi trường PATH và CLASSPATH, có 2

cách:Bằng dòng lệnh:

Biến PATH dẫn đến thư mục bin của JDK:set PATH = C:\Program Files\Java\jdk1.7.0_11\binBiến CLASSPATH đến các lớp tại thư mục hiện hành

và các lớp thư viện của Java:set CLASSPATH = .; C:\Program Files\Java\jdk1.7.0_11\lib

8

Page 9: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và cấu hình JDK

Dùng cửa sổ Windows:Vào System Properties / Chọn thẻ Advanced /

Environment Variables: trong phần System Variables, thêm tiếp tục vào đường dẫn PATH

C:\Program Files\Java\jdk1.7.0_11\binClick chọn NEW, thêm vào

CLASSPATH

.; C:\Program Files\Java\jdk1.7.0_11\lib; [Các thư mục hoạt động khác (nếu cần)]

9

Page 10: Giới thiệu sơ lược về ngôn ngữ Java

Java Development Kit (JDK)

10

Bộ phát triển ứng dụng Java gồm:

javac: Bộ biên dịch chương trình viết bằng ngôn ngữ Java thành mã thực thi(byte code) trên máy ảo Java.

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 trên hệ điều hành của máy đích.

Page 11: Giới thiệu sơ lược về ngôn ngữ Java

Java Development Kit (JDK)

11

Bộ phát triển ứng dụng Java gồm:

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

Page 12: Giới thiệu sơ lược về ngôn ngữ Java

Java - API

12

Java cung cấp một bộ API (Application Program Interface) được tổ chức thành các gói (package):

java.lang

java.io

java.net

java.rmi

java.awt

javax.swings

Page 13: Giới thiệu sơ lược về ngôn ngữ Java

Quy cách đặt tên

13

Tên phân biệt giữa chữ hoa và chữ thường.Dùng các chữ cái, ký tự số, ký tự _ và $.Không bắt đầu bằng ký tự số.Không có khoảng trắng trong tên.Quy ước:

Tên lớp: Các ký tự đầu tiên của một từ được viết

HoaCác ký tự còn lại viết thường. Ví dụ: Nguoi, SinhVien, MonHoc, String,

InputStream, . . .

Page 14: Giới thiệu sơ lược về ngôn ngữ Java

Quy cách đặt tên

14

Quy ước:Tên biến, tên hằng, tên phương thức:

Từ đầu tiên viết thường.Ký tự đầu tiên của từ thứ hai trở đi được

viết Hoa. Ví dụ: ten, ngaySinh, diaChi, inDiaChi(),

getInputStream(), . . .

Page 15: Giới thiệu sơ lược về ngôn ngữ Java

Tªn kiÓu

KÝch th ícbyte

short int long

float double

1 byte 2 bytes 4

bytes 8

bytes 4

bytes 8 bytes

Các kiểu dữ liệu

15

Kiểu số

Kiểu ký tự char: 2 bytes theo mã UNICODE 127 ký tự đầu trùng với mã ASCII

Kiểu chuỗi String: Là một lớp trong ngôn ngữ java. Có nhiều phương thức thao tác trên chuỗi.

Kiểu Boolean: nhận 2 giá trị true / false

Page 16: Giới thiệu sơ lược về ngôn ngữ Java

Các kiểu dữ liệu

16

Kiểu mảng:Khai báo

int[] a ; float[] yt; String[] names;hoặc: int a[]; float yt[]; String names[];

int maTran[][]; float bangDiem[][];Khởi tạo

a = new int[3]; yt = new float[10];names = new String[50];

maTran = new int[10][10];Sử dụng

int i = a[0]; float f = yt[9];String str = names[20]; int x = matran[0][0]

Page 17: Giới thiệu sơ lược về ngôn ngữ Java

Các phép toán

17

Phép toán số học: +, - , *, / , % , =++ , -- , += , - = , *= , /= , %=

Phép toán logic:= =, !=, && , ||, !> , < , >= , <=

Phép toán trên bit:& , | , ^ , << , >> , ~

Phép toán điều kiện: ? : Phép toán chuyển kiểu: (kiểu mới)

Page 18: Giới thiệu sơ lược về ngôn ngữ Java

Cấu trúc điều khiển

Cấu trúc điều khiển trong Java giống hệt như cấu trúc điều khiển của C++, bao gồm:Lệnh if - elsePhép toán ? :Lệnh switchLệnh whileLệnh dow - whileLệnh forLệnh breakLệnh continue

18

Page 19: Giới thiệu sơ lược về ngôn ngữ Java

Mục đích, yêu cầu

Mục đíchGiới thiệu cách xây dựng một chương

trình ứng dụng kiểu Appliacation.Trình bày một số kỹ thuật sử dụng để

viết chương trình.Yêu cầu

Sinh viên đọc hiểu và làm được các ví dụ minh họa, có thể viết được một số chương trình ứng dụng kiểu Application đơn giản.

19

Page 20: Giới thiệu sơ lược về ngôn ngữ Java

Nội dung

Chương trình ứng dụng kiểu Application:Khuôn dạng chương trìnhBiên soạn chương trìnhBiên dịch và thực thi chương trình

Một số kỹ thuật:Hiển thị thông tin ra màn hình Nhập 1 ký tự từ bàn phímĐọc đối số của chương trìnhĐổi chuỗi thành số và số thành chuỗiĐổi chuỗi thành mảng các byteĐổi mảng các byte thành chuỗi 20

Page 21: Giới thiệu sơ lược về ngôn ngữ Java

Java là ngôn ngữ thuần đối tượng (pure object):

Tất cả các thành phần như hằng, biến, phương thức đều được định nghĩa trong các lớp (class).

Một ứng dụng trong Java là một tập hợp các lớp liên quan nhau:Các lớp trong thư viện Java.Các lớp do người lập trình định nghĩa.

21

Chương trình ứng dụng kiểu Application

Page 22: Giới thiệu sơ lược về ngôn ngữ Java

Khuôn dạng chương trình:[Chèn các gói cần thiết từ thư viện Java]Trong một ứng dụng có một lớp thực thi

được.Lớp thực thi được:

Có tên lớp trùng với tên tập tin chứa nó.

Phải khai báo public.Có chứa phương thức được thực thi đầu

tiên: public static void main (String args[]){

. . .}

22

Chương trình ứng dụng kiểu Application

Page 23: Giới thiệu sơ lược về ngôn ngữ Java

Khuôn dạng chương trình:Nếu nhiều lớp được định nghĩa trong một

tập tin Chỉ có một lớp được khai báo public.

23

Chương trình ứng dụng kiểu Application

Page 24: Giới thiệu sơ lược về ngôn ngữ Java

Khuôn dạng chương trình:

Xét tập tin Example.java

24

Chương trình ứng dụng kiểu Application

import.<package>.<ClassName>;public class Example{

...      public static void main(String args[]){

...         }} class MyExample{

...}

import.<package>.<ClassName>;public class Example{

...      public static void main(String args[]){

...         }} class MyExample{

...}

Page 25: Giới thiệu sơ lược về ngôn ngữ Java

Chương trình ứng dụng kiểu Application

25

Ví dụ: Chương trình HelloWorldViết chương trình ứng dụng đơn giản:

In ra màn hình dòng chữ “Hello World!”.

public class HelloWorld{     public static void main(String args[]){         System.out.print("Hello World!"); }}

public class HelloWorld{     public static void main(String args[]){         System.out.print("Hello World!"); }}

Phương thức System.out.print() sẽ in tất cả các tham số trong dấu ngoặc ra màn hình.Phương thức System.out.print() sẽ in tất cả các tham số trong dấu ngoặc ra màn hình.

Lớp thực thi được tên là HelloWorldChứa trong tập tin HelloWorld.javaLớp thực thi được tên là HelloWorldChứa trong tập tin HelloWorld.java

Page 26: Giới thiệu sơ lược về ngôn ngữ Java

26

Biên soạn chương trình Java

Có thể dùng bất kỳ chương trình soạn thảo văn bản nào: Notepad,EditPlus,… Lưu tập tin với tên HelloWorld.java

Có thể dùng bất kỳ chương trình soạn thảo văn bản nào: Notepad,EditPlus,… Lưu tập tin với tên HelloWorld.java

Chương trình ứng dụng kiểu Application

Page 27: Giới thiệu sơ lược về ngôn ngữ Java

Biên soạn chương trình Java

27

Có nhiều các IDE (môi trường phát triển) như Eclipse, NetBeans, JBuilder, … rất mạnh để xây dựng ứng dụng Java.

Có nhiều các IDE (môi trường phát triển) như Eclipse, NetBeans, JBuilder, … rất mạnh để xây dựng ứng dụng Java.

Chương trình ứng dụng kiểu Application

Page 28: Giới thiệu sơ lược về ngôn ngữ Java

Biên dịch và thực thi chương trình

Phải cài đặt và cấu hình bộ phát triển ứng dụng JDK

Biên dịch và thực thi trong MS-DOS Mở cửa sổ MS-DOS:

Vào Start / Run, gõ lệnh cmd Hoặc vào Start / Programs / Accessories /

Command PromptChuyển vào thư mục chứa tập tin

HelloWorld.java

28

Page 29: Giới thiệu sơ lược về ngôn ngữ Java

Biên dịch và thực thi chương trình

Biên dịch và thực thi trong MS-DOS Biên dịch tập tin HelloWorld.java

Nếu có lỗi, trên màn hình sẽ hiển thị thông báo lỗi với dấu ^ chỉ vị trí lỗi.

Nếu không có lỗi, tập tin thực thi HelloWorld.class được tạo ra.

Thực thi chương trình HelloWorld.class

29

javac HelloWorld.java

java HelloWorld

Page 30: Giới thiệu sơ lược về ngôn ngữ Java

Biên dịch và thực thi chương trình

Kết quả: Trên màn hình sẽ xuất hiện dòng chữ Hello World!

30

Page 31: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Hiển thị thông tin ra màn hìnhSystem.out.print(arg1+ arg2+ .. + argn):

không xuống hàng.System.out.println(arg1+ arg2+ .. + argn):

xuống hàng.

31

Page 32: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Hiển thị thông tin ra màn hìnhVí dụ: Biên soạn chương trình sau và lưu

tập tin với tên Display.java

Kết quả

32

Page 33: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Nhập 1 ký tự từ bàn phímSystem.in.read() trả về một số nguyên

là thứ tự trong bảng mã ASCII của ký tự vừa nhập từ bàn phím.

33

Page 34: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Nhập một ký tự từ bàn phímVí dụ: Biên soạn chương trình sau và lưu

tập tin với tên KeyRead.java

Kết quả

34

Page 35: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đọc đối số của chương trìnhThực thi

Các đối số cách nhau khoảng trắng.Phương thức main() phải khai báo một

tham số kiểu mảng các chuỗi. Các đối số lần lượt được đặt vào các phần

tử của mảng. Số lượng đối số: truy xuất thuộc tính

length của mảng. (args.length) Giá trị đối số của chương trình nhận vào

theo dạng chuỗi.35

java ClassName arg1 arg2 arg3 argn

Page 36: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đọc đối số của chương trìnhVí dụ: Biên soạn chương trình sau và lưu

tập tin với tên PrintArgs.java

Kết quả

36

Page 37: Giới thiệu sơ lược về ngôn ngữ Java

Bài tập

Viết chương trình tính tổng của dãy số từ 1 đến n. Với hai trường hợp:n=10n là đối số của chương trình (n phải nhập

dạng số như 10, 20, …)

37

Page 38: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đổi chuỗi thành số và số thành chuỗi

38

Đổi chuỗi thành sốint i = Integer.valueOf(str).intValue();long l = Long.valueOf(str).longValue();float f = Float.valueOf(str).floatValue();

Đổi chuỗi thành sốint i = Integer.valueOf(str).intValue();long l = Long.valueOf(str).longValue();float f = Float.valueOf(str).floatValue();

Đổi số thành chuỗiCộng 1 chuỗi rỗng (“”) cho số đó.Ví dụ:int x = 15; float y = 3.14;String str1 = “” + x;String str2 = “” + y;

Đổi số thành chuỗiCộng 1 chuỗi rỗng (“”) cho số đó.Ví dụ:int x = 15; float y = 3.14;String str1 = “” + x;String str2 = “” + y;

Page 39: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đổi chuỗi thành số và số thành chuỗi

39

Page 40: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đổi chuỗi thành mảng các byte (byte[])Dùng hàm getBytes() trên chuỗi.

40

Page 41: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đổi chuỗi thành mảng các byte (byte[])Ví dụ:

41

Page 42: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đổi mảng các byte (byte[]) thành chuỗiString(byte[] b): tạo chuỗi từ tất cả các

phần tử trong mảng b[].String(byte[] b, int offset, int length):

Tạo chuỗi bắt đầu tại vị trí offset và chiều dài length từ các phần tử trong mảng b[].

42

Page 43: Giới thiệu sơ lược về ngôn ngữ Java

Một số kỹ thuật

Đổi mảng các byte (byte[]) thành chuỗiVí dụ:

43

Page 44: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và sử dụng 1 lớp

44

Cú pháp cài đặt 1 lớp trong Java gần giống cú pháp cài đặt 1 lớp trong C++Cú pháp cài đặt 1 lớp trong Java gần giống cú pháp cài đặt 1 lớp trong C++

Cú pháp tạo đối tượng: ClassName  obj = new ClassName([các tham số]);

Cú pháp tạo đối tượng: ClassName  obj = new ClassName([các tham số]);

Không khai báo thuộc tính truy cập thì mặc nhiên là public trong cùng package (xem như trong cùng thư mục chứa nó).

Không khai báo thuộc tính truy cập thì mặc nhiên là public trong cùng package (xem như trong cùng thư mục chứa nó).

Page 45: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và sử dụng 1 lớp

Ví dụ: Định nghĩa 1 lớpTên là PersonHai thuộc tính là name và addressPhương thức khởi tạo có 2 tham số để

gán giá trị khởi động cho hai thuộc tínhPhương thức void display() cho biết

người đó tên gì? địa chỉ ở đâu?Phương thức main() tạo ra một đối tượng

tên là tom thuộc lớp Person

45

Page 46: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và sử dụng 1 lớp

46

Page 47: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và sử dụng 1 lớp

Cài đặt nhiều lớp trong 1 tập tin

47

• Chỉ có một lớp được khai báo là public • Lớp public sẽ được nhìn thấy (truy xuất được) bởi các lớp khác ở bất kỳ ở đâu.• Lớp public sẽ chứa hàm main().• Các lớp còn lại mặc nhiên là package-private, nghĩa là có thể truy xuất được từ các lớp trong cùng file hay cùng package (thư mục).

• Chỉ có một lớp được khai báo là public • Lớp public sẽ được nhìn thấy (truy xuất được) bởi các lớp khác ở bất kỳ ở đâu.• Lớp public sẽ chứa hàm main().• Các lớp còn lại mặc nhiên là package-private, nghĩa là có thể truy xuất được từ các lớp trong cùng file hay cùng package (thư mục).

Page 48: Giới thiệu sơ lược về ngôn ngữ Java

Cài đặt và sử dụng 1 lớp

Cài đặt nhiều lớp trong 1 tập tin

48

Page 49: Giới thiệu sơ lược về ngôn ngữ Java

Thừa kế trong Java

Một lớp chỉ có thể có một lớp cha (thừa kế đơn).Lớp cha được tham khảo từ lớp con bởi từ khóa

super.Dùng từ khóa extends để khai báo thừa kế.Cú pháp:

class A extends B { // Khai bao lớp A thừa kế lớp B

}

49

Page 50: Giới thiệu sơ lược về ngôn ngữ Java

Thừa kế trong Java

Ví dụ: Định nghĩa lớp Customer thừa kế từ lớp Person

50

Page 51: Giới thiệu sơ lược về ngôn ngữ Java

Ngoại lệ (Exception) trong Java

Ngoại lệ là các lỗi sinh ra từ các "thao tác không chắc chắn“ như:Mở 1 file không tồn tạiNối kết mạng không thực hiện đượcNhập, xuất dữ liệu không đúng định

dạngJava bắt buộc các lệnh có thể dẫn đến các lỗi

truy xuất (ngoại lệ) phải có các đoạn mã xử lý phòng hờ:

51

Page 52: Giới thiệu sơ lược về ngôn ngữ Java

Ngoại lệ (Exception) trong Java

try { [ Các thao tác vào ra có thể sinh ra các ngoại lệ ] } catch (KiểuNgoạiLệ01 biến) { [ Ứng xử khi ngoại lệ KiểuNgoaiLệ01 sinh ra ] }

catch (KiểuNgoạiLệ02 biến) { [ Ứng xử khi ngoại lệ KiểuNgoaiLệ02 sinh ra ] }

finally { [ Công việc luôn luôn được thực hiện ] }

52

Page 53: Giới thiệu sơ lược về ngôn ngữ Java

Ngoại lệ (Exception) trong Java

Ví dụ

53

nếu ta không nhập vào đối số dòng lệnh giá trị nào

nếu ta không nhập vào đối số dòng lệnh giá trị nào

nếu ta nhập vào giá trị không phải là số nguyên

nếu ta nhập vào giá trị không phải là số nguyên

Chương trình không có phần xử lý ngoại lệChương trình không có phần xử lý ngoại lệ

Page 54: Giới thiệu sơ lược về ngôn ngữ Java

Ngoại lệ (Exception) trong Java

54

Chương trình có phần xử lý ngoại lệChương trình có phần xử lý ngoại lệ

Page 55: Giới thiệu sơ lược về ngôn ngữ Java

Ngoại lệ (Exception) trong Java

Sơ đồ thừa kế của Exception

55

Page 56: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

StreamNghĩa đen: là dòng chảy trong 1 ống

nướcVề mặt thuật ngữ: Stream là một dòng

liên tục, có thứ tự các bytes dữ liệu “chảy” giữa chương trình và các thiết bị ngoại vi:Stream nhập (in): nhận (read) dữ liệu từ thiết bị

ngoại vi.Stream xuất (out): xuất (write) dữ liệu ra thiết bị

ngoại vi.Stream lỗi (err): luồng lỗi chuẩn

56

Page 57: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Stream

57

Chương trình chỉ làm việc trên các stream nhập và stream xuất, mà không quan tâm đến đặc điểm riêng biệt của thiết bị ngoại vi nối với Stream.

Chương trình chỉ làm việc trên các stream nhập và stream xuất, mà không quan tâm đến đặc điểm riêng biệt của thiết bị ngoại vi nối với Stream.

Stream bao gồm những bytes rời rạc, không có định dạng cụ thể.

Stream bao gồm những bytes rời rạc, không có định dạng cụ thể.

Trừu tượng hóa việc xuất nhập

Trừu tượng hóa việc xuất nhập

Page 58: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Stream trong Java2 lớp cơ bản trong gói java.io

java.io.InputStream:  Stream nhậpjava.io.OutputStream: Stream xuấtDữ liệu không định dạng:

Nhập xuất theo từng ký tự hoặc Nhập xuất theo nhiều byte (byte[]).

58

Page 59: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Stream trong JavaCác lớp thừa kế từ InputStream và

OutputStream:Cung cấp các tiện ích nhập xuất theo nhiều

định dạng.FileInputStream, PipedInputStream,

ObjectInputStream, DataInputStream, BufferedReader, …

FileOutputStream, PipedOutputStream, ObjectOutputStream, DataOutputStream, PrintWriter, …

59

Page 60: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Sơ đồ thừa kế của InputStream

60

Page 61: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Sơ đồ thừa kế của InputStream

61

Page 62: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Sơ đồ thừa kế của OutputStream

62

Page 63: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Sơ đồ thừa kế của OutputStream

63

Page 64: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.InputStreampublic abstract int read() throws IOException:

nhận 1 ký tự• Là phương thức trừu tượng do lớp con cần

thay đổi để thích ứng với môi trường cụ thể.• Phương thức read() chờ và phong tỏa (làm

nghẽn – block) các đoạn mã sau nó cho tới khi 1 byte được đọc.• Việc xuất nhập diễn ra chậm → nên ưu tiên các

công việc quan trọng bằng cách đặt lệnh nhập xuất và tuyến đoạn riêng của nó

64

Page 65: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.InputStreampublic int read(byte b[]) throws IOException: nhận

nhiều ký tự• Đọc 1 dãy các byte dữ liệu liên tục → mảng b[]

public int read(byte b[], int offset, int len) throws IOException• Đọc 1 dãy các byte dữ liệu liên tục → mảng b[]

→ vị trí lưu bắt đầu từ offset, lưu len byte dữ liệu

public int available() throws IOException• Cho biết còn bao nhiêu byte trong luồng

65

Page 66: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.InputStreampublic long skip(long n) throws IOException

• Bỏ qua n byte dữ liệupubic void close() throws IOException

• Làm việc với luồng xong → đóng lại → giải phóng tài nguyên hệ thống

public synchronized void mark(int readLimit)• Đánh dấu vị trí hiện thời trong luồng

public void reset() throw IOException• Xác định lại vị trí luồng là vị trí đánh dấu lần

gần đây nhấtpublic boolean markSupported()

• True: luồng hỗ trợ đánh dấu. False: luồng không hỗ trợ đánh dấu 66

Page 67: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.InputStreamSystem.in là một InputStream nối kết

với bàn phím.Nhận các  ký tự nhập từ bàn phím.Thêm 2 ký tự kết thúc là ‘\r’ và ‘\n’ khi nhập

xong.=> Phải loại bỏ 2 ký tự đó khi sử dụng dữ liệu

nhận về.

67

Page 68: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Ví dụ 1 về java.io.InputStream

68

• Nhập từng ký tự từ bàn phím.• Hiển thị ra màn hình ký tự đó.• Kết thúc khi nhập vào ký tự q

• Nhập từng ký tự từ bàn phím.• Hiển thị ra màn hình ký tự đó.• Kết thúc khi nhập vào ký tự q

Page 69: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Ví dụ 2 về java.io.InputStream

69

• Nhập 1 chuỗi ký tự từ bàn phím.• Hiển thị ra màn hình chuỗi ký tự đó.• Kết thúc khi nhập vào chuỗi “EXIT”

• Nhập 1 chuỗi ký tự từ bàn phím.• Hiển thị ra màn hình chuỗi ký tự đó.• Kết thúc khi nhập vào chuỗi “EXIT”

Page 70: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Ví dụ 3 về java.io.InputStream

70

• Đọc nội dung 1 file vào vùng đệm.• Hiển thị ra màn hình nội dung đó.

• Đọc nội dung 1 file vào vùng đệm.• Hiển thị ra màn hình nội dung đó.

Page 71: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.OutputStreampublic abstract void write(int b) throws

IOException: viết byte b vào Stream hiện tại• Nếu byte b > 255 hoặc byte b < 0 → b=b

mod 256 trước khi ghi giá trị vào Streampublic void write(byte b[]) throws

IOException: ghi dữ liệu từ luồng vào toàn bộ mảng b

public void write(byte b[], int offset, int len) throws IOException: ghi 1 đoạn con của mảng dữ liệu, bắt đầu từ vị trí offset, tiếp tục cho đến khi hết len byte 71

Page 72: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.OutputStreampubic void flush() throws IOException: đẩy

các byte được lưu trong vùng đệm của stream ra thẳng thiết bị ngoại vi → dùng trong PrintWriter

pubic void close() throws IOException: đóng luồng, giải phóng tài nguyên gắn với luồng

72

Page 73: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Lớp java.io.OutputStreamSystem.out là một đối tượng thuộc lớp

PrintStream (thừa kế từ OutputStream), nối kết với màn hình.Cho phép xuất ra màn hình nhiều dạng dữ

liệu khác nhau.Có thể sử dụng các phương thức của

OutputStream.

73

Page 74: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Ví dụ về java.io.OutputStream

74

Page 75: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Ví dụ về java.io.OutputStream

75

Ghi 1 file với các dạng dữ liệu khác nhau

Ghi 1 file với các dạng dữ liệu khác nhau

Nội dung file kết quả Nội dung file kết quả

Page 76: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Nhập từ bàn phím 1 chuỗi Cách 1: Sử dụng lớp InputStream

Nhập vào 1 mảng byte[].Chuyển đổi từ mảng byte[] thành chuỗi.

76

byte b[] = new byte[100]; // Tạo vùng đệm cho mảng,

dự kiến là không quá 100 ký tự

int n = System.in.read(b); // Nhập dữ liệu từ bàn phím

và lưu vào mảng b[]

String str = new String(b, 0, n-2); // Chuyển đổi từ

mảng b[] sang chuỗi

byte b[] = new byte[100]; // Tạo vùng đệm cho mảng,

dự kiến là không quá 100 ký tự

int n = System.in.read(b); // Nhập dữ liệu từ bàn phím

và lưu vào mảng b[]

String str = new String(b, 0, n-2); // Chuyển đổi từ

mảng b[] sang chuỗi

Page 77: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Nhập từ bàn phím 1 chuỗi

77

Cách 2: Sử dụng lớp thừa kế BufferedReaderTạo ra 1 đối tượng BufferedReader từ System.inSử dụng hàm readLine() để nhập 1 chuỗi (có

xuống hàng).

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new Bufferedreader(isr);

// BufferedReader br = new BufferedReader(new

InputStreamReader(System.in));

String str = br.readLine(); // Kết quả nhập từ bàn phím sẽ lưu trong chuỗi str.

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new Bufferedreader(isr);

// BufferedReader br = new BufferedReader(new

InputStreamReader(System.in));

String str = br.readLine(); // Kết quả nhập từ bàn phím sẽ lưu trong chuỗi str.

Page 78: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Xuất ra 1 chuỗi Cách 1: Sử dụng lớp OutputStream

Chuyển đổi từ chuỗi cần ghi vào mảng byte[].Ghi mảng byte[] ra stream xuất.

78

OutputStream os = System.out;

String str = "Day la chuoi can xuat ra";

byte b[] = str.getBytes(); // Doi chuoi thanh mang byte[]

os.write(b);

OutputStream os = System.out;

String str = "Day la chuoi can xuat ra";

byte b[] = str.getBytes(); // Doi chuoi thanh mang byte[]

os.write(b);

Page 79: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Xuất ra 1 chuỗi Cách 2: Sử dụng lớp PrintWriter

Dùng các hàm print, println, … để xuất nhiều dạng dữ liệu.Gọi thêm lệnh flush() để đẩy dữ liệu từ vùng đệm ra ngoài.

79

Page 80: Giới thiệu sơ lược về ngôn ngữ Java

Java – Nhập xuất với Stream

Xuất ra 1 chuỗi Cách 2: Sử dụng lớp PrintWriter

80

Page 81: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

81

Mỗi quá trình có:• Thanh ghi bộ đếm chương trình• Thanh ghi trạng thái• Ngăn xếp• Không gian địa chỉ riêng

Trong hệ điều hành cổ điểnĐơn vị sử dụng CPU là quá trình (process)

Trong hệ điều hành cổ điểnĐơn vị sử dụng CPU là quá trình (process)

Trong hệ điều hành hiện đạiĐơn vị sử dụng CPU là luồng (thread)

Trong hệ điều hành hiện đạiĐơn vị sử dụng CPU là luồng (thread)

Mỗi luồng:• Có riêng bộ đếm chương trình, trạng thái thanh ghi và ngăn xếp.• Chia sẻ không gian địa chỉ=> Dễ dàng chia sẻ file, hiệu báo

Khái niệm:

Luồng cung cấp cơ chế tính toán và xử lý song song trong các ứng dụng.

Luồng cung cấp cơ chế tính toán và xử lý song song trong các ứng dụng.

Page 82: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

Các trạng thái Tương tự trạng thái của 1 quá trình: đang chạy

(running), sẵn sàng (ready), nghẽn (blocked) và kết thúc (Dead).

Mỗi hệ điều hành sẽ có cách cài đặt luồng khác nhau

=> sẽ có sơ đồ chuyển trạng thái cũng khác nhau.

82

Sơ đồ chuyển trạng thái của Thread sử dụng trong hệ điều hành Sun Solaris

Sơ đồ chuyển trạng thái của Thread sử dụng trong hệ điều hành Sun Solaris

Page 83: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

83

Nhờ vào luồng, người ta thiết kế các server có thể đáp ứng nhiều yêu cầu một cách đồng thời

Sử dụng luồng cho các server

Những luồng thực hiện hoạt động song song nhau và song song với cả luồng phân phát

Những luồng thực hiện hoạt động song song nhau và song song với cả luồng phân phát

Page 84: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

Luồng trong Java Luồng là 1 đối tượng thuộc lớp java.lang.Thread. Một chương trình trong java cài đặt luồng bằng cách

tạo ra một lớp con (extends) của lớp java.lang.Thread.

Thread có 3 phương thức cơ bản để điều khiển:public native synchronized void start()public void run() : các công việc thực sự của luồng.public final void stop() 

Luồng kết thúc khi:Tất cả các công việc trong  phương thức run() được

thực hiện.Hoặc phương thức stop() được kích hoạt.

84

Page 85: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

Ví dụ

85

Tạo ra 3 luồng thực thi song song việc đếm số từ 1 đến 50

Tạo ra 3 luồng thực thi song song việc đếm số từ 1 đến 50

Page 86: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

Luồng trong Java: Các phương thức khác của lớp java.lang.Thread

public static void sleep(long m) throws InterruptedException: Blocked trong khoảng m ms

public final void suspend(): chuyển từ Ready -> Blockedpublic final void resume(): chuyển từ Blocked -> Readypublic final void yield(): chuyển từ Running -> Ready

Các phương thức thừa kế từ java.lang.Objectpublic void wait(long m) throws InterruptedException:

dừng Thread trong m ms xác địnhpublic final void notify(): đánh thức 1 Thread trong hàng

đợipublic final void notifyAll(): đánh thức tất cả các Thread

trong hàng đợi.86

Page 87: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

Độ ưu tiên của luồngvoid setPriority( int x): Đặt độ ưu tiên của

luồng là x  int getPriority(): Trả về giá trị ưu tiên của

luồng.

87

Thread.MAX_PRIORITY = 10 Thread.NORM_PRIORITY = 5  Thread.MIN_PRIORITY  = 1

Thread.MAX_PRIORITY = 10 Thread.NORM_PRIORITY = 5  Thread.MIN_PRIORITY  = 1

Page 88: Giới thiệu sơ lược về ngôn ngữ Java

Luồng (Thread)

Đồng bộ hóa các luồngTrong 1 thời điểm, chỉ có 1 Thread thực thi

được phương thức có khai báo thuộc tính synchronized

88