200+ câu trắc nghiệm Java cơ bản có đáp án - Phần 8
30 câu hỏi
G/s đã tạo lớp TestException như sau:
public class TestException extends Exception {}
Lớp Test được tạo như sau:
public class Test{
public void runTest () throws TestException {}
1: public void test ()
{
runTest ();
}
}
Hỏi sau test() ở dòng 1 cần đưa vào dòng lệnh nào để chương trình biên dịch thành công ?
Chọn một Câu trả lời
throws Exception.
catch (Exception e).
throws RuntimeException.
catch (TestException e).
Chọn đáp án A
Vì:
tại dòng 4 phải đưa vào lệnh throws Exception thì chương trình sẽ biên dịch thành công.
Đoạn mã nào sau đây có lỗi biên dịch?
Chọn một Câu trả lời
abstract public class MyClass{
public static void main(String[] args) {
}
}
abstract public class MyClass{
public static void main(String[] args) {
MyClass m = new MyClass() {};
}
}
abstract public class MyClass{
public static void main(String[] args) {
Object m = new MyClass(){};
}
}
abstract public class MyClass{
public static void main(String[] args) {
MyClass m = new MyClass();
}
}
Chọn đáp án D
Vì:
Lớp MyClass được khai báo là lớp abstract, nên bạn không thể tạo object trực tiếp từ nó được.
Đâu là khai báo biến hợp lệ?
Chọn một Câu trả lời
!thenew
@thenew
_the_new
1the_new
Chọn đáp án C
Vì:
Theo quy tắc khai báo biến thì tên biến nên bắt đầu bởi ký tự hoặc ký tự gạch dưới (_), không có khoảng cách giữa tên biến và tên biến không được bắt đầu bởi số
Đâu là khai báo và cài đặt phương thức hợp lệ?
Chọn một Câu trả lời
public void in(){return;}
public int in(){return;}
public double in(){return "";}
public float in(){return "24";}
Chọn đáp án A
Vì:
Khi khai báo phương thức in có kiểu dữ liệu trả về là void thì viết lệnh return;. Các đáp án còn lại kiểu dữ liệu trả về cho phương thức không phù hợp với khai báo.
Đối tượng nào được sử dụng để bắt lỗi nếu cố tình truy xuất vào phần tử thứ 5 trong mảng a?
1: int []a = {2, 5, 7, 9};
2: System.out.println("a[4] = " + a[4]);
Chọn một Câu trả lời
NullPoiterException
Exception
ArrayIndexOutOfBoundsException
ArithmeticException
Chọn đáp án C
Vì:
+ ArrayIndexOutOfBoundsException là đối tượng được định nghĩa trong java nhằm xử lí các lỗi về chỉ số của mảng
Đọc đoạn mã sau:
1: class Super {
2: public Integer getLenght() { return new Integer(4); }
3: }
4:
5: public class Sub extends Super {
6: public Long GetLenght() { return new Long(5); }
7:
8: public static void main(String[] args) {
9: Super sooper = new Super();
10: Sub sub = new Sub();
11: System.out.println(
12: sooper.getLenght().toString() + "," +
13: sub.getLenght().toString() );
14: }
15: }
Chương trình sẽ in ra thông tin gì?
Chọn một Câu trả lời
4,4
4,5
5,4
5,5
Chọn đáp án A
Vì:
+ Trong chương trình đã tạo ra 2 lớp là Super và Sub kế thừa từ Super. Trong hàm main lệnh 10,11,12,13 sẽ gọi phương thức getLength() của lớp Super (vì lớp Sub kế thừa từ Super) => in ra 4,4
Đoạn mã sau có lỗi biên dịch nào?
class Student {
private String name;
}
public class Man extends Student{
public static void main(String[] args) {
Man m = new Man();
m.name="John";
}
}
Chọn một Câu trả lời
name has private access in Student.
Không có lỗi biên dịch.
class Man has no attribute name.
class Man has no attribute or method name.
Chọn đáp án A
Vì:
thuộc tính name ở Student là private, nên không lớp con Man không được thừa kế.
Lớp Man vẫn chứa thuộc tính name thông qua lớp Student, nhưng không thể truy xuất được.
Đoạn mã sau có lỗi biên dịch gì?
class Person {
protected String name;
public int age;
};
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name="Tom";
}
}
Chọn một Câu trả lời
Không có lỗi biên dịch.
name has protected access.
age has protected access.
name has public access.
Chọn đáp án B
Vì:
+ name là thành phần protected do đó không thể truy xuất từ bên ngoài lớp (chỉ có thể truy xuất từ bên trong lớp và các lớp con).
Đọc đoạn code sau
1: int x = 30;
2: int y = 10;
3: if (x = y) {
4: System.out.println("x = " + x);
5: }
Kết quả là gì?
Chọn một Câu trả lời
x = 10
x = 30
Biên dịch lỗi.
Đoạn code không có lỗi nhưng không đưa ra kết quả gì. Đáp án
Chọn đáp án C
Vì:
+ Không thể đặt lệnh gán x=y vào làm biểu thức kiểm tra điều kiện của lệnh if
Chỉ ra các cách định nghĩa lớp abstract hợp lệ?
Chọn một Câu trả lời
class A {abstract void unfinished(){}}
class A {abstract void unfinished();}
abstract class A {abstract void unfinished();}
public class abstract A {abstract void unfinished();}
Chọn đáp án C
Vì:
cú pháp khai báo lớp abstract
abstract class ten_lop{ … }
Trong Câu lệnh sau: public static void main(String[] agrs) thì phần tử agrs[0] chứa giá trị gì?
Chọn một Câu trả lời
Tên của chương trình
Số lượng tham số
Tham số đầu tiên của danh sách tham số
Không Câu nào đúng
Chọn đáp án C
Vì:
+ Trong khai báo đối số của hàm main() thì agrs là một mảng xâu kí tự, đồng thời hàm main có thể nhận nhiều đối số => agrs[0] là đối số đầu tiên trong danh sách đối số của hàm main()
Tên biến nào sau không hợp lệ?
Chọn một Câu trả lời
2variable
variable2
_whatarevariable
_3_
Chọn đáp án A
Vì:
theo quy tắc đặt tên biến
G/s cần tạo một lớp MyClass là abstract, khai báo nào sau đây là SAI?
Chọn một Câu trả lời
public abstract class MyClass {}
abstract public class MyClass { public int sum(int x, int y){return x+y;}}
abstract class MyClass {}
public class MyClass {}
Chọn đáp án D
Sai. Đáp án đúng là: public class MyClass {}
Vì: đây là khai báo của một lớp bình thường.
Đâu KHÔNG phải là cách thức để khởi tạo giá trị cho thuộc tính name có kiểu chuỗi của lớp Cat?
Chọn một Câu trả lời
class Cat {String name = "noname";}
public class Cat{
String name;
public Cat(){name = "noname";}
}
public class Cat{
String name;
public Cat(String x){name = x;}
}
public class Cat{
String name;
public Cat(){
String name = "noname";
}
}
Chọn đáp án D
Vì: Sai về cách thức khởi tạo thuộc tính name của lớp Cat sai về cách thức khởi tạo thuộc tính name của lớp Cat
Biến name trong hàm tạo là biến cục bộ, không phải là thuộc tính name.
Đoạn mã nào sau đây in ra màn hình 2 chữ Hello trên hai dòng?
Chọn một Câu trả lời
System.out.println("\t Hello \n Hello");
System.out.println("\t Hello \t Hello");
System.out.println("\n Hello \t Hello");
System.out.println("\n Hello Hello");
Chọn đáp án A
Vì:
Để in ra màn hình ở dòng mới ta phải dùng ký tự đặc biệt \n, nên chỉ có ở đáp án A đúng. Đáp án C kí tự xuống dòng (\n) ở ngay đầu dòng do đó 2 chữ Hello vẫn in trên một dòng.
Đọc đoạn code sau:
public class Test {
public static void aMethod() throws Exception {
try {
throw new Exception();
} finally {
System.out.println("finally");
}
}
public static void main(String args[]) {
try {
aMethod();
} catch (Exception e) {
System.out.println("exception");
}
System.out.println("finished");
}
}
Kết quả là gì?
Chọn một Câu trả lời
finally
exception, finished
finally, exception, finished
Lỗi biên dịch.
Chọn đáp án C
Vì:
+ Lệnh đầu tiên trong hàm main() được gọi thực hiện => gọi phương thức aMethod() => lệnh trong khối finally của aMethod() được thực hiện => in ra chữ finally, đồng thời phương thức này ném ra một ngoại lệ do đó lệnh trong khối catch của hàm main() sẽ được thực hiện => in ra chữ exception và cuối cùng lệnh
System.out.println("finished"); sẽ thực hiện để in ra chữ finished
Kết quả là: finally, exception, finished
1.1:package a;
1.2:class A1{}
1.3://///////
2.1:package b;
2.2:
2.3: class B1{
2.4: public void test(){
2.5: A1 a1 = new A1();
2.6: }
2.7: }
Muốn sử dụng lớp A1 của gói a thì dòng 2 phải điền gì?
Chọn một Câu trả lời
Không điền gì
package a;
import a;
import a.;
Chọn đáp án D
Vì:
Lệnh import a. cho phép lớp b có thể sử dụng tất cả các thành phần của gói a
Đoạn mã sau có lỗi biên dịch nào?
class Student {
public int getAge(){
return 10;
}
}
public class Man extends Student{
public double getAge() {
return 11.2;
}
}
Chọn một Câu trả lời
Có lỗi biên dịch:getAge() in Man cannot override getAge() in Student return type int is not compatible with java.lang.int
Không có lỗi biên dịch.
Có lỗi biên dịch:getAge() in Man cannot override getAge() in Student because it is final
Có lỗi biên dịch:getAge() in Man and in Student has the same access modifier
Chọn đáp án A
Vì:
lớp Man định viết đè getAge() được viết ở Student, nhưng có kiểu dữ liệu trả về là double không thể chuyển thành int được. Nên đáp án B sai. Và getAge() không được đánh dấu là final, nên có thể được ghi đè, nên đáp án C là sai. getAge() ở cả hai lớp đều có cùng access modifier, điều này là hợp lệ. Nên đáp án D là sai.
Đoạn mã sau có lỗi biên dịch nào?
class Student {
public String sayHello(){
return "Student";
}
}
public class Man extends Student{
public String sayHello() {
return "man";
}
public static void main(String[] args) {
Man m = new Student();
System.out.println(m.sayHello());
}
}
Chọn một Câu trả lời
Có lỗi biên dịch:Incompatible type, requiered Man, found Student.
Không có lỗi biên dịch. In ra màn hình "man"
Có lỗi biên dịch:access modified of sayHello in Student and Man are different
Không có lỗi biên dịch. In ra màn hình "student"
Chọn đáp án A
Vì:
m thuộc lớp Man, nhưng lại dùng để trỏ đển đối tượng của Student mà Man không phải là lớp con của Student.
Và access modified của cùng phương thức ở lớp con chỉ cần mạnh hơn hoặc bằng cảu lớp cha la được.
Cách nào để tạo Scanner để đọc thông tin từ bàn phím?
Chọn một Câu trả lời
Scanner input= new Scanner(System.in);
Scanner input= new Scanner("System.in");
Scanner input= new Scanner(Systemin);
Scanner input= new Scanner(in);
Chọn đáp án A
Vì:
Luồng dữ liệu từ bàn phím là thuộc tính in trong lớp System, nên ta phải truyền System.in vào phương thức khởi tạo của Scanner chứ không phải xâu ký tự "System.in" như ở đáp án B hoặc cách gọi Systemin ở C hoặc in ở đáp án D.
Phát biểu nào sau đây là đúng:
Chọn một Câu trả lời
Mảng có thể lưu giữ các phần tử thuộc nhiều kiểu dữ liệu khác nhau
Chỉ số của mảng có thể sử dụng kiểu số thực (float, double)
Biểu thức array.length được sử dụng để trả về số phần tử trong mảng
Một phần tử của mảng không thể truyền vào trong một phương thức.
Chọn đáp án C
Vì:
biểu thức array.length trả về số phần tử trong mảng.
1: int x = 10;
2: double y = 0.0;
3: System.out.println("Ket qua phep toan: " + (x/y));
Đoạn mã trên khi thực thi sẽ in ra kết quả gì?
Chọn một Câu trả lời
Ket qua phep toan: 0
Lỗi biên dich
Ket qua phep toan: Infinity
Ket qua phep toan:
Chọn đáp án C
Vì:
Không xác định khi chia một số nguyên cho một số thực có giá trị là 0.0.
Đâu KHÔNG phải là một khai báo của abstract class?
Chọn một Câu trả lời
public abstract class MyClass {}
abstract public class MyClass {
public abstract int sum(int x, int y);
}
abstract class MyClass {}
public class MyClass {}
Chọn đáp án D
Vì:
Đây là khai báo của một lớp bình thường.
1: Scanner c = new Scanner(System.in);
2: int x = c.next();
3: System.out.println("x = " + x);
Chương trình trên sẽ thực thi thế nào?
Chọn một Câu trả lời
Tại dòng 2 khi người dùng nhập giá trị 5, chương trình sẽ in ra x = 5
Chương trình không thể chạy vì lỗi dòng 2 do không thể nhập chuỗi và gán cho số nguyên
Tại dòng 2 khi người dùng nhập giá trị 5, chương trình sẽ in ra x =
Đối tượng NumberFormatException được tung ra để bắt lỗi chương trình.
Chọn đáp án B
Vì:
Đối tượng RuntimeException được tung ra để bắt lỗi chương trình và chương trình không thể chạy do không thể nhập chuỗi và gán cho số nguyên.
Trong chương trình thứ tự của các lệnh như thế nào là sai?
Chọn một Câu trả lời
try...catch...finally
try...catch...catch...finally
try...finally
try
Chọn đáp án D
Vì:
+ Thứ tự các lệnh là try…catch….finally
+ Có thể sử dụng lồng nhau nhiều khối try
+ Khối try thì bắt buộc phải có catch
Đoạn mã sau có lỗi biên dịch gì?
class Person {
public String name;
private int age;
};
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name="Tom";
}
}
Chọn một Câu trả lời
Không có lỗi biên dịch.
name has private access.
age has private access.
name has public access.
Chọn đáp án A
Vì:
name có mức truy xuất là public, nên có thể được truy xuất từ Main(Nên đáp án A đúng, B sai, D sai). Và trong lớp Main không có truy xuất vào thuộc tính age, bởi thế thuộc tính age không gây ra lỗi. Nên đáp án C sai.
Đoạn mã sau có lỗi biên dịch gì? public class Person { private String name; protected int age; public static void main(String[] args) { Person p = new Person(); p.name="Tom"; System.out.println(p.name); } }
Chọn một Câu trả lời
Không có lỗi biên dịch.
name has private access.
age has protected access.
name has public access.
Chọn đáp án A
Vì:
hàm main ở trong cùng lớp Person, nên có thể truy xuất tới tất cả các trường của Person.
StringBuffer s = new StringBuffer("hello how are you?");
int x = s.charAt(6);
System.out.println(x);
Trong đoạn mã trên x nhận giá trị bao nhiêu?
Chọn một Câu trả lời
102
104
h
Lỗi biên dịch
Chọn đáp án B
Vì:
s.charAt(6) truy xuất phần tử thứ 7 là kí tự 0, trong mã asscii thì kí tự 0 là 104.
Cho lớp Student như sau:
public class Student {
private int mark;
public int getMark() {
return mark;
}
public void setMark(int mark) {
this.mark = mark;
}
}
và s là đối tường s của Student.
Đoạn mã nào sau cho phép thay đổi điểm của s thành 10?
Chọn một Câu trả lời
s.setMark(10);
s.setMark(10.0);
s.mark=10;
s.mark=10.0;
Chọn đáp án A
Vì:
Phương thức này nhận 10 là số nguyên và thay đổi thuộc tính mark của s.
Đáp án s.setMark(10.0); sai vì truyền số 10.0 thuộc float vào phương thức setMark, mà setMark yêu cầu đầu vào là int.
mark có mức truy xuất là private nên phương thức s.mark=10; và s.mark=10.0; là sai
Tên biến nào sau không hợp lệ?
Chọn một Câu trả lời
2variable
variable2
_whatarevariable
_3_
Chọn đáp án A
Vì:
theo quy tắc đặt tên biến








