面试选择题
Posted 王嘻嘻-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试选择题相关的知识,希望对你有一定的参考价值。
1、考虑下面这个简单的例子,让我们看看reflection是如何工作的。
import java.lang.reflect.*;
public class test
public static void main(String[] args)
try
Class c = Class.forName(args[0]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
catch (Throwable e)
System.err.println(e);
其中"c.getDeclaredMethods"的作用是:
A 取得类的公有方法对象
B 取得类的所有公有方法名称
C 取得类的所有方法对象
D 以上选项都不正确
他的回答: A (错误)
正确答案: D
2、java 的字符类型采用的是 Unicode 编码方案,每个 Unicode 码占用()个比特位。
他的回答: 64 (错误) 正确答案: 16
3、下列哪些语句关于 java 内存回收的说明是正确的?
A 程序员必须创建一个线程来释放内存
B 内存回收程序负责释放无用内存
C 内存回收程序允许程序员直接释放内存
D 内存回收程序可以在指定的时间释放内存对象
正确答案: B
4、以下多线程对int型变量x的操作,哪个不需要进行同步()
A ++x
B x=y
C x++
D x=1
他的回答: C (错误) 正确答案: D
5、如果希望某个变量只可以被类本身访问和调用,则应该使用下列哪一种访问控制修饰?
A public
B private
C private protected
D protected
正确答案: B
6、有如下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);
他的回答: B (错误) 正确答案: C
参考答案: A、D选项,当包装类与基本数据类型对比时,包装类会自动拆箱变为基本类型再进行比较,即Integer i01会拆箱为int类型与i02对比。因此System.out.println(i01i02);输出为true。 B选项,包装数据类直接赋值,默认调用其对用的valueOf()方法。那么Integer i03=Integer.valueOf(59);就等价于Integer i01=59;valueOf()操作-128 ~ 127 之内的整型,在第一次引用,会在缓存中new一个对象;再次引用,直接从缓存中查找;操作-128 ~ 127之外的整型,则每次都要new一个对象。也就是说如果 已经创建了一个-128 ~ 127之间的整数,使用valueOf创建第二次时,不会使用new关键字,而用已经缓存的对象。因此System.out.println(i01i03);输出 true。 C选项,包装类是基础数据类型的引用类型,i04的定义使用了new关键字,这会开辟出一块新内存来放置值为59的Integer对象。那么两个地址不同的引用类 型变量进行==判断结果自然是false。答案选择C。
7、关于以下程序代码的说明正确的是()
public class HasStatic // 1
private static int x = 100;// 2
public static void main(String args[]) // 3
HasStatic hsl = new HasStatic();// 4
hsl.x++;// 5
HasStatic hs2 = new HasStatic();// 6
hs2.x++;// 7
hsl = new HasStatic();// 8
hsl.x++;// 9
HasStatic.x--;// 10
System.out.println(" x=" + x);// 11
A 程序通过编译,输出结果为:x=102
B 程序通过编译,输出结果为:x=103
C 10行不能通过编译.因为x星私有静态变量
D 5行不能通过编译.因为引用了私有静态变量
正确答案: A
8、以下代码输出的是:
public class SendValue
public String str="6";
public static void main(String[] args)
SendValue sv=new SendValue();
sv.change(sv.str);
System.out.println(sv.str);
public void change(String str)
str="10";
A 6
B 10
C 都不对
D 16
他的回答: B (错误) 正确答案: A
参考答案:
考察Java得值传递问题,change()方法中的str与sv.str都是新的对象实例成员变量值"6"的引用, 由于String类型的不可变性,change()方法中的str="10"语句实 际上是将传入的str副本引用指向了一个值为“10”的新的内存地址,但原数据引用sv.str的引用值(也就是“6”的内存地址)并没有发生改变,因此sv.str指向的 值仍旧为6。
代码如下
class SendValue public String[] str=“1”; public static void main(String[] args) SendValue sv=new SendValue(); sv.cha nge(sv.str); System.out.println(sv.str[0]); public void change(String[] str) str[0]=“2”;
输出 2
这种情况下则是将srt指向的地址的值从1改成了2,而不是直接将str的副本引用指向一个新地址,再看如下代码 输出 这种情况则是将str的副本引用指向了一个新的内存地址,但原数据引用sv.str并不受影响。 综上,选A
9、于java封装 主要作用在于对外隐藏内部实现细节,增强程序的安全性
10、在类设计中,类的成员变量要求仅仅能够被同一package下的类访问,请问应该使用下列哪个修饰词()
他的回答: protected (错误) 正确答案: 不需要任何修饰词
以上是关于面试选择题的主要内容,如果未能解决你的问题,请参考以下文章