选择题个人解答和个人解析,非标准答案。
1.在Java中实现一个整型数据栈,其代码是(A)。
A. Deque oneStack=new LinkedList< >( );
B. List oneStack=new LinkedList< >( );
C. Set oneStack=new HashSet< >( );
D. List oneStack=new ArrayList< >( );
个人解析:Deque是双端队列,其队头和队尾都可以进行删除和插入两种操作,因此Deque既可以作为数据结构中的栈(LIFO),也可以作为数据结构中的队列(FIFO)。当作为栈来使用时,常用的两个方法分别是进栈push(e)和出栈pop。
2.下列关于Java语言的一些描述,错误的是(B)。
A.Java能够自动分配与回收内存空间
B.Java类之间、接口之间仅支持单继承
C.Java丢弃了指针与操作符重载
D.Java提供多线程之间的同步机制
个人解析:Java类之间仅支持单继承,即一个子类只能有一个父类;但是接口之间是支持多继承的,即一个子接口可以有多个父接口。
3.类A有一个方法f,签名是void f(类B b),则A和B之间的关系是(D)。
A.实现关系
B.泛化关系
C.组合关系
D.依赖关系
个人解析:实现关系是实现类和接口之间的关系;泛化关系是类(或接口)和子类(或子接口)之间的关系,因此A和B很容易被排除掉;类和该类数据成员类之间的关系是组合关系的一种形式;类与该类方法成员的形参类所对应的关系就是依赖关系的一种形式。
4.假设一个无序数组a中iaj,,则称数组中这两个数字为逆序对,请问下列哪个排序方法的思想对于快速找到这样的逆序对的个数最有帮助(C)。
A.堆排序
B.冒泡排序
C.归并排序
D.选择排序
个人解析:归并排序中的每次归并,都会比较两个元素(一个元素在前面,一个元素在后面)的大小,因此每一个归并操作可以用来累加逆序对的个数。
下面给出完整的利用归并排序思想求逆序对个数的Java程序:
import java.util.Scanner;
public class CountNumberOfReverseParis {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//n表示数组的长度
int n = in.nextInt();
//数组
int[] q = new int[n];
for (int i = 0; i < n; i++) {
//数组元素
q[i] = in.nextInt();
}
long res = mergeSort(q, 0, n - 1);
System.out.println(res);
}
public static long mergeSort(int[] q, int l, int r) {
if (l >= r) {
return 0;
}
int mid = (l + r) / 2;
long res = mergeSort(q, l, mid) + mergeSort(q, mid + 1, r);
int[] temp = new int[r - l + 1];
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r) {
if (q[i] <= q[j]) {
temp[k++] = q[i++];
} else {
temp[k++] = q[j++];
res += mid - i + 1;
}
}
while (i <= mid) {
temp[k++] = q[i++];
}
while (j <= r) {
temp[k++] = q[j++];
}
for (int z = l, y = 0; z <= r; z++, y++) {
q[z] = temp[y];
}
return res;
}
}
5.下列程序段运行结果是(C)。
String s1,s2;
s1= "Hello Java";
s2=new String("Hello Java");
if (s1.equals(s2))
System.out.print("case 1");
if (s1 == s2)
System.out.print("case 2");
System.out.print(pareTo(s2));
A.
case 1
1
B.
case 1
case 2
0
C.
case 1
0
D.
case 2
1
个人解析:主要考查equals、==和compareTo知识点。equals比较两个字符串对象的值是否相同,==比较两个字符串对象的地址是否相同,compareTo按照字典顺序比较两个字符串的值是否相等(如果参数字符串等于此字符串,则返回值 0,否则返回值就是两个字符串首次出现不同字符的ASCII的差值,为正数或者负数)。综上所述, C是本题答案。
这道题的题干有一个地方需要调整,将3个System.out.print修改为System.out.println。
6.下列关于Java数据类型转换的说法中,错误的一项是(A)。
A.表达式String.format("%.4f",Math.PI)的值为“3.1415"
B. boolean类型无法被类型转换
C.int类型转换为byte类型可能会发生溢出
D.double类型转换为float类型必须使用强制类型转换
个人解析:表达式String.format("%.4f",Math.PI)截取小数采用到四舍五入,因此该表达式的值(是字符串类型)为“3.1416”。
7.下列程序的运行结果为(C)。
public class TestJava {
public static void main(String[] args) {
A1 a2=new A2(2022);
}
}
class A1{
A1(){
System.out.println("called A1()");
}
A1(int a){
System.out.println("called A1(int a)");
}
}
class A2 extends A1{
A2(){
System.out.println("called A2()");
}
A2(int a){
super();
System.out.println("called A2(int a)");
}
}
A.
called A2(int a)
B.
called A1(int a)
called A2(int a)
C.
called A1()
called A2(int a)
D.
called A2()
called A2(int a)
个人解析:A2的带参构造函数中的super(),其调用的是父类A1的无参构函数。
8.A类中定义了一个方法:protected void show( ){},B类是A的子类,B类中要对A类中的show方法进行重写,则哪一项是正确的(C)。
A.protected int show( ){}
B.void show( ){}
C.public void show( ){}
D.private void show( ){}
个人解析:继承后的方法其访问权限范围不能缩小(可以扩大或者保持),所以D首先被排除;B不加限定符,其访问权限范围为default,在同一包中与protected相同,但是不能被其他包中的类进行访问,因此范围小于protected;A将返回值void修改为int,所以不正确,否则也是一个正确答案。综上所述,C是本题答案。
9.关于JDBC,哪一项叙述是不正确的(D)。
A.JDBC屏蔽了底层数据库系统的差异性,为程序员访问不同数据库提供统一的面向对象的编程接口。
B.JDBC编程接口中的很多方法声明可能抛出SQLException异常,必须用try-catch进行捕捉处理或继续声明抛出。
C.Connection类型的实例代表具体的数据库连接,为向目标数据库发送和执行SQL语句提供支持。
D.Statement类型的实例用于执行不带参数的SQL语句,PreparedStatement可用于执行带参数的SQL语句,相比之下,Statement的执行效率较高。
个人解析:PreparedStatement有预编译机制,与Statement相比较,执行效率较高。
10.为了使类A的成员变量对所有子类可见,对包外的非子类不可见,则类A的成员变量应该使用的权限修饰符是(B)。
A. public
B. protected
C. private
D.缺省
个人解析:无(基本Java知识点)
11. 关于下列程序,哪一项叙述是正确的?(A)
class A {
int m;
public A() {
m = 5;
}
public void setM(int n) {
m = n;
n++;
}
public int getM() {
return m;
}
}
public class Test {
static void test(A ba) {
ba.setM(20);
}
public static void main(String[] args) {
A a;
int t = 10;
a = new A();
a.setM(t);
System.out.println("a.m=" + a.getM());
System.out.println("t=" + t);
test(a);
System.out.println("a.m=" + a.getM());
}
}
A.程序通过编译,运行输出结果:
a.m=10
t=10
a.m=20
B.程序通过编译,运行输出结果:
a.m=10
t=11
a.m=20
C.