Java选择题(十四)

1.要在session对象中保存属性,可以使用以下哪个语句( )

正确答案: B 你的答案: B (正确)
A.session.getAttribute(“key”,”value”)
B.session.setAttribute(“key”,”value”)
C.session.setAttribute(“key”)
D.session.getAttribute(“key”)

解释:session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。

2.在为传统面向对象语言的程序做单元测试的时候,经常用到mock对象。Mock对象通过反射数。请问反射最大程度破坏了面向对象的以下哪个特性?

正确答案: A 你的答案: A (正确)
A.封装
B.多态
C.继承
D.抽象.

解释:
反射可以访问原类的私有方法,私有成员变量,因此,反射破坏了Java的封装性

3.类Test1定义如下:
复制代码

public class Test1{//1
    public float aMethod(float a,float b){}//2 
    //3
}//4

将以下哪种方法插入行3是不合法的。
正确答案: C 你的答案: C (正确)
A.public int aMethod(int a,int b){}
B.private float aMethod(int a,int b,int c){}
C.public float aMethod(float a,float b){}
D.public float aMethod(float a,float b,float c){}

解释:
方法名称相同,参数个数、次序、类型不同
因此重载对返回值没有要求,可以相同,也可以不同
但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载。

4.以下会产生信息丢失的类型转换是( )

正确答案: B 你的答案: B (正确)
A.float a=10
B.int a=(int)8846.0
C.byte a=10; int b=-a
D.double d=100

解释:
小范围转化为大范围的数值型变量,jvm在进行编译的过程中将进行类型的自动提升
大范围到小范围会丢失精度
范围大小依次是:byte、char、short、int、long、float、double

5.以下代码的输出的正确结果是

public class Test {
public static void main(String args[]) {
String s = "祝你考出好成绩!";
System.out.println(s.length());
}
}

正确答案: D 你的答案: D (正确)
A.24
B.16
C.15
D.8

解释:
java的String底层是char数组,它的length()返回数组大小,而unicode中一个汉字是可以用一个char表示的
一个汉字等于一个字符   字符 是char
一个汉字也等于二个字节,字节 是byte

6.以下程序的运行结果是:( )

TreeSet<Integer> set = new TreeSet<Integer>();
 TreeSet<Integer> subSet = new TreeSet<Integer>();
 for(int i=606;i<613;i++){
 if(i%2==0){
 set.add(i);
 }
 }
 subSet = (TreeSet)set.subSet(608,true,611,true);
 set.add(629);
 System.out.println(set+" "+subSet);

正确答案: C 你的答案: C (正确)
A.编译失败
B.发生运行时异常
C.[606, 608, 610, 612, 629] [608, 610]
D.[606, 608, 610, 612, 629] [608, 610,629]

解释:

subset方法是求set的范围内的子集,两个true是表示是否包含端点(608和611),故subSet的值为[608,610]

7.off-heap是指那种内存()

正确答案: B 你的答案: B (正确)
A.JVM GC能管理的内存
B.JVM进程管理的内存
C.在JVM老年代内存区
D.在JVM新生代内存

解释:
off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。

8.以下程序段执行后将有()个字节被写入到文件afile.txt中。

try {
    FileOutputStream fos = new FileOutputStream("afile.txt");
    DataOutputStream dos = new DataOutputStream(fos);
    dos.writeInt(3);
    dos.writeChar(1);
    dos.close();
    fos.close();
} catch (IOException e) {}

正确答案: C 你的答案: B (错误)
A.3
B.5
C.6
D.不确定,与软硬件环境相关

解释:
byte 1个字节
short 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节
char 2个字节
boolean 1个字节或4个字节,在java规范2中,如果boolean用于声明一个基本类型变量时占4个字节,如果声明一个数组类型的时候,那么数组中的每个元素占1个字节。
java中int占4字节,char默认用GBK编码,占2字节
DataOutputStream 是对OutputStream的封装,可以写入java中的数据类型,按照其内存中的编码顺序写入

9.Given the following code:
(给定以下代码:)

import EnclosingOne.InsideOne  
class Enclosingone
{
    public class InsideOne {}

}
public class inertest
{
    public static void main(string[]args)
    {
        EnclosingOne eo = new EnclosingOne();
        //insert code here
    }
    }

Which statement at line 11 constructs an instance of the inner class?
(第11行的哪个语句构造了内部类的实例?)
正确答案: A D 你的答案: A C (错误)
A.InsideOne ei=eo.new InsideOne();
B.eo.InsideOne ei=eo.new InsideOne();
C.InsideOne ei=EnclosingOne.new InsideOne();
D.EnclosingOne.InsideOne ei=eo.new InsideOne();

10.关于Java中的ClassLoader下面的哪些描述是错误的:( )

正确答案: B D F 你的答案: B D E (错误)

A.默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System

B.一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的

C.类装载器需要保证类装载过程的线程安全

D.ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null

E.ClassLoader的父子结构中,默认装载采用了父优先

F.所有ClassLoader装载的类都来自CLASSPATH环境指定的路径

解释:
A、java中类的加载有5个过程,加载、验证、准备、解析、初始化;这便是类加载的5个过程,而类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器)。A正确
B、一个类,由不同的类加载器实例加载的话,会在方法区产生两个不同的类,彼此不可见,并且在堆中生成不同Class实例。
C、类加载器是肯定要保证线程安全的;C正确
D、装载一个不存在的类的时候,因为采用的双亲加载模式,所以强制加载会直接报错,D错误
java.lang.SecurityException: Prohibited package name: java.lang
E、双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成,所以默认是父装载,E正确
F、自定义类加载器实现 继承ClassLoader后重写了findClass方法加载指定路径上的class,F错误

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风儿吹吹吹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值