Tổng hợp đề thi final hay nhất by Trần Trung
Câu 1
Giải thích:
Lớp Test kế thừa từ lớp Base. Lớp Test có hai hàm khởi tạo với các
tham số khác nhau. Hàm khởi tạo đầu tiên trên dòng 2 có một tham số là
int. Hàm khởi tạo thứ hai trên dòng 4 có hai tham số là int và gọi
constructor của superclass Base với hai tham số int bằng cách sử dụng
từ khóa super trên dòng 5.
Với đề bài này, chúng ta cần tìm các cuộc gọi hợp lệ để tạo một đối
tượng của lớp Test. Các cuộc gọi sau đây là hợp lệ:
C. `Test t = new Test(1);
- Cuộc gọi này gọi constructor trên dòng 2 với một tham số int. cuộc
gọi sau đây không hợp lệ:
A. `Test t = new Test(1, 2, 3);`
- Cuộc gọi này truyền tham số vào constructor của lớp Test, nhưng chỉ
có hai constructor được định nghĩa trong lớp Test. Do đó, cuộc gọi này
không hợp lệ.
B. `Test t = new Test; Cuộc gọi này không chứa tham số nào cho
constructor của lớp Test. Vì vậy, nó không hợp lệ. Nếu bạn muốn gọi
constructor mà không có tham số, bạn ph sửụng dấu ngoặc đơn: `Test t =
new Test();`
2. Which of the following is the correct syntax for suggesting that the JVM performs garbage collection?
Dưới đây là cú pháp chính xác để gợi ý JVM thực hiện thu gom rác:
System.gc();
Cú pháp "System.gc()" được sử dụng để yêu cầu hoặc gợi ý cho Java
Virtual Machine (JVM) thực hiện thu gom rác. Phương thức "gc()" được
định nghĩa trong lớp "System" và sẽ gọi đến trình quản lý bộ nhớ của
JVM để xóa bỏ các đối tượng không sử dụng nữa trong bộ nhớ.
3. if(check4Biz(storeNum) != null) {}
Referring to the above, what data type could be returned by method
check4Biz()? (Select two)
Trong đoạn mã trên, phương thức "check4Biz()" có thể trả về hai kiểu dữ liệu là String và Boolean, tùy thuộc vào cách định nghĩa của phương thức này. Kiểu char, byte và int không thể được trả về trong trường hợp này.
Câu 4
Đáp án: B. Dòng 15 tạo một thư mục có tên là "dir" và một tập
tin có tên là "fi.txt" bên trong nó.
Trong đoạn mã trên, dòng 14 tạo một đối tượng File để tham chiếu đến
thư mục "dir". Dòng 15 tạo một đối tượng File khác để tham chiếu đến
tập tin "fi.txt" trong thưục "dir" đã được tạo trước đó. Chú ý rằng
phương thức exists() được sử dụng để kiểm tra xem tập tin đã tồn tại
hay chưa, và nếu tập tin không tồn tại, dòng 17 sẽ tạo một tập tin mới
có tên là "fi.txt" trong thư mục "dir" đã được tạo trước đó. Vì vậy,
đáp án là B.
5. Which of the following is INCORRECT?
char c=\u1234;
B. char c = 0x1234;
C. String x = "ABC" +2;
D. char c = '\u1234";
Câu trả lời là: D. char c = '\u1234"; (Sai vì thiếu dấu nháy đơn ở
cuối).
6. Select a correct statement
A void f(double d. int...x, int y){}
B. void f(int x, int... y) {}
C. void f(int... x, int y) {}
void f(int x, int... y) {}
Chọn một câu đúng:
B. void f(int x, int... y) {}
Các câu A, C và D đều sai vì kiểu hàm void không chấp nhận số lượng
tham số không xác định trong danh sách tham số, nhưng chỉ chấp nhận
một danh sách các tham số xác định với kiểu và số lượng cho trước. Các
câu trên đều chứa sai sót về cú pháp cụ thể của kiểu hàm và danh sách
tham số.
Câu 7
Giá trị được in ra tại dòng 6 là 101.
Ở dòng 4, đoạn mã tạo một đối tượng Holder mới được gán cho biến h.
Ở dòng 5, giá trị của held trong đối tượng h đã được gán bằng 100.
Ở dòng 6, phương thức bump() được gọi bằng cách truyền vào đối tượng
h. Phương thức bump() cộng giá trị held trong đối tượng được truyền
vào lên 1.
Khi phương thức bump() được gọi, đối tượng được truyền vào là h, do đó
held trong đối tượng sẽ tăng lên 1 và giá tr mới là 101.
Ở dòng 7, giá trị held của đối tượng h được in màn hình và giá trị này
là 101.
8. Given:
11. public interface Status {
12 /*insert code here */ int MY_VALUE = 10.
13.}
Which three are valid on line 12? (Select three)
C. static
D. final
E. public
Các từ khóa hợp lệ trên dòng 12 là "static", "final" và "public". "static" biểu thị rằng biến "MY_VALUE" được liên kết với giao diện và không yêu cầu thể hiện của lớp được tạo trước. "final" biểu thị rằng giá trị của biến "MY_VALUE" không thể thay đổi sau khi được gán. "public" biểu thị rằng biến "MY_VALUE" có thể truy cập từ bên ngoài giao diện.
Câu 9
Đáp án là A. Khi biên dịch, trình biên dịch sẽ tìm thấy lớp Abs
kế thừa lớp Base và triển khai phương thức amethod(). Trong phương
thức này, Abs cũng gọi phương thức myfunc() trong lớp cùng tên của
mình, và in ra chuỗi "My Func" ở đó.
Vì vậy, khi bạn khởi tạo một đối tượng Abs và gọi phương thức
amethod(), chuỗi sẽ được in ra màn hình mà không gặp lỗi.
Câu 10:
Trong đoạn mã này, có thể chèn vào chỗ comment "//Method Here" hai
phương thức sau:
A. void amethod(long i) throws Exception {}
B. public void amethod(int i) throws Exception {}
Cả hai phương thức này đều có thể được sử dụng vì chúng có cùng tên
với phương thức của lớp cha và đều không phải là các phương thức tĩnh.
Tuy nhiên, chỉ có phương thức "public void amethod(int i) throws
Exception {}" có từ khóa "throws" để ném ra ngoại lệ.
C và D là sai vì chúng không có từ khóa "throws Exception" trong khai
báo phương thức. Vì vậy, khi một ngoại lệ xảy ra trong phương thức,
chúng ta không thể xử lý nó bên trong phương thức, mà sẽ phải xử lý nó
ở một nơi khác trong chương trình. Nếu ta cố gắng để thêm từ khóa
"throws Exception" vào phương thức C, như trong "void amethod(int i)
throws Exception {}", mà không có sự xử lý chính thức của ngoại lệ,
chương trình sẽ bị lỗi tại thời điểm biên dịch.
Câu 11
Which one statement is true about the following code fragment?
1. import java.lang.Math;
2. Math myMath = new Math();
3. System.out.println("cosine of 0.123="+ myMath.cos(0.123));
Câu lệnh trên sẽ không biên dịch thành công do dòng thứ hai sử dụng cú
pháp tạo đối tượng mới cho lớp Math, trong khi Math là một lớp tĩnh
(static class) và không yêu cầu được khởi tạo đối tượng mới.
Câu 12
class Base
public class MyCast extends Base{
static boolean b1=false;
static int i = -1;
static double d = 10.1;
public static void main(String argv[]){
MyCast m = new MyCast();
Base b = new Base();
//Here
}
}
A. b=m;
B. m=b;
C. d=i;
D. b1=i;
Câu lệnh ở chỗ trống để gán đối tượng m vào biến b là: b = m (đáp
án A).
Các đáp án khác là sai:- m = b (đáp án B) là phép gán đối tượng của
lớp cha vào biến của lớp con, điều này không khả thi vì đối tượng của
lớp cha không thể chứa được các thành phần của lớp con.
- d = i (đáp án C) trộn lẫn giữa các kiểu dữ liệu khác nhau, điều này
không thể thực hiện được.
- b1 = i (đáp án D) trộn lẫn giữa kiểu boolean và kiểu số nguyên,
tương tự như đáp án C, không thể thực hiện được.
Câu 13
1. Dog rover, fido;
2. Animal anim; ;
3. ;
4. rover = new Dog();;
5. anim = rover, ;
6. fido (Dog)anim; ;
Where: ;
Mammal extends Animal Dog extends Mammal;
Which of the following statements is true? ;
A. Line 5 will not compile. ;
B. Line 6 will not compile. ;
C. The code will compile but will throw an exception at line 6. ;
D. The code will compile and run. ;
Đáp án: D. Mã sẽ biên dịch và chạy mà không có lỗi nào xảy ra. ;
Mã sẽ biên dịch được vì không có lỗi cú pháp. Tại dòng 4, đối tượng
Dog mới sẽ được tạo và gán vào biến rover. Tại dòng 5, biến rover đã
được gán cho anim, biến kiểu Animal. Điều này hoàn toàn hợp lệ, vì tất
cả các lớp con (subclasses) của Animal đều được coi là Animal. Cuối
cùng, tại dòng 6, fido sẽ được gán với một thể hiện (instance) của lớp
Dog, dựa trên thể hiện của Animal đã được ép kiểu lên lớp Dog. Vì vậy,
mã sẽ biên dịch và chạy mà không có lỗi nào xảy ra.
Câu 14
Given the following method definition in a class that otherwise
compiles correctly:
1. public boolean testAns(String ans,int n){
2 boolean rslt;
3. if(ans.equalsIgnoreCase("YES") && n> 5 ) rsit = true; 4. return
rslt; 5.}
What will be the result of trying to compile the class and execute the
testAns() method wit 5?
A. A runtime exception will be thrown in the testAns method.
B. A result of false will be returned.
C. A compiler error will prevent compilation.
D. A result of true will be returned
Kết quả khi biên dịch lớp và thực thi phương thức testAns() với đầu
vào là 5 sẽ là một biên dịch lỗi do biến rslt chưa được khởi tạo trước
khi sử dụng. Vì vậy, đáp án là C.
Câu 15:Given the following method definition in a class that otherwise compiles correctly:
1. public boolean testAns(String ans,int n){
2 boolean rslt;
3. if(ans.equalsIgnoreCase("YES") && n> 5 ) rsit = true; 4. return
rslt; 5.}
What will be the result of trying to compile the class and execute the
testAns() method wit 5?
A. A runtime exception will be thrown in the testAns method.
B. A result of false will be returned.
C. A compiler error will prevent compilation.
D. A result of true will be returned
Đáp án: B. Một kết quả sai sẽ được trả về. Việc so sánh chuỗi "YES" với `ans` là không phân biệt chữ hoa và thấp, và `n` cần phải lớn hơn 5 cho kết quả là true. Trong trường hợp này, giá trị của `n` là 5, do đó điều kiện trong if sẽ không được thỏa mãn và giá trị false sẽ được trả về. Tuy nhiên, có một lỗi chính tả trong câu lệnh gán giá trị cho result (rsit thay vì rslt) mà làm cho chương trình không hoạt động đúng.
Câu 16
33. try {
34. // some code here
35. }catch (NullPointerException +1){
36. System.out.print("a");
37. }catch (RuntimeException e2) {
38. System.out.print("b"); 39.} finally {
40. System.out.print("c");
41.}
What is the result if a NullPointerException occurs on line 34?
A. c
B. a
C. ab
D. ac
Nếu một NullPointerException xảy ra trên dòng 34, kết quả sẽ là: B. a (chỉ in ra ký tự "a" vì đã được xử lý trong khối catch chứ không tiếp tục vào khối catch tiếp theo). Sau đó, khối finally được thực hiện và in ra "c". Vì vậy, kết quả cuối cùng là "ac".
17. Select correct code snippet:
A. double a = \{3, 2, 8, 4\} for(double x: a) System.out.printin(x);
B. double] a = \{3, 2, 8, 4\} double x; for(x: a)
System.out.println(x);
C. double a = \{3, 2, 8, 4\} for(int i: a) System.out.println(a[i]);
D. double a = \{3, 2, 8, 4\} for(int i: a) System.out.println(i);
Đoạn mã đúng là A: double a = {3, 2, 8, 4};
for(double x : a) {
.printin(x);
}
Giải thích:
- Đầu tiên, đoạn mã khai báo mảng một chiều "a" gồm các phần tử số
thực.
- Sau đó, vòng lặp for-each được sử dụng để duyệt qua các phần tử của
mảng "a". Biến "x" đại diện cho từng phần tử được truy cập trong mỗi
lần lặp.
- Trong thân vòng lặp, phương thức "System.out.printin()" được sử dụng
để in giá trị của biến "x" ra màn hình.
18. What is the output when you try to compile and run the following program?
public class Main {
public static void main(String argv[]){
String s = "Hi there";
int pos = s.indexOf(" ");
String rs.substring(0, pos);
String s2 = new String(new char[] {'H','T});
if(r.equals(s2))
System.out.println("EQUAL");
else
System.out.println("NOT EQUAL"); System.out.println();
}
A. EQUAL
B. NOT EQUAL
C. EQUAL NOT EQUAL
Sau khi chương trình chạy, nó sẽ in ra "NOT EQUAL". Lý do là vì có lỗi
cú pháp trong chương trình. Chính xác hơn, do dòng lệnh `String
rs.substring(0, pos)` không được gán giá trị cho một biến nên sẽ gây
ra lỗi biên dịch. Chương trình sẽ không biên dịch thành công và sẽ
không thực thi dòng lệnh if/else để in ra thông báo "EQUAL" hoặc "NOT
EQUAL".
19. Study the following Java statements:
String s1= "Hello";
String s2= "Hello";
String s3= "Hello";
String s4= new String("Hello");
How many strings, specified by the above code, are stored in the
memory of the program?
A. 2
B. 1
C. 4
D. None of the others
Trong đoạn mã trên, có tổng cộng 4 chuỗi được lưu trữ trong bộ nhớ của chương trình: s1, s2, s3 là những chuỗi giống nhau được lưu trữ tại cùng một địa chỉ bộ nhớ, trong khi s4 là một chuỗi khác được lưu trữ tại một địa chỉ bộ nhớ khác. Vì vậy, đáp án là C.
20. Given:
20. Given: 11. public static void main(String[] args) {
12. Object obj =new int[] {1,2,3};
13. int] someArray = (int[])obj;
14. for (int i: someArray) System.out.print(i +" ");
15.}
What is the result?
A. 123
B. Compilation fails because of an error in line 12.
C. Compilation fails because of an error in line 13.
D.
Compilation fails because of an error in line 14.
E. A ClassCastException is thrown at runtime
Kết quả là A. 123. Chương trình chạy mà không có lỗi và thực hiện vòngp for để in ra các phần tử của mảng someArray.