Java试题-选择题(30)

发布于:2025-09-03 ⋅ 阅读:(27) ⋅ 点赞:(0)

Java试题-选择题(30)

题目

  1. 线程的实现可分为三类,下列哪一项不是 ?
    A:用户级线程
    B:内核级线程
    C:混合线程
    D:轻量级进程

  2. 关于下列程序段的输出结果,说法正确的是 ?
    A:有错误,变量i没有初始化。
    B:null
    C:1
    D:0

public class MyClass{
	static int i;
	public static void main(String argv[]){
		System.out.println(i);
	}
}
  1. 以下描述错误的一项是 ?
    A:程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
    B:原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
    C:方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
    D:Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

  2. 下面那些情况可以终止当前线程的运行 ?
    A:当一个优先级高的线程进入就绪状态时
    B:抛出一个异常时
    C:当该线程调用sleep()方法时
    D:当创建一个新线程时

  3. 语句:char foo=‘中’,是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译) ?
    A:正确
    B:错误

  4. 指出下列程序运行的结果 ?
    A:tarena and abc
    B:tarena and gbc
    C:test ok and abc
    D:test ok and gbc

public class Example{
	String str=new String("tarena");
	char[]ch={'a','b','c'};
	public static void main(String args[]){
		Example ex=new Example();
		ex.change(ex.str,ex.ch);
		System.out.print(ex.str+" and ");
		System.out.print(ex.ch);
	}
	public void change(String str,char ch[]){
		//引用类型变量,传递的是地址,属于引用传递。
		str="test ok";
		ch[0]='g';
	}
}
  1. ()运算符把其操作数中所有值为0和所有值为1的位分别在结果的相应中设置1和0 ?
    A:&
    B:|
    C:!
    D:~

  2. 李先生去10层楼的8层办事,恰赶上电梯停电,他只能步行爬楼。他从第1层爬到第4层用了48秒,请问以同样的速度爬到第8层需要多少秒?()
    A.112
    B.96
    C.64
    D.48

  3. abstract和final可以同时作为一个类的修饰符 ?
    A:正确
    B:错误

  4. 甲、乙两个科室各有4名职员,且都是男女各半。现从两个科室中选出4人参加培训,要求女职员比重不得低于一半,且每个科室至少选1人。问有多少种不同的选法?()
    A.67
    B.63
    C.53
    D.51

  5. 在使用super和this关键字时,以下描述正确的是 ?
    A:在子类构造方法中使用 super() 显示调用父类的构造方法,super() 必须写在子类构造方法的第一行,否则编译不通过
    B:super() 和 this() 不一定要放在构造方法内第一行
    C:this() 和 super() 可以同时出现在一个构造函数中
    D:this() 和 super() 可以在static环境中使用,包括static方法和static语句块

  6. java语言中的数组元素下标总是从0开始,下标可以是非负整数 ?
    A:正确
    B:错误

  7. 执行下列代码的输出结果是( ) ?
    A:10
    B:20
    C:30
    D:40

public class Demo{
 public static void main(String args[]){
   int num = 10;
   System.out.println(test(num));
}
public static int test(int b){
   try
   {
    b += 10;
    return b;
   }
   catch(RuntimeException e)
   {
   }
   catch(Exception e2)
   {
   }
   finally
   {
    b += 10;
    return b;
   }
  }
}
  1. 在选择开发方法时,不适合使用原型法的情况是()
    A.用户需求模糊不清
    B.系统设计方案难以确定
    C.系统使用范围变化很大
    D.用户的数据资源缺乏组织和管理

  2. 一个Java源程序文件中定义几个类和接口,则编译该文件后生成几个以.class为后缀的字节码文件 ?
    A:正确
    B:错误

  3. 下列说法正确的是 ?
    A:volatile,synchronized 都可以修改变量,方法以及代码块
    B:volatile,synchronized 在多线程中都会存在阻塞问题
    C:volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
    D:volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

  4. 以下对选择语句描述错误的是 ?
    A:根据某一条件重复执行一部分代码直到满足终止条件为止
    B:可以根据条件控制程序流程,改变程序执行的顺序
    C:选择语句可以嵌套使用
    D:当条件满足时就会执行相应的语句

  5. 有如下4条语句:Integer i01=59; int i02=59; Integer i03=Integer.valueOf(59); Integer i04=new Integer(59); 以下输出结果为false的是: ?
    A:System.out.println(i01 == i02);
    B:System.out.println(i01 == i03);
    C:System.out.println(i03 == i04);
    D:System.out.println(i02 == i04);

  6. 下面有关JVM内存,说法错误的是 ?
    A:程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
    B:虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
    C:方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
    D:原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

  7. 以下那个数据结构是适用于"数据必须以相反的顺序存储然后检索" ?
    A:Stack
    B:Queue
    C:List
    D:Liink List

答案

1 2 3 4 5 6 7 8 9 10
D D C B A B D A B D
11 12 13 14 15 16 17 18 19 20
A A C D A C A C C A

解析

1. D

线程的实现通常分为以下三类:
A:用户级线程 (User-Level Threads)‌:由用户空间的线程库管理,内核无感知。
B:内核级线程 (Kernel-Level Threads)‌:由操作系统内核直接管理。
C:混合线程 (Hybrid Threads)‌:结合用户级和内核级线程(如多对多模型)。

轻量级进程 (Lightweight Process, LWP)‌ 是 ‌内核级线程的一种实现方式‌(例如在 Solaris 系统中),并非独立的线程实现类别。
它本质上是内核线程的抽象,用于映射用户线程到内核线程,属于内核级线程的扩展技术。

2. D

Java默认初始化规则

1、‌静态变量(类变量)‌:
属于类级别,在类加载时自动初始化
基本数据类型有明确默认值:
int → ‌0‌
double → 0.0
boolean → false
引用类型 → null

‌2、实例变量‌:
同样会自动初始化(规则同上)

3、局部变量‌:
‌必须手动初始化‌(否则编译错误)
例如方法内部的变量:int x; 不赋值直接使用会报错

3.C

方法区(在Java 8后由元空间实现)用于存储类信息、常量、静态变量等数据,但它是‌线程共享‌的,而不是线程隔离的。所有线程共享同一个方法区。线程隔离的区域是程序计数器、虚拟机栈等。

4. B

‌未捕获的异常会导致线程终止‌(如Java中抛出RuntimeException且未被try-catch处理时)。

5. A

语句 char foo = ‘中’; 在指定条件下是‌正确‌的。原因如下:

1、char 类型的能力‌:
Java 的 char 类型是 ‌16 位无符号整数‌(范围 0~65535),采用 ‌UTF-16 编码‌。字符 ‘中’ 的 Unicode 码点为 ‌U+4E2D(十进制 20013)‌,在 char 的取值范围内(20013 < 65535),因此可以被正确存储。

2、编码与编译参数‌:
源文件以 ‌GB2312 编码存储‌:GB2312 完全支持中文字符(包括 ‘中’)。
使用 javac -encoding GB2312 编译:明确告知编译器使用 GB2312 解码源文件,确保 ‘中’ 能被正确读取。

3、关键规则‌:
在 Java 中,‌单个 Unicode 字符(BMP 平面内)可以用 char 直接表示‌。‘中’ 位于基本多语言平面(BMP),仅需 1 个 char 单元(UTF-16 无需代理对)。

6.B

‌String的不可变性‌:方法内对String的修改不会影响原引用。
‌数组的可变性‌:方法内对数组元素的修改会直接影响原数组。
Java中‌参数传递本质是值传递‌(传递地址的副本),但引用类型通过地址副本可修改对象内容。

7.D

按位取反运算符精确实现了题目描述的功能:将0位转1,1位转0。

8. A

爬楼时间是针对楼层间隔(段),而非楼层本身。
从第1层到第4层:4 - 1 = 3个间隔 → 48秒。
从第1层到第8层:8 - 1 = 7个间隔 → 7 × (48 ÷ 3) = 7 × 16 = 112秒。

9. B

abstract(抽象类)‌:
抽象类必须被继承,它本身不能实例化。
抽象类通常包含抽象方法(未实现的方法),需要子类重写实现。

final(最终类)‌:
final 修饰的类‌禁止被继承‌(即不能有子类)。

abstract 和 final 在功能上互斥,‌不能同时用于修饰类或方法‌。

10. D

要解决这个问题,需要计算从甲、乙两个科室各选4名职员(每个科室男女各半,即2男2女)中选出4人参加培训的选法,满足两个条件:
1、女职员比重不得低于一半(即至少2名女性)。
2、每个科室至少选1人。

步骤分析:
由于每个科室至少选1人,选法可分为三种情况:
从甲科室选1人,从乙科室选3人(记为(1,3))。
从甲科室选3人,从乙科室选1人(记为(3,1))。
从甲科室选2人,从乙科室选2人(记为(2,2))。

  1. 计算(1,3)情况(甲选1人,乙选3人):
    甲科室选1人:
    选男:C(2,1) = 2种方式(F_甲 = 0)。
    选女:C(2,1) = 2种方式(F_甲 = 1)。
    乙科室选3人(总C(4,3) = 4种方式):
    选2男1女:C(2,2) × C(2,1) = 1 × 2 = 2种方式(F_乙 = 1)。
    选1男2女:C(2,1) × C(2,2) = 2 × 1 = 2种方式(F_乙 = 2)。
    总女性数F = F_甲 + F_乙 ≥ 2:
    若F_甲 = 0(选男),则F_乙必须 = 2:2(甲选男) × 2(乙选1男2女) = 4种方式。
    若F_甲 = 1(选女),则F_乙可取1或2:2(甲选女) × 4(乙选任意3人) = 8种方式(因为乙选3人总有F_乙 ≥ 1)。
    满足条件的选法:4 + 8 = 12种。

  2. 计算(3,1)情况(甲选3人,乙选1人):
    由于甲、乙科室对称,此情况与(1,3)相同,满足条件的选法也为12种。

  3. 计算(2,2)情况(甲选2人,乙选2人):
    甲科室选2人(总C(4,2) = 6种方式):
    选2男:C(2,2) × C(2,0) = 1 × 1 = 1种(F_甲 = 0)。
    选1男1女:C(2,1) × C(2,1) = 2 × 2 = 4种(F_甲 = 1)。
    选2女:C(2,0) × C(2,2) = 1 × 1 = 1种(F_甲 = 2)。
    乙科室选2人(总C(4,2) = 6种方式),性别分布同甲。
    总女性数F = F_甲 + F_乙 ≥ 2:
    直接计算满足条件的组合:
    F_甲 = 0 且 F_乙 = 2:1(甲选2男) × 1(乙选2女) = 1种。
    F_甲 = 1 且 F_乙 = 1:4(甲选1男1女) × 4(乙选1男1女) = 16种。
    F_甲 = 1 且 F_乙 = 2:4(甲选1男1女) × 1(乙选2女) = 4种。
    F_甲 = 2 且 F_乙 = 0:1(甲选2女) × 1(乙选2男) = 1种。
    F_甲 = 2 且 F_乙 = 1:1(甲选2女) × 4(乙选1男1女) = 4种。
    F_甲 = 2 且 F_乙 = 2:1(甲选2女) × 1(乙选2女) = 1种。
    满足条件的选法:1 + 16 + 4 + 1 + 4 + 1 = 27种。

总计:12 + 12 + 27 = 51种。

11. A

A:在子类构造方法中使用 super() 显示调用父类的构造方法,super() 必须写在子类构造方法的第一行,否则编译不通过‌
正确‌。

B:super() 和 this() 不一定要放在构造方法内第一行‌
错误‌。
super() 和 this() 都必须是构造方法中的‌第一条语句‌。

C:this() 和 super() 可以同时出现在一个构造函数中‌
错误‌。
在一个构造方法内,this() 和 super() ‌不能同时出现‌:
因为它们都要求是构造方法的第一条语句,而一个方法只能有一个第一条语句。
通常,一个构造方法只能选择调用 this()(委托给本类其他构造方法)或 super()(调用父类构造方法),不能同时使用。

D:this() 和 super() 可以在 static 环境中使用,包括 static 方法和 static 语句块‌
错误‌。
this 和 super 关键字都与‌对象实例‌相关:
this 表示当前对象实例,super 表示父类对象实例。
静态环境(如 static 方法或 static 语句块)是类级别的,没有对象实例上下文。
在静态环境中使用 this 或 super 会导致编译错误。

12. A

Java 数组下标严格满足:
1、总是从 0 开始
2、必须是非负整数(且在有效范围内)

13. C

代码执行过程分析:
初始值‌:num = 10 传入 test(int b) 方法,此时 b = 10。
try 块‌:
b += 10 → b = 20。
执行 return b(此时返回值暂存为 20,但‌不会立即返回‌,因为 finally 块必须执行)。
finally 块‌:
b += 10 → b = 30。
执行 return b(覆盖了 try 块中的返回值,最终返回 30)。

14. D

为什么D不适合?‌
原型法的核心是快速构建可运行的简化模型,依赖用户提供的数据和反馈来迭代完善系统。
如果用户的数据资源‌缺乏组织和管理‌(例如数据混乱、不一致、未定义结构或未标准化),会导致:
1、原型无法基于有效数据构建,反馈失去意义。
2、原型迭代过程可能放大数据问题,最终系统无法与实际数据环境兼容。
3、需要先进行数据治理(如清洗、整合、建模),而这不是原型法能解决的。

其他选项分析(适合原型法)‌:
A. 用户需求模糊不清‌:原型法通过用户试用原型逐步澄清需求。
B. 系统设计方案难以确定‌:原型法允许通过迭代原型探索不同设计方案。
C. 系统使用范围变化很大‌:原型法的灵活性适应范围变化。

15. A

在Java中,当一个源文件(.java文件)被编译时,编译器会为每个在该文件中定义的顶级类和接口生成一个对应的以.class为后缀的字节码文件。这包括所有显式定义的类(如普通类、抽象类、枚举)和接口(包括注解接口),无论其访问修饰符(public、protected、private或默认)如何。

16. C

A:volatile,synchronized 都可以修改变量,方法以及代码块‌
‌volatile 只能修饰变量‌(如 volatile int x;),不能修饰方法或代码块。
synchronized 可修饰方法和代码块‌(如 synchronized void f(){} 或 synchronized(obj){}),但不能直接修饰变量。

B:volatile,synchronized 在多线程中都会存在阻塞问题‌
volatile 不会引起阻塞‌:它通过内存屏障实现可见性,无锁机制,线程不会被挂起。
‌synchronized 会引起阻塞‌:未获取锁的线程会进入阻塞状态(BLOCKED)。

D:volatile解决的是变量在多个线程之间的可见性、原子性‌
‌volatile 不保证原子性‌:例如 volatile int i=0; i++ 在多线程下仍可能出错。
synchronized 解决同步性‌(互斥访问)正确,但前半句对 volatile 的描述错误。

17. A

选项 A 的描述属于循环语句的特征,与选择语句无关。

18. C

在Java中,Integer 对象和 int 基本类型的比较涉及自动装箱、拆箱和对象引用比较。分析给定的4条语句:
Integer i01 = 59;:自动装箱,等价于 Integer.valueOf(59)。由于59在Integer缓存范围(-128到127)内,会返回缓存对象。
int i02 = 59;:基本类型 int。
Integer i03 = Integer.valueOf(59);:使用 Integer.valueOf() 方法,59在缓存范围内,返回缓存对象(与 i01 相同)。
Integer i04 = new Integer(59);:使用 new 关键字,强制创建新对象,不在缓存中。

A: System.out.println(i01 == i02);‌
i01 是 Integer 对象,i02 是 int 基本类型。比较时,i01 自动拆箱为 int,比较值(59 == 59),结果为 true。

B: System.out.println(i01 == i03);‌
两者都是 Integer 对象,且值59在缓存范围内,i01 和 i03 指向同一个缓存对象,引用相同,结果为 true。

C: System.out.println(i03 == i04);‌
i03 是缓存对象,i04 是新创建的 Integer 对象。虽然值相同,但引用不同(i04 是新对象),== 比较引用,结果为 false。

D: System.out.println(i02 == i04);‌
i02 是 int 基本类型,i04 是 Integer 对象。比较时,i04 自动拆箱为 int,比较值(59 == 59),结果为 true。

19. C

‌方法区(Method Area)是线程共享的内存区域‌,而非线程隔离。它存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。所有线程共享此区域。

20. A

Stack(栈)遵循 ‌后进先出(LIFO)‌ 原则。最后存储的数据最先被检索,存储顺序与检索顺序完全相反。


网站公告

今日签到

点亮在社区的每一天
去签到