Java每日一题 Day_9
1.下面程序的输出是:()
String x="fmn";
x.toUpperCase();
String y=x.replace('f','F');
y=y+"wxy";
System.out.println(y);
A FmNwxy
B fmnwxy
C wxyfmn
D Fmnwxy
正确答案: D
解析为:
String x = "fmm";“fmn”是在常量的不可变对象。
x.toUpperCase();在堆中new一个“FMN”对象。但无任何引用指向它。
String y = x.replace('f','F');在堆中new一个“Fmn”对象,y指向它。
y = y +“wxy”;在堆中重新new一个“Fmnwxy”对象,修改y指向,现在y指向它。
所以结果为:Fmnwxy
2.以下多线程对int型变量x的操作,哪个不需要进行同步()
A ++x
B x=y
C x++
D x=1
正确答案: D
解析为:
A.由于y的值不确定,所以要加锁;
B,C 两个在多线程情况下是必须要加锁的,因为他们是先被读入寄存器,然后再进行+1操作,如果没有加锁,那么可能会出现数据异常;
D 原子操作,所以不需要加锁
原子性:指该操作不能再继续划分为更小的操作。
Java中的原子操作包括:
1、除long和double之外的基本类型的赋值操作
2、所有引用reference的赋值操作
3、java.concurrent.Atomic.* 包中所有类的一切操作
3. 关于 JAVA 堆,下面说法错误的是()
A 所有类的实例和数组都是在堆上分配内存的
B 对象所占的堆内存是由自动内存管理系统回收
C 堆内存由存活和死亡的对象,空闲碎片区组成
D 数组是分配在栈中的
正确答案: D
解析为:
一句话解决:数组是对象,所有对象存储在堆内存中,而基本数据类型存储在栈内存中。
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
4.一个以“.java”为后缀的源文件
A 只能包含一个public类,类名必须与文件名相同
B 只能包含与文件名相同的public类以及其中的内部类
C 只能有一个与文件名相同的public类,可以包含其他非public类(不考虑内部类)
D 可以包含任意public类
正确答案: C
5.JAVA语言的下面几种数组复制方法中,哪个效率最高?
A for循环逐一复制
B System.arraycopy
C Arrays.copyOf
D 使用clone方法
正确答案: B
解析为:
效率:System.arraycopy > clone > Arrays.copyOf > for循环
6.下面那些情况可以终止当前线程的运行?
A 当一个优先级高的线程进入就绪状态时
B 抛出一个异常时
C 当该线程调用sleep()方法时
D 当创建一个新线程时
正确答案: B
解析为:
pthread_clean_pop抛出一个例外,线程终止!也可以通过其他线程调用pthread_cancel()函数来终止另一个线程,当前选择选A。
7.对文件名为Test.java的java代码描述正确的是()
class Person {
String name = "No name";
public Person(String nm) {
name = nm;
}
}
class Employee extends Person {
String empID = "0000";
public Employee(String id) {
empID = id;
}
}
public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
}
}
A 输出:0000
B 输出:123
C 编译报错
D 输出:No name
正确答案: C
选C
解析为:
父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数, 添加super("nm"); 否则报错: Implicit super constructor
Person() is undefined. Must explicitly invoke another constructor
8.有关下述Java代码描述正确的选项是____。
public class TestClass {
private static void testMethod(){
System.out.println("testMethod");
}
public static void main(String[] args) {
((TestClass)null).testMethod();
}
}
A 编译不通过
B 编译通过,运行异常,报NullPointerException
C 编译通过,运行异常,报IllegalArgumentException
D 编译通过,运行异常,报NoSuchMethodException
E 编译通过,运行异常,报Exception
F 运行正常,输出testMethod
正确答案: F
9.下列java程序的输出结果为____。
public class Example{
String str=new String("hello");
char[]ch={'a','b'};
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]='c';
}
}
A hello and ab
B hello and cb
C hello and a
D test ok and ab
E test ok and cb
F test ok and c
正确答案: B
解析为:
在change方法中,str是临时变量,在堆中new一个str对象,但调用之后无任何引用指向它。而char[] ch是引用,直接修改了ch[0]的值。
10.在jdk1.5之后,下列 java 程序输出结果为______。
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));
A true,false
B true,true
C false,true
D false,false
E 对于不同的环境结果不同
F 程序无法执行
正确答案: B
解析为:
JDK1.5以上支持自动拆装箱
装包/装箱:将简单类型包装成包装类型