Java核心考试

欢迎参加Java核心知识测验。Java是一种面向对象的编程语言。

Java 核心知识测验

在这个测验中,你将在核心Java基础和面向对象编程概念上接受考验。还有一些代码片段用来测试你的基本Java编码能力。

有些问题有多个答案。 您可以点击“显示答案”按钮查看正确答案和解释。

如果你喜欢的话,试一试并与他人分享。

以下哪个选项是在Java中实例化数组的有效方法?

A. myArray的类型是int数组,包含的元素依次为1、3、5。
B. myArray的类型是int二维数组,包含的元素依次为1、2、3、4。
C. myArray的类型是int数组,包含的元素依次为5、4、3。
D. myArray的类型是int数组,包含的元素依次为”1″、”2″、”3″。

点击展示答案
正确答案:A
int [] myArray = {“1”, “2”, “3”}; 是无效的,因为字符串无法转换为整数。
int [] myArray = (5, 4, 3); 是无效的,因为数组元素应该在花括号{}中定义。
int myArray [] [] = {1,2,3,4}; 是无效的,因为myArray是一个二维数组,而在这种情况下被定义为一个一维数组。编译器会报错,错误类型为:类型不匹配,无法从int转换为int[]。

以下哪个是Java中的保留关键字?

A. 数组
B. 跳转
C. 空值
D. 整数

点击查看答案
**正确答案:B,D
**
在Java中,goto和int是保留关键字,而array和null则不是关键字。

如果我们试图编译和运行以下程序,会发生什么?

interface Foo{ int x = 10;}

public class Test { 
    public static void main(String[] args) { 
        Foo.x = 20; 
        System.out.println(Foo.x); 
    }
}

A. 打印出10
B. 打印出20
C. 编译时错误
D. 运行时错误,因为Foo.x是final变量。

默认情况下,接口的任何字段都是公共的、静态的和不可变的。因此我们无法改变它,因此在语句Foo.x = 20;中会出现编译时错误。

以下程序的输出将是什么?

public class Test {
	public static void main(String[] args) {
		char c = 65;
		System.out.println("c = " + c);
	}
}

A. 编译时错误
B. 输出“c = A”
C. 运行时错误
D. 输出“c = 65”

点击显示答案
**正确答案:B**

Java 编译器尝试自动将 int 转换为 char。由于 65 被转换为 A,因此输出将是“c = A”。char 值的范围是从 u0000 到 uffff。所以 char c = 65535; 是有效的,但 char c = 65536; 将导致编译时错误。

以下程序的输出结果将会是什么?

public class Test { 
    public void main(String[] args) {
        int x = 10*20-20; 
        System.out.println(x); 
    }
}

A. 运行时错误
B. 打印出180
C. 打印出0
D. 编译时错误

单击查看答案
正确答案:A
由于 main 方法不是静态的,所以会出现运行时错误。错误消息将会是在 Test 类中 main 方法不是静态的,请将 main 方法定义为:public static void main(String[] args)

在Java中,静态关键字的有效语句有哪些?

A. 一个类中可以有静态块。
B. 类中的静态块在每次创建类的对象时都会被执行。
C. 接口中可以有静态方法的实现。
D. 我们可以在方法内定义静态块。

我们可以在一个类中有静态代码块,在类加载时只执行一次。从Java 8开始,我们可以在接口中有静态方法的实现。

7. 选择所有面向对象编程(OOPS)的核心概念。

A. 抽象化
B. 继承
C. 接口
D. 多态性
E. 泛型

点击显示答案
正确答案:A、B、D
OOPS核心概念包括:

抽象
封装
多态
继承
组合
关联
聚合

详细阅读OOPS概念,请点击此处。

以下哪些陈述是有关Java继承的正确说法?

A. Java中使用“extend”关键字来扩展一个类。
B. 在Java中可以扩展多个类。
C. 子类可以访问父类的私有成员。
D. 在Java中无法扩展Final类。

点击展示答案
**正确答案:D**
继承是Java中的核心概念之一。你应该熟悉它。请阅读以下文章以了解更多关于答案选项的内容 – Java中的继承,Java中的多重继承。

以下程序的输出结果是什么?

package com.Olivia.java;

public class Test {
	public static void main(String[] args) {
		Super s = new Subclass();
		s.foo();
	}
}

class Super {
	void foo() {
		System.out.println("Super");
	}
}

class Subclass extends Super {
	static void foo() {
		System.out.println("Subclass");
	}
}

A. 编译时错误
B. 超类
C. 子类
D. 运行时错误

点击显示答案
**正确答案:A**
子类的foo()方法不能是静态的,否则会在编译时出错。这个静态方法无法隐藏超类的实例方法。

以下程序的输出会是什么?

package com.Olivia.java;

public class Test {
	public static void main(String[] args) {
		Subclass s1 = new Subclass();
		s1.foo(); // line 6
		Super s = new Subclass();
		s.foo(); // line 8
	}
}

class Super {
	private void foo() {
		System.out.println("Super");
	}
}

class Subclass extends Super {
	public void foo() {
		System.out.println("Subclass");
	}
}

A. 在第6行编译时发生错误。
B. 在第8行编译时发生错误。
C. 在第6行和第8行都发生编译时错误。
D. 运行正常,打印出”Subclass”两次。

点击显示答案
**正确答案:B**
第8行编译时出错,因为父类的foo()方法是私有的。错误消息为Super类型的foo()方法不可见。

以下程序的输出是什么?

import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		try {
			throw new IOException("Hello");
		} catch (IOException | Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

A. 编译时错误
B. 打印“你好”
C. 运行时错误

点击揭示答案
正确答案:A
编译时错误,因为异常IOException已被替代异常捕获。

12. 以下程序的输出结果将是什么?

public class Test {
	public static void main(String[] args) {
		String x = "abc";
		String y = "abc";
		x.concat(y);
		System.out.print(x);
	}
}

A. abcabc – ABABAB

B. abc – 三个字母

C. null – 无

点击显示答案
**正确答案:B**
x.concat(y);将创建一个新的字符串,但它没有被分配给x,所以x的值没有改变。

下列哪些是Java中的未检查异常?

A. 运行时异常
B. 类型转换异常
C. 空指针异常
D. 输入输出异常

单击以显示答案
**正确答案:A,B,C**
RuntimeException及其子类都是未检查异常。未检查异常不需要在方法或构造函数的throws子句中声明。

以下程序的输出值将是什么?

package com.Olivia.java;

import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		try {
			throw new Exception("Hello ");
		} catch (Exception e) {
			System.out.print(e.getMessage());
		} catch (IOException e) {
			System.out.print(e.getMessage());
		} finally {
			System.out.println("World");
		}
	}
}

A. 编译时错误
B. 你好
C. 你好世界
D. 你好你好世界

编译时错误:IOException的catch块无法访问。因为Exception的catch块已经处理了。

以下哪种说法适用于Java?

A. JVM负责将字节码转换为特定机器代码。
B. 运行Java程序只需要JRE。
C. 编译Java程序需要JDK。
D. JRE不包含JVM。

点击揭示答案
正确答案:A,B,C
要了解完整解释,请阅读JDK,JRE和JVM。

16. 在一个Java类中,我们能够拥有两个主要的方法吗?

A. 是的
B. 不是

点击以显示答案
正确答案:A
这是一个棘手的问题。我们可以通过方法重载使Java中有多个名称为“main”的方法。

17. 关于Java中的注解,以下哪些说法是正确的?

A. @interface关键字用于创建自定义注解。
B. @Override是Java中的内置注解。
C. 注解不能应用于类中的字段。
D. @Retention是Java中的元注解之一。
E. Java注解信息在类编译时会丢失。

点击查看答案
**正确答案:A,B,D
**
要获取完整的解释,请阅读Java注解。

18. 关于Java中的Enum,下面哪些陈述是正确的?

A. 所有的Java枚举都隐式地继承了java.lang.Enum类。
B. Java枚举可以实现接口。
C. 我们可以使用new运算符创建枚举的实例。
D. 枚举不能用于switch语句中。
E. 枚举常量隐式地是静态和最终的。

点击以显示答案
**正确答案:A,B,E**
阅读更多关于Java中的Enum的内容。

19. Java中以下哪些是内置类加载器?

A. 引导类加载器
B. 扩展类加载器
C. 运行时类加载器
D. 系统类加载器

点击揭示答案
正确答案:A、B、D
阅读更多关于Java中的类加载器的内容,请访问Classloaders in Java。

以下程序的输出将是什么?

package com.Olivia.util;

public class Test {
	public static String toString() {
		System.out.println("Test toString called");
		return "";
	}

	public static void main(String args[]) {
		System.out.println(toString());
	}
}

A. “测试调用toString方法”
B. 编译时错误
C. “Test@7fh2bd8” (正在调用Object类的toString()方法)

我们会在编译时出现错误,因为我们不能用static关键字重写一个Object类的方法。Object类有toString()方法。你会得到一个编译时错误,错误信息是“这个静态方法不能隐藏Object中的实例方法”。

以下程序的输出将是什么?

public class Test {
	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "abc";
		System.out.println("s1 == s2 is:" + s1 == s2);
	}
}

A. s1和s2相等:是
B. 错误
C. s1和s2相等:否
D. 正确

点击以揭示答案:
正确答案:B
给定语句的结果将是“false”,因为在Java中,+运算符的优先级高于==运算符。因此,给定的表达式将被计算为“s1 == s2 is:abc” == “abc”,即为false。

结论

希望你喜欢这个Java核心知识测验。如果你认为我遗漏了一些重要领域,请告诉我,我会在这里添加更多有难度的测验问题。

下一次测验:Java字符串测验