19

Click here to load reader

Java

Embed Size (px)

Citation preview

Page 1: Java

Đáp Án Lập Trình Mạng Java

[email protected]

PHẦN III: LẬP TRÌNH JAVA - TRẮC NGHIỆM

1. Nếu có cả 3 khai báo class, import, packageb trong cùng một tập tin mã nguồn thì chúng phải xuất hiện theo thứ tự nào là hợp lệ:

a. class, import, package

b. import, class, package

c. package, import, class

d. package, class, import

2. Cho đoạn chương trình:

int[] x = new int[25];

Chọn phát biểu đúng:

a. Giá trị của x[24] là null

b. x[24] không tồn tại

c. Giá trị của x[24] là 0

d. Tất cả câu trên đều sai

3. Chọn khai báo đúng cho phương thức main()

a. public static void main() b. public void main( String []arg) c. public static void main( String[] args) d. public static int main( String[] arg)

4. Cho đoạn chương trình sau:

1. class Q4 {

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

3. Holder h = new Holder( );

4. h.held = 100;

5. h.bump(h);

6. System.out.println(h.held);

Page 2: Java

Đáp Án Lập Trình Mạng Java

[email protected]

7. }

8. }

9. class Holder{

10. public int held;

11. public void bump( Holder theHolder) {

12. theHolder.held++; }

13. }

14. }

Cho biết kết quả xuất ra ở dòng số 6 của đoạn chương trình trên:

a. 0 b. 1 c. 100 d. 101

5. Cho đoạn chương trình sau:

1. class Q5{

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

3. double d = 12.3;

4. Decrementer dec = new Decrementer( );

5. dec.decrement(d);

6. System.out.println(d);

7. }

8. }

9. class Decrementer{

10. public void decrement( double decMe) {

11. decMe = decMe – 1.0;

12. }

Page 3: Java

Đáp Án Lập Trình Mạng Java

[email protected]

13. }

Cho biết kết quả xuất ra ở dòng số 6 của đoạn chương trình trên:

a. 0.0 b. -1.0 c. 12.3 d. 11.3

6. Lớp nào sau đây dùng để thực hiện các thao tác nhập xuất cơ bản console

a. System b. Math c. String d. StringBuffer

7. Cho đoạn chương trình sau:

1. class MyClass

2. {

3. void myMethod( int i ){ System.out.println(“int version”); }

4. void myMethod( String s) { System.out.println(“String version”); }

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

6. {

7. MyClass obj = new MyClass();

8. char ch = ‘c’;

9. obj.myMethod(ch);

10. }

11. }

Hãy chọn phát biểu đúng:

a. Dòng 4 không thể biên dịch vì không thể override các phương thức có kiểu trả về là void

b. Dòng số 9 sẽ phát sinh 1 biệt lệ

c. Dòng số 9 không thể biên dịch vì phương thức myMethod không nhận tham số kiểu char

Page 4: Java

Đáp Án Lập Trình Mạng Java

[email protected]

d. Đoạn chương trình thi hành và in ra kết quả là: int version

8. Cho biết kết quả của đoạn chương trình sau:

1. public class Test

2. {

3. public void method()

4. {

5. for(int i=0; i<3; i++)

6. {

7. System.out.print(i);

8. }

9. System.out.print(i);

10. }

11. }

a. 0122 b. 0123 c. Có lỗi khi biên dịch d. Tất cả các câu trên đều sai

9. Biểu thức nào sau đây là hợp lệ. Chọn câu trẻ lời thích hợp nhất:

a. int x = 6; x != x;

b. int x = 6; if (!(x>3)) {}

c. int x = 6; x = ~x;

d. Cả câu b) và câu c) đều đúng

10. Đoạn mã sau sai chỗ nào?

Public class Question

{ public static void main( String args[])

{ Boolean b = new Boolean(“TRUE”);

Page 5: Java

Đáp Án Lập Trình Mạng Java

[email protected]

if (b)

{ for( Integer i = 0; i<10 ; ++i)

System.out.println(i);

}

}

}

a. Đoạn mã không có lỗi

b. Điều kiện của câu lệnh if phải có kiểu boolean chứ không phải Boolean

c. Biến i trong câu lệnh for phải là int chứ không phải Integer

d. Cả câu b) và câu c) đều đúng

11. Chọn phát biểu thích hợp nhất:

a. Một lớp khai báo trừu tượng (abtract) không thể có những phương thức khai báo final

b. Một lớp khai báo final không thể có những phương thức khai báo trừu tượng (abstract)

c. Cả hai câu a, b đều đúng

d. Cả hai câu a,b đều sai

12. Cho biết thay đổi tối thiểu nào sẽ giúp cho đoạn chương trình bên dưới biên dịch thành công. Chọn câu trả lời thích hợp nhất.

1. final class A

2. {

3. int x;

4. void yMethod() { x = 1;}

5. }

6.

Page 6: Java

Đáp Án Lập Trình Mạng Java

[email protected]

7.

8. class B extends A

9. {

10. final A finalref = new A();

11.

12. final void yMethod()

13. {

14. System.out.println(“Phuong thuc yMethod”);

15. finalref.x = 12345;

16. }

17. }

18.

a. Loại bỏ từ khóa final trên dòng số 1

b. Loại bỏ từ khóa final trên dòng số 10

c. Loại bỏ dòng 15

d. Không cần thay đổi gì cả đoạn chương trình trên sẽ biên dịch thành công

13. Cho biết kết quả in ra của đoạn chương trình sau:

1. class Value

2. {

3. public int i = 15;

4. }

5. public class Test

6. {

Page 7: Java

Đáp Án Lập Trình Mạng Java

[email protected]

7. publci static void main( String argv[])

8. {

9. Test t = new Test();

10. t.first();

11. }

12. public void first()

13. {

14. int i = 5;

15. Value v = new Value(0;

16. v.i = 25;

17. second(v,i);

18. System.out.println(v.i);

19. }

20. public void second( Value v, int i)

21. {

22. i = 0;

23. v.i = 20;

24. Value val = new Value();

25. v = val;

26. System.out.println( v.i + “” + i );

27. }

28. }

a. 15 0 20 b. 15 0 15 c. 20 0 20 d. 0 15 20

Page 8: Java

Đáp Án Lập Trình Mạng Java

[email protected]

14. Cho đoạn chương trình bên dưới:

1. class A

2. {

3. void aMethod() {}

4. }

5.

6. class B extends A

7. {

8. void aMethod(){ }

9. }

Cho biết khai báo nào ( public, protected, private) là hợp lệ nếu đặt trước phương thức aMethod() trên dòng số 3.

a. public b. protected c. private d. Cả 3 câu a, b, c đều sai

15. Cho định nghĩa của một lớp Test như sau:

1. public class Test {

2. publci float aMethod( float a, float b ) {

3. }

4.

5. }

Phương thức nào bên dưới là không hợp lệ nếu ta thêm vào dòng số 4 của đoạn chương trình trên:

a. public int aMethod ( int a, int b ) { }

b. public float aMethod( float a, float b, float c ) throws Exception { }

c. private float aMethod( int a, int b, int c ) { }

Page 9: Java

Đáp Án Lập Trình Mạng Java

[email protected]

d. public int aMethod( float c, float d ) { }

16. Cho hai lớp Test1 và Test2 định nghĩa trong hai file khác nhau. Cụ thể như sau:

1. public class Test {

2. public float aMethod( float a, float b ) throws IOException

3. {

4. }

5. }

1. public class Test2 extends Test1 {

2.

3. }

Phương nào bên dưới là Không hợp lệ nếu ta thêm vào dòng số 2 của lớp có tên là Test2

a. public float aMethod( float p, float q) { }

b. public int aMethod( int a, int b ) throws Exception { }

c. float aMethod ( float a, float b) { }

d. public float aMethod( float a, float b) { }

17. Cho hai lớp Base và Sub định nghĩa trong 2 tập tin khác nhau:

1. public class Base{

2. public void method( int i) {

3. System.out.println(“Value is” + i);

4. }

5. }

6.

Page 10: Java

Đáp Án Lập Trình Mạng Java

[email protected]

1. public class Sub extends Base {

2. public void method( int j ) {

3. System.out.println(“This value is” + j);

4. }

5. public void method( String s) {

6. System.out.println(“I was passed” +s);

7. }

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

9. Base b1 = new Base();

10. Base b2 = new Sub();

11. b1.method(5);

12. b2.method(6);

13. }

14. }

Hãy cho biết kết xuất chương trình khi thực hiện phương thức main của lớp Sub

a. Value is 5

Value is 6

b. This value is 5

This value is 6 c. Value is 5

This value is 6

d. This value is 5

Value is 6

18. Chọn phát biểu đúng cho hàm khởi tạo (constructor):

a. Một lớp con sẽ kế thừa các hàm khởi tạo từ lớp cha

b. Trình biên dịch sẽ tự động tạo hàm khởi tạo mặc định nếu lớp không định nghĩa hàm khởi tạo

Page 11: Java

Đáp Án Lập Trình Mạng Java

[email protected]

c. Tất cả các hàm khởi tạo có kiểu trả về là void

d. Tất cả các câu trên đều sai

19. Cho biết số byte mà đoạn chương trình sau ghi ra tập tin test.txt

import java.io.*;

public class TestIOApp {

public static void main( String ards[] ) throws IOException {

FileOutputStream outStream = new FileOutputStream(“test.txt”);

String s = “HelloWorld”;

for( int i = 0 ; i < s.length( ) ; i++)

outStream.write( s.chatAt(i));

outStream.close( );

}

}

Chú ý: các bạn để ý là s = “helloworld” có 10 ký tự => là 10bytes vì mỗi 1 ký tự là 1 bytes

a. 5 bytes b. 10 bytes c. 11 bytes d. 16 bytes

20. Chọn phát biểu đúng đối với đoạn chương trình bên dưới:

1. String s1 = “abc” + “def”;

2. String s2 = s1;

3. if ( s1 == s2 )

4. System.out.println(“ So sanh == thanh cong” );

5. if ( s1.equals( s2 ))

6. System.out.println(“ Phuong thuc equals co ket qua dung” );

Page 12: Java

Đáp Án Lập Trình Mạng Java

[email protected]

a. Cả dòng lệnh số 4 và số 6 đều thực hiện

b. Dòng lệnh số 4 thực hiện, còn dòng số 6 thì không

c. Dòng lệnh số 6 thực hiện, còn dòng số 4 thì không

d. Cả dòng lệnh số 4 và số 6 đều không thực hiện

21. Chọn câu trả lời thích hợp nhất:

a. Một thể hiện của lớp File có thể được dùng để truy cập các tập tin trong thư mục hiện hành

b. Khi một thể hiện của lớp File được tạo ra thì một tập tin tương ứng cũng được tạo ra trên đĩa

c. Các thể hiện của lớp File được dùng để truy cập đến các tập tin và thư mục trên đĩa

d. Cả hai câu a) và c) đều đúng

22. Hãy chọn câu lệnh dùng để tạo ra một thể hiện DataOutputStream dùng để ghi dữ liệu xuống tập tin

a. new DataOutputStream( “out.dat” ).

b. new DataOutputStream( new File(“out.dat”)).

c. new DataOutputStream( new OutputStream(“out.dat”)).

d. new DataOutputStream( new FileOutputStream(“out.dat”))

23. Hãy chọn câu trả lời đúng về giao diện (Interface)

a. Giao diện có thể được kế thừa bởi số lượng bất kỳ các giao diện khác

b. Giao diện có thể kế thừa số lượng bất kỳ các giao diện khác

c. Câu a) và b) đúng

d. Câu a) và b) sai

Chú ý: interface được tạo ra chỉ dung cho các lớp khác kế thừa , trong java không có khái niệm đa kế thừa , nhưng interface đã giải quyết trường hợp đa kế thừa

Page 13: Java

Đáp Án Lập Trình Mạng Java

[email protected]

24. Cho một thể hiện listener dùng để lắng nghe sự kiện ActionEvent và một thể hiện b của nút lệnh (Button). Chọn câu lệnh dùng để gắn listener vào b.

a. b.addActionListener(listener);

b. b.addWindowListener(listener);

c. b.addItemListener(listener);

d. Tất cả các câu trên đều sai

25. Cho đoạn chương trình khai báo như sau:

//Filename: MyClass.java

public class MyClass {

public static void main( String[] args){

C c = new C( );

System.out.println(c.max(13,29));

}

}

class A{

int max(int x, int y) { if (x>y) return x; else return y;}

}

class B extends A{

int max(int x, int y) { return super.max(y,x)-10; }

}

class C extends B {

int max(int x, int y) { return super.max(x+10,y+10); }

}

Hãy chọn phát biểu đúng:

Page 14: Java

Đáp Án Lập Trình Mạng Java

[email protected]

a. Chương trình không thể biên dịch vì phương thức max( ) trong lớp B truyền tham số khi gọi hàm super.max(y,x) sai vị trí

b. Chương trình biên dịch thành công và in ra giá trị 23 khi thi hành

c. Chương trình biên dịch thành công và in ra giá trị 29 khi thi hành

d. Chương trình biên dịch thành công và in ra giá trị 39 khi thi hành

26. Hãy chọn phát biểu đúng:

a. Một bộ lắng nghe sự kiện có thể được gỡ bỏ sau khi đã được gắn vào một thành phần (Component) của giao diện

b. Có thể gắn nhiều bộ lắng nghe sự kiện cho một thành phần (Component) của giao diện

c. Cả a) và b) đều sai

d. Cả a) và b) đều đúng

27. Cho đoạn chương trình sau:

1. import java.awt.*;

2. public class Test extends Frame{

3. public Test( )

4. this.add( new Label(“Hello”));

5. this.add(new TextField(“Hello”));

Câu 1:

hãy cho biết kết quả in ra màn hình khi thực thi đoạn chương trình sau và giải thích ngắn gọn tại sao có kết quả đó?

class C2{

public static void main(String arg[]){

Page 15: Java

Đáp Án Lập Trình Mạng Java

[email protected]

String s1=new String(“abc”);

String s2=new String(“abc”);

String s3=s2;

if(s1==s2)

System.out.print(“True”);

else

System.out.print(“False”);

if (s1==s3)

System.out.print(“True”);

else

System.out.print(“Flase”);

}

}

Trả Lời:

- kết quả in ra là : False False - Giải Thích : dữ liệu kiểu String không thể so sánh như

hàm toán học , mà phải sử dụng hàm equal

Câu 2: Tìm, mô tả và sửa lỗi biên dịch trong chương trình sau để chương trình có thể biên dịch và thực thi thành công. Cho biết kết quả thực thi của đoạn chương trình khi thực thi thành công và giải thích tại sao lại có kết quả đó.

abstract final class S1{

S1(){

System.out.print(“Class S1”);

}

Page 16: Java

Đáp Án Lập Trình Mạng Java

[email protected]

}

class S2 extends S1{

S2(){

System.out.print(“Class S2”);

}

public static void main(String arg[]){

new S2();

}

}

Trả Lời :

- lỗi Sai : final - Giải Thích : vì lớp sử dụng từ khóa Final thì không được phép cho lớp khác kế

thừa ở đây lớp S1 là Final mà lớp S2 lại extends là sai - Sửa Lỗi : xóa final trước class S1 đi - Kết quả Biên Dịch : Class S1 Class S2

Câu 3: Hãy viết một ứng dụng Client/Server, sử dụng socket, theo yêu cầu sau:

Chương trình Client:

- Cho phép người sử dụng nhập vào một chuỗi ký tự

- Gửi chuỗi ký tự nhận được đến Server

- Nhận dữ liệu trả về từ Server và in ra màn hình

- Kết thúc chương trình

Chương trình Server:

- Nhập kết nối từ Client

- Nhập chuỗi ký tự từ chương trình Client

- Đổi chuỗi ký tự sang chữ thường và gửi về cho Client

Page 17: Java

Đáp Án Lập Trình Mạng Java

[email protected]

- Kết thúc chương trình

* Không cần viết các chỉ thị import

Trả Lời : bài giải trong File đính kèm

Câu 1:

Hãy cho biết cú pháp và giải thích chi tiết công dụng của phương thức accept() trong lớp ServerSocket. Cho ví dụ minh họa cách sử dụng.

Trả Lời :

- Accept(): phương thức này thật sự dừng lại chờ đợi cho đến khi nhận được thông tin kết nối và sẽ trả về đối tượng Socket của máy khách nơi có yêu cầu nối vào máy chủ.

- VD : Viết Máy chủ chờ đợi kết nối tại cổng 2812 : import java.net.*; class MayChu { public static void main(String[] args) throws Exception { System.out.println("Server khoi dong tai cong 2812"); ServerSocket server = new ServerSocket(2812); Socket client = server.accept(); System.out.println("Ket noi may khach thanh cong."); client.close(); server.close(); } }

Câu 2:

Tìm và sửa lỗi trong chương trình sau để chương trình có thể biên dịch và thực thi thành công. Cho biết kết quả thực thi của chương trình sau khi đã sửa lỗi và giải thích ngắn gọn tại sao có kết quả đó:

Class C2{

final int t = 3;

public static main( String[] args) {

int t = 5;

Page 18: Java

Đáp Án Lập Trình Mạng Java

[email protected]

if ( C2.t > t)

System.out.println( “ True” );

Else

System.out.println( “False” );

}

}

Trả Lời :

- Lỗi Sai: o 1 : thiếu Void chỗ public static main o 2 : C2.t không thể gọi kiểu này o 3 : Else không viết hoa chữ E o 4 : Class chữ C không viết hoa

- Sửa Lỗi : o 1 : Thêm Void vào public static void main o 2 : khởi tạo C2 c = new C2(); sau đó chỗ if(C2.t > t) thay bằng if(c.t > t) o 3 : sửa E thành e o 4 : sửa C chỗ Class thành class o Code : class C2{ o final int t = 3; o public static void main( String[] args) { o int t = 5; o C2 c = new C2(); o if(c.t > t) o System.out.println("True"); o else o System.out.println("False"); o } o }

- Kết quả Khi thực thi : False - Giải Thích : c.t là biến toàn cục là final int t = 3

o Còn t là biến cục bộ trong hàm main : t = 5 o Vậy 3 không thể lớn hơn 5 được = False

Câu 3: Hãy viết một ứng dụng Client/Server, sử dụng socket, theo yêu cầu sau:

Chương trình Client:

- Cho phép người sử dụng nhập vào một chuỗi ký tự

Page 19: Java

Đáp Án Lập Trình Mạng Java

[email protected]

- Gửi chuỗi ký tự nhận được đến Server

- Nhận dữ liệu trả về từ Server và in ra màn hình

- Kết thúc chương trình

Chương trình Server:

- Nhập kết nối từ Client

- Nhập chuỗi ký tự từ chương trình Client

- Đổi chuỗi ký tự sang chữ thường và gửi về cho Client

- Kết thúc chương trình

* Không cần viết các chỉ thị import

Trả Lời : File đính kèm