Video: Lập trình Java - 19 Bài tập số ngẫu nhiên 2025
Hãy tưởng tượng một chương trình Java được nhập từ hai tệp tin khác nhau hoặc từ
Scanner
và một đĩa tập tin. Để đảm bảo rằng bạn dọn dẹp đúng cách, bạn đặt
đóng
phương thức gọi trong điều khoản
cuối cùng
.
nhập khẩu java. io. Tập tin;
nhập khẩu java. io. IOException;
nhập khẩu java. util. Máy quét;
lớp chính công khai chính {
public static void main (String args []) {
Máy scanner scan1 = null;
Máy quét scan2 = null;
thử {
scan1 = máy quét mới (tệp mới ("File1. Txt"));
scan2 = máy quét mới (tệp mới ("File2. Txt"));
// Thực hiện các công cụ hữu ích
} catch (IOException e) {
// Rất tiếc!
} cuối cùng {
scan1. gần();
scan2. gần();
Hệ thống. ngoài. println ("Đã xong!");
}
}
}
Về lý thuyết, máy tính luôn thi hành
scan1. close ()
và
scan2. close ()
bất kể lỗi xảy ra trong quá trình thực thi
hãy thử
khoản. Nhưng đó là lý thuyết. Trong thực tế, một lập trình khác (không phải bạn, tất nhiên) có thể sửa đổi mã bằng cách đóng
scan1
ở giữa
thử
khoản:
thử {
scan1 = máy quét mới (tệp mới ("File1.txt"));
scan2 = máy quét mới (tệp mới ("File2. Txt"));
// Các công cụ hữu ích mà còn …
scan1. gần();
scan1 = null;
} catch (IOException e) {
// Rất tiếc!
} cuối cùng {
scan1. gần();
scan2. gần();
Hệ thống. ngoài. println ("Đã xong!");
}
Bây giờ bạn có một tình huống khó khăn thực sự. Bên trong khoản
cuối cùng
, giá trị
scan1
là
null
. Cuộc gọi đến
scan1. close ()
không thành công, vì vậy chương trình sẽ ném
NullPointerException
và dừng chạy trước khi gọi đến
scan2. đóng ()
. Trong trường hợp tồi tệ nhất,
scan2
không bị đóng và chương trình của bạn có
File2. txt
bị khóa để không có chương trình khác có thể sử dụng tệp.
trở nên khá phức tạp. Bạn có thể
thử
câu lệnh trong phần
bắt
mệnh đề và tất cả các loại kết hợp điên. Nhưng Java có một cách tốt hơn để giải quyết vấn đề: Trong Java 7 (và các phiên bản Java mới hơn), bạn có thể tạo một
câu lệnh cố gắng với nguồn. Mã này cho bạn thấy như thế nào.
nhập khẩu java. io. IOException;
nhập khẩu java. util. Máy quét;
public class NewMain {
public static void main (String args []) {
try (Scanner scan1 = máy quét mới (mới File ("File1.txt ")); 999 Scanner scan2 = new Scanner (new File (" File2.txt "))) (
// Thực hiện các công cụ hữu ích
} catch (IOException e) {
// Rất tiếc
}
Trong đoạn mã này, các khai báo
scan1
và
scan2
nằm trong dấu ngoặc đơn sau chữ
try
Các khai báo được ngoặc đơn nói với Java để đóng
scan1
và
scan2 tự động sau khi thực hiện các câu lệnh trong > try
Bạn có thể khai báo một số tài nguyên bên trong một dấu ngoặc đơn
hãy thử
Khi bạn thực hiện, Java đóng tất cả các tài nguyên tự động sau khi thực hiện câu lệnh
hãy thử
Bạn có thể bạn có thể truy cập vào tất cả các loại tài nguyên (các file, cơ sở dữ liệu, các kết nối đến các máy chủ, và những người khác) và có sự yên tâm khi biết rằng Java sẽ tự động cắt đứt kết nối
Cuộc sống là tốt