1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng lập trình java - Bài 6 docx

19 425 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 168,28 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lê đình Thanh, Các lớp thiết yếu trong JavaBắt và xử lý ngoại lệ Call Stack main writeList PrintWriter FileWriter main writeList PrintWriter FileWriter Tìm handler Tìm handler Ném Chuyển

Trang 1

Lê đình Thanh, Các lớp thiết yếu trong Java

Lê đình Thanh

Bộ môn Mạng và Truyền thông Máy tắnh Khoa Công nghệ Thông tin Trường đại học Công nghệ, đHQGHN

Bài giảng

LẬP TRÌNH JAVA

Các lớp thiết yếu

Bài 6

Trang 2

Lê đình Thanh, Các lớp thiết yếu trong Java

Nội dung

Ớ Xử lý ngoại lệ

Ớ Vào, ra cơ bản

Ớ Xử lý ựồng thời

Ớ Biểu thức chắnh quy

Ngoại lệ

Ớ Ngoại lệ (exception hay exceptional event) là sự kiện xảy

ra trong khi thực thi chương trình và phá vỡ luồng ựiều khiển của chương trình

Ớ Khi lỗi xuất hiện

Ớ Phương thức xuất hiện lỗi tạo ựối tượng ngoại lệ (exception object) chứa thông tin về lỗi và gửi cho hệ thống thực thi (runtime system) Việc tạo và gửi ựối tượng ngoại lệ cho hệ thống thực thi ựược gọi làném(throw) ngoại lệ

Ớ Hệ thống thực thi tìm ngượcchuỗi triệu gọi(call stack) phương thức ựể tìm ra phương thức chứa ựoạn mã xử lý ngoại lệ (exception handler)

Trang 3

Lê đình Thanh, Các lớp thiết yếu trong Java

Xử lý ngoại lệ

for the exception handler

Bắt và xử lý ngoại lệ

try {

//mã chương trình xử lý nghiệp vụ

}

catch (ExceptionType1 e) {

//mã xử lý ngoại lệ nếu ngoại lệ thuộc kiểu ExceptionType1

}

[catch (ExceptionType2 e) {

//mã xử lý ngoại lệ nếu ngoại lệ thuộc kiểu ExceptionType2

}

finally {

//mã thực thi bất kể ngoại lệ xảy ra hay không

}]

Trang 4

Lê đình Thanh, Các lớp thiết yếu trong Java

Bắt và xử lý ngoại lệ

Entering try statement Closing PrintWriter

Mã ựược thực thi

Kết quả in ra màn hình

Bắt và xử lý ngoại lệ

Entering try statement Caught IOException: OutFile.txt

PrintWriter not open

Mã ựược thực thi

Kết quả in ra màn hình

Trang 5

Lê đình Thanh, Các lớp thiết yếu trong Java

Bắt và xử lý ngoại lệ

Call Stack

main

writeList

PrintWriter

FileWriter

main writeList PrintWriter

FileWriter

Tìm handler

Tìm handler

Ném

Chuyển tiếp

Bắt

Ném ngoại lệ

Ớ Mọi ngoại lệ ựều phải ựược phát sinh ở một phương thức trước khi ựược chuyển tiếp và bắt ở các phương thức triệu gọi

Ớ Một phương thức có thể phát sinh ngoại lệ và phương thức triệu gọi có thể bắt và xử lý

Ớ Áp dụng khi viết gói, vắ dụ gói xử lý danh sách

Ớ để người viết ứng dụng có thể xử lý theo ý của họ

public Object pop() {

Object obj;

if (size == 0) { throw new EmptyStackException(); }

obj = objectAt(size - 1);

setObjectAt(size - 1, null);

size ;

return obj;

}

Trang 6

Lê đình Thanh, Các lớp thiết yếu trong Java

Chuyển tiếp ngoại lệ

Ớ Một phương thức có thể không bắt và xử lý ngoại lệ mà chuyển tiếp cho phương thức ựã triệu gọi nó (phương thức liền trước trong chuỗi triệu gọi)

Ớ Áp dụng khi viết gói, vắ dụ gói xử danh sách

Ớ để người viết ứng dụng có thể xử lý theo ý của họ

public void writeList() throws IOException,

ArrayIndexOutOfBoundsException {

PrintWriter out = new PrintWriter(new

FileWriter("OutFile.txt"));

for (int i = 0; i < SIZE; i++) {

out.println("Value at: " + i + " = " + vector.elementAt(i)); }

out.close();

}

Các lớp ném ựược

Ớ Các lớp Error ựịnh nghĩa các sự cố nghiêm trọng, thuộc JVM Các ứng dụng thường không ném và bắt Error

Ớ Các lớp Exception ựịnh nghĩa các ngoại lệ khi viết gói

Trang 7

Lê đình Thanh, Các lớp thiết yếu trong Java

định nghĩa lớp ngoại lệ

Lê đình Thanh, Các lớp thiết yếu trong Java

Ớ định nghĩa lớp ngoại lệ ứng với các ngoại lệ phát sinh trong lớp ựược ựịnh nghĩa

Vắ dụ, lớp LinkedList với các phương thức

objectAt(int n) Ở Lấy ựối tượng ở vị trắ thứ n Ờ Ném ngoại lệ

InvalidIndexException nếu n < 0 hoặc n >= size

firstObject() Ở Lấy ựối tượng ựầu tiên Ờ Ném ngoại lệ EmptyListException khi

danh sách rỗng

indexOf(Object o) Ở Tìm ựối tượng Ờ Ném ngoại lệ ObjectNotFoundException nếu

không tìm thấy.

Lợi ắch của sử dụng ngoại lệ

Ớ Tách mã xử lý lỗi với các mã xử lý nghiệp vụ

Ớ Chuyển tiếp lỗi lên các phương thức ở trên

Trang 8

Lê đình Thanh, Các lớp thiết yếu trong Java

Vào/ra cơ bản

Ớ Vào/ra với tệp (File I/O)

Các dòng vào/ra

Ớ Một dòng vào/ra (I/O stream) biểu diễn một nguồn

vào/ựắch ra dữ liệu

Ớ Có thể biểu diễn nhiều nguồn/ựắch khác nhau: bộ ựệm, tệp, thiết bị, chương trình khác

Ớ Hỗ trợ nhiều kiểu dữ liệu khác nhau: byte, dữ liệu nguyên thủy, ựối tượng

Ớ Phương thức cơ bản: read()/write(data)

Trang 9

Lê đình Thanh, Các lớp thiết yếu trong Java

Byte streams

Ớ Biểu diễn dòng dữ liệu gồm các bytes liên tiếp

FileInputStream in = null;

FileOutputStream out = null;

try {

in = new FileInputStream("xanadu.txt");

out = new FileOutputStream("outagain.txt");

int c;

while ((c = in.read()) != -1) { out.write(c); }

} finally {

if (in != null) { in.close(); }

if (out != null) { out.close(); }

}

Character Streams

Ớ Biểu diễn dòng các ký tự liên tiếp

Ớ Tự ựộng chuyển ựổi các mã thành Unicode

Dòng vào: XXXInputReader, phương thức ựọc int read()

Dòng ra: XXXOutputWriter, phương thức ghi write( int)

Mã ký tự ựược lưu ở 16 bit thấp của int

FileReader in = null; FileWriter out = null;

try {

in = new FileReader("xanadu.txt");

out = new FileWriter("outagain.txt");

int c;

while ((c = in.read()) != -1) { out.write(c); }

} finally {

if (in != null) { in.close(); }

if (out != null) { out.close(); }

}

Trang 10

Lê đình Thanh, Các lớp thiết yếu trong Java

đọc/ghi theo dòng

Ớ Character stream thường chứa nội dung của cả văn bản: gồm nhiều dòng (lines) văn bản

Ớ Một line là một chuỗi ký tự kết thúc bằng ký tự xuống dòng:

Ổ\r\nỖ, Ổ\nỖ hoặc Ổ\rỖ

Ớ đọc/ghi cả dòng văn bản là phương pháp hiệu quả hơn ựọc từng ký tự

BufferedReader in = null; PrintWriter out = null;

try {

in = new BufferedReader(new FileReader("xanadu.txt"));

out = new PrintWriter(new FileWriter("outagain.txt"));

String l;

while ((l = in.readLine()) != -1) { out.println(l); }

} finally {

if (in != null) { in.close(); }

if (out != null) { out.close(); }

}

Buffered Streams

Ớ Các dòng không ựệm (unbuffered) như FileInputStream, FileReader, Ầ làm việc trực tiếp với HđH, các thao tác ựọc ghi ựược quản lý trực tiếp bởi HđH

Ớ Thao tác ựọc: ựọc từ thiết bị

Ớ Thao tác ghi: ghi ngay ra thiết bị

Ớ Không hiệu quả vì nhiều lần phải truy cập ựĩa, mạng, Ầ

Ớ Giải pháp: Sử dụng dòng ựệm (buffered) ựể ựọc/ghi cả khối

=> ắt lần truy cập phần cứng

Ớ đọc: Khi vùng ựệm rỗng, ựọc từ nguồn vào ựầy ựệm

Ớ Ghi: Khi vùng ựệm ựầy, ghi tất cả vào ựắch

Ớ Nếu cần chủ ựộng ghi ra ựắch khi chưa ựầy ựệm: Gọi flush()

Trang 11

Lê đình Thanh, Các lớp thiết yếu trong Java

Scanner

Ớ Cung cấp các phương thức ựể ựọc từng từ tố (token) trong character stream, phân loại từ tố (số nguyên, số thập phân,

Ầ)

Ớ Từ tố ựơn thuần là xâu ký tự Character stream là dãy liên tiếp các từ tố và các từ phân cách (separator/delimiter) Giữa hai từ phân cách liên tiếp là một từ tố Giữa hai từ tố có thể có nhiều từ phân cách

Ớ Mặc ựịnh, dấu trắng (blank, tab, dấu câu, Ầ) ựược dùng làm

từ phân cách

Ớ để kiểm tra một ký tự có phải là dấu trắng hay không

Character.isWhitespace.

useDelimiter(",\\s*")

Scanner

Ớ đọc các từ tố

import java.io.*;

import java.util.Scanner;

Scanner s = null;

try {

s = new Scanner(new BufferedReader(new

FileReader("xanadu.txt")));

while (s.hasNext()) { System.out.println(s.next()); }

} finally { if (s != null) { s.close(); } }

Trang 12

Lê đình Thanh, Các lớp thiết yếu trong Java

Scanner

Ớ đọc từ tố ựược phân loại

s.useLocale(Locale.US);

while (s.hasNext()) {

if (s.hasNextDouble()) {

sum += s.nextDouble();

}

else {

s.next();

}

}

Printing and Formatting

Ớ Hai lớp cơ sở thực cung cấp phương thức print, println và format là

Ớ PrintWriter: một chacracter stream

Ớ PrintSteam: một byte stream

print và println

Ớ Có một tham số có kiểu nguyên thủy

Ớ Biến ựổi một giá trị thành xâu và in xâu

int i = 2; double r = Math.sqrt(i);

System.out.print("The square root of "); System.out.print(i); System.out.print(" is ");

Trang 13

Lê đình Thanh, Các lớp thiết yếu trong Java

Printing and Formatting

format

Ớ Có một hoặc nhiều tham số bất kỳ

Ớ Tham số ựầu tiên là xâu ký tự có thể chứa ký tự ựịnh dạng (%d, %f, %s, Ầ)

Ớ Các tham số tiếp theo có kiểu nguyên thủy

Ớ Thay ký tự ựịnh dạng thứ i trong xâu tham số thứ nhất bằng biểu diễn giá trị tham số thứ i+1 theo ựịnh dạng ựược xác ựịnh bởi ký tự ựịnh dạng thứ i Trả về xâu tham số thứ nhất ựã ựược thay các ký tự ựịnh dạng bằng giá trị tham

số phắa sau

int i = 2; double r = Math.sqrt(i);

System.out.format("The square root of %d is %f.%n", i, r);

Vào/ra với dòng lệnh

System.in Ờ là một byte stream để dùng như một

character stream, sử dụng lớp baoInputStreamReader

InputStreamReader cin = new

InputStreamReader(System.in);

System.out và System.err Ờ là các byte streams nhưng có

thể mô phỏng character stream

Console - sử dụng thay thế cho các dòng vào/ra chuẩn với

các phương thức thuận tiện hơn: readLine, readPassword, format, Ầ

Trang 14

Lê đình Thanh, Các lớp thiết yếu trong Java

Data Stream

Ớ Các dòng vào/ra cho các kiểu dữ liệu nguyên thủy

Ớ Hai lớp hay dùng là DataInputStream với các phương thức readTTT, và DataOutputStream với các phương thức writeTTT, trong ựóTTT là tên kiểu dữ liệu nguyên thủy

out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));

out.writeDouble(price);

out.writeInt(unit);

out.writeUTF(desc);

in = new DataInputStream(new BufferedInputStream(new

FileInputStream(dataFile)));

price = in.readDouble();

unit = in.readInt();

desc = in.readUTF();

Object Stream

Ớ Dòng vào/ra cho ựối tượng

Ớ Các ựối tượng có thể ghi vào/ựọc từ dòng phải thuộc lớp cài ựặt giao diện Serializable

Ớ Hai lớp hay dùng là ObjectInputStream với phương thức readObject() và ObjectOutputStream với phương thức writeObject(obj)

Ớ Khi ghi vào/ựọc ra một ựối tượng, các ựối tượng ựược tham chiếu cũng ựược ghi/ựọc theo

Trang 15

Lê đình Thanh, Các lớp thiết yếu trong Java

Object Stream

Ớ Một dòng chỉ lưu ựối tượng duy nhất một lần, nếu ghi nhiều lần thì nhiều tham chiếu ựược ghi

Ớ Nếu ghi một ựối tượng vào hai dòng khác nhau thì khi ựọc ra ựược 2 ựối tượng khác nhau

Môi trường nền

Ớ Môi trường nền (platform environment) = hệ ựiều hành, máy

ảo Java, thư viện các lớp, dữ liệu cấu hình

Ớ CácAPI ựể cấu hình môi trường nền:

Ớ Các tiện ắch cấu hình

Ớ Thông số cấu hình

Ớ Biến môi trường

Ớ Các tiện ắch hệ thống

Ớ Thông số hệ thống

Ớ Quản lý an ninh (tự ựọc)

Ớ Một số phương thức hệ thống (tự ựọc)

Ớ CLASS và CLASSPATH (tự ựọc)

Trang 16

Lê đình Thanh, Các lớp thiết yếu trong Java

Thông số cấu hình

Một thông số cấu hình là một cặp xâu ký tự khóa/giá trị, vắ dụ

LastBrowsedTabs=Ộhttp://dantri.com.vn;http://uet.vnu.edu.vnỢ

Ớ Các thông số cấu hình ựược lưu ở một tệp cấu hình (thường ở dạng văn bản), ựược chương trình ựọc vào khi khởi ựộng và lưu lại trước khi kết thúc

Trong thời gian thực thi, chương trình sử dụng ựối tượng Properties ựể

thao tác với các thông số cấu hình

Properties

-k1 v1 k2 v2

-load(is) store(os)

Tệp cấu hình

-k1 v1

k2 v2

FileOutputStream

Thông số cấu hình

Ớ đọc cấu hình từ tệp

Properties applicationProps = new Properties();

FileInputStream in = new

FileInputStream("appProperties.config");

applicationProps.load(in);

in.close();

Ớ Ghi cấu hình ra tệp

FileOutputStream out = new FileOutputStream("

appProperties.config ");

applicationProps.store(out, " -Comments -");

Trang 17

Lê đình Thanh, Các lớp thiết yếu trong Java

Thông số cấu hình

Ớ Properties cung cấp hàng loạt các phương thức ựể ựọc và cập nhật thông số

getProperty(String key)

getProperty(String key, String default)

setProperty(String key, String value)

contains(Object value)

containsKey(Object key)

list(PrintStream s)

list(PrintWriter w)

elements()

keys()

propertyNames()

stringPropertyNames()

size()

remove(Object key)

Properties kế thừa Hashtable cài ựặt một bảng băm nên các thao tác tìm theo khóa rất hiệu quả

Tham số dòng lệnh

Ớ Khi gọi một chương trình bằng lệnh java TenCT, chúng ta

có thể cung cấp các tham số cho chương trình

public class SomeClass {

public static void main (String[] args) {

for (String s: args) { System.out.println(s); } }

}

java SomeClass ỘA sunny dayỢ ỘWe go outỢ

A sunny day

We go out

Trang 18

Lê đình Thanh, Các lớp thiết yếu trong Java

Biến môi trường

Ớ Java cung cấp phương thức ddocj các biên môi trường

import java.util.Map;

public class EnvMap {

public static void main (String[] args) {

Map<String, String> env = System.getenv(); for (String envName : env.keySet()) {

System.out.format("%s=%s%n", envName, env.get(envName));

}

}

}

//String value = System.getenv(env);

Thông số hệ thống

Ớ Lớp System chứa một ựối tượng Properties ựể quản lý các thông số hệ thống như tên hệ ựiều hành, thư mục cài ựặt JRE, Ầ

Ớ đọc thông số hệ thống

Properties System.getProperties()

String System.getProperty(tenTS);

Ớ Thay ựổi thông số hệ thống

System.setProperties(Properties p);

Trang 19

Lê đình Thanh, Các lớp thiết yếu trong Java

Thông số hệ thống

Ớ Lớp System chứa một ựối tượng Properties ựể quản lý các thông số hệ thống như tên hệ ựiều hành, thư mục cài ựặt JRE, Ầ

Ớ đọc thông số hệ thống

Properties System.getProperties()

String System.getProperty(tenTS);

Ớ Thay ựổi thông số hệ thống

System.setProperties(Properties p);

Tiếp theo

Ứng dụng CSDL

Ngày đăng: 11/08/2014, 09:25

TỪ KHÓA LIÊN QUAN