Java试题-选择题(30)
题目
线程的实现可分为三类,下列哪一项不是 ?
A:用户级线程
B:内核级线程
C:混合线程
D:轻量级进程关于下列程序段的输出结果,说法正确的是 ?
A:有错误,变量i没有初始化。
B:null
C:1
D:0
public class MyClass{
static int i;
public static void main(String argv[]){
System.out.println(i);
}
}
以下描述错误的一项是 ?
A:程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
B:原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
C:方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
D:Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的下面那些情况可以终止当前线程的运行 ?
A:当一个优先级高的线程进入就绪状态时
B:抛出一个异常时
C:当该线程调用sleep()方法时
D:当创建一个新线程时语句:char foo=‘中’,是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译) ?
A:正确
B:错误指出下列程序运行的结果 ?
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';
}
}
()运算符把其操作数中所有值为0和所有值为1的位分别在结果的相应中设置1和0 ?
A:&
B:|
C:!
D:~李先生去10层楼的8层办事,恰赶上电梯停电,他只能步行爬楼。他从第1层爬到第4层用了48秒,请问以同样的速度爬到第8层需要多少秒?()
A.112
B.96
C.64
D.48abstract和final可以同时作为一个类的修饰符 ?
A:正确
B:错误甲、乙两个科室各有4名职员,且都是男女各半。现从两个科室中选出4人参加培训,要求女职员比重不得低于一半,且每个科室至少选1人。问有多少种不同的选法?()
A.67
B.63
C.53
D.51在使用super和this关键字时,以下描述正确的是 ?
A:在子类构造方法中使用 super() 显示调用父类的构造方法,super() 必须写在子类构造方法的第一行,否则编译不通过
B:super() 和 this() 不一定要放在构造方法内第一行
C:this() 和 super() 可以同时出现在一个构造函数中
D:this() 和 super() 可以在static环境中使用,包括static方法和static语句块java语言中的数组元素下标总是从0开始,下标可以是非负整数 ?
A:正确
B:错误执行下列代码的输出结果是( ) ?
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;
}
}
}
在选择开发方法时,不适合使用原型法的情况是()
A.用户需求模糊不清
B.系统设计方案难以确定
C.系统使用范围变化很大
D.用户的数据资源缺乏组织和管理一个Java源程序文件中定义几个类和接口,则编译该文件后生成几个以.class为后缀的字节码文件 ?
A:正确
B:错误下列说法正确的是 ?
A:volatile,synchronized 都可以修改变量,方法以及代码块
B:volatile,synchronized 在多线程中都会存在阻塞问题
C:volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
D:volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性以下对选择语句描述错误的是 ?
A:根据某一条件重复执行一部分代码直到满足终止条件为止
B:可以根据条件控制程序流程,改变程序执行的顺序
C:选择语句可以嵌套使用
D:当条件满足时就会执行相应的语句有如下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);下面有关JVM内存,说法错误的是 ?
A:程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
B:虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
C:方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
D:原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的以下那个数据结构是适用于"数据必须以相反的顺序存储然后检索" ?
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,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种。计算(3,1)情况(甲选3人,乙选1人):
由于甲、乙科室对称,此情况与(1,3)相同,满足条件的选法也为12种。计算(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) 原则。最后存储的数据最先被检索,存储顺序与检索顺序完全相反。