Câu 1: Sửa chương trình sau để compile success (chọn 2 đáp án)
1 2 3 4 5 6 7 8 9 10 |
1. public class Foo implements AutoCloseable{ 2. public static void main(String[] args){ 3. try(Foo obj = new Foo()){ 4. System.out.println("x"); 5. } 6. } 7. public void close() throws Exception{ 8. throw new Exception("y"); 9. } 10. } |
A. Dòng thứ nhất xóa implements AutoCloseable
B. Dòng thứ 2 trong method main thêm throw Exception
C. Dòng thứ 7 method close xóa throws Exception
D. Dòng thứ 5 thêm catch(Exception e){}
E. Dòng thứ 5 thêm finally{}
Câu 2: Class implements những interface nào sau đây thì có thể sử dụng trong try-with-resources(chọn 2 đáp án)
A. Closeable
B. Exception
C. AutoCloseable
D. Serializable
E. RuntimeException
Câu 3: Câu nào sau đây là đúng (chọn 2 đáp án)
A. Code bình thường thì có thể dùng với try-catch
B. Code bình thường thì có thể dùng với try-finally
C. Code bình thường thì có thế dùng 1 trong try, catch, finally
D. try-with-resources có thẻ dùng với try-catch
E. try-with-resources có thể dùng với try-finally
F. try-with-resources có thể dùng với 1 trong try, catch, finally
Câu 4: Compile và chạy chương trình sau kết quả là (chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Test{ public static void main(String[] args){ try(Foo o1 = new Foo(); Bar o2 = new Bar()){ System.out.print("A "); } catch(Exception e) { System.out.print("B "); } finally { System.out.print("C "); } } static class Foo implements AutoCloseable { public void close() { System.out.print("D ");} } static class Bar implements java.io.Closeable{ public void close(){ System.out.print("E "); throw new RuntimeException() } } } |
A. A D B C
B. A E B C
C. A D E B C
D. A E D B C
E. Sau khi in ra A D sẽ báo runtime exception
F. Sau khi in ra A sẽ báo runtime exception
Câu 5: Chọn class là runtime Exception (chọn 3 đáp án)
A. SQLException
B DateTimeException
C. MissingResourceException
D. IOException
E. llegalStateException
F. Exception
Câu 6: Chọn đáp án đúng để compile success chương trình sau (chọn 3 đáp án)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test{ public static void main(String[] args) throws Foo{ try{ throw new Foo(); } catch(Foo e) { 「①」 throw e; } } static class Foo extends Exception { } static class Bar extends Foo{ } } |
A. Điền e = new Exception() vào ①
B. Điền e = new RuntimeException() vào ①
C. Điền e = new Foo() vào ①
D. Điền e = new Bar() vào ①
E. code hiện tại ko điền gì vào ① vẫn compile success
Câu 7: Chọn đáp án đúng để compile success chương trình sau (chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test{ public static void main(String[] args){ try{ throw new Foo(); } catch(Foo | RuntimeException e) { 「①」 throw e; } } static class Foo extends Exception { } static class Bar extends Foo{ } } |
A. Điền e = new Exception() vào ①
B. Điền e = new RuntimeException() vào ①
C. Điền e = new Foo() vào ①
D. Điền e = new Bar() vào ①
E. code hiện tại ko điền gì vào ① vẫn compile success
Câu 8: Câu nào sau đây nói đúng về khi tạo class Exception riêng (chọn 1 đáp án)
A. Nhất định phải có construtor ko tham số và construtor có tham số là kiểu String
B. Chỉ có thể tạo class của uncheck exception
C. Chỉ có thể tạo class của checked Exception
D. Nhất định phải override toString(), equals(), hashCode()
E. Phải implement Serializable interface
F. Các đáp án trên đều sai
Câu 9: Câu lệnh để chạy chương trình sau với AsertionError là (chọn 2 đáp án)
1 2 3 4 5 6 |
public class Test{ public static void main(String[] args){ java.util.ArrayList<String> list = null; assert list != null; } } |
A. java Test
B. java -da Test
C. java -ea Test
D. java -ea -da Test
E. java -da -ea:Test Test
F. java -ea -da: Test Test
Câu 10: Điền code vào chỗ trống ① để tạo ra AssertionError khi chạy lệnh java -ea Test(chọn 2 đáp án)
1 2 |
int val = 10; 「①」 |
A. assert (val < 0:”A”);
B. assert (val < 0):”A”;
C. assert val < 0:(“A”);
D. assert val < 0,”A”;
E. assert val < 0:”A”;
Câu 11: Kết quả khi chạy lệnh java Test a là gì (chọn 1 đáp án)
1 2 3 4 5 6 |
public class Test{ public static void main(String[] args){ if(args.length <= 2) assert false; System.out.println(args[0] + args[1]); } } |
A. a
B. Test a
C. AssertionError
D. ArrayIndexOutOfBoundsException
E. compile error
- Method của class cha ko throw exception => method của class con ko throw hoặc có thể throw runtime exception
- Class nào được implement Interface AutoCloseable thì sẽ tự động gọi method close sau khi kết thúc code trong {}
Ví dụ:
1 2 3 4 |
Try(ClassImplementAutoCloseable obj = new ClassImplementAutoCloseable()){ //TODO } //method close của ClassImplementAutoCloseable sẽ tự động dc gọi ở đây |
- Có thể xử dụng try – with- resoruce với các class java.io.Closeable và java.lang.AutoCloseable
- Catch nhiều exception trong cùng 1 câu lệnh thì biến lưu exception sẽ tự động thành kiểu final
- Assert expression: output hoặc Assert (expresssion):output
- Để chạy assert cần run với time số như sau: java -ea
- e.getSuppressed() sẽ lấy ra những exception bị bỏ qua khi dùng try with resource. (exception sinh ra từ method close() khi dùng try with resource sẽ bị bỏ qua nếu bên trong try{} có exception)
- AutoCloseable của java.lang => throw Exception, còn Closeable của java.io => throw IOExcetion
- throw nếu trong method, throws nếu ngoài method
- getCause khi có throw 2 lần exception.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
try { x(); } catch(Throwable e) { System.out.println(e.getMessage()); e = e.getCause(); } static void x() throws Exception { try{ y() } catch(Exception e){ throw new Exception("exception in x()", e); } } |
- multi exception trong 1 catch thì ko dc dùng các exception có quan hệ kế thừa.
Đáp án:
- B D
- A C
- A B
- D
- B C E
- C D E
- E
- F
- C E
- B E
- D