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变量。
以下程序的输出将是什么?
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. 我们可以在方法内定义静态块。
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. 你好你好世界
以下哪种说法适用于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()方法)
以下程序的输出将是什么?
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字符串测验