1.Java Application(Java 应用程序)源程序文件编译后的字节码文件的扩展名是( )。
正确答案: B 你的答案: B (正确)
A.java
B.class
C.exe
D.jar
解释:
A: .java是java程序的源代码文件
B: .class不是类的扩展名,JVM并不能直接运行java源文件,需要通过javac将java源文件编译成字节码文件,也就是.class文件,JVM在运行某个类的时候,通过加载指定该.class文件就可以,因为class文件名与类名相同,但是他俩并不是一回事,运行的是类,不是文件。
C: java可以编写成.exe,虽然是exe文件,但是不代表是windows可执行文件,尽管扩展名一样
D: 可以打包成jar,需要有jdk支持,通过JVM运行,这个才是java真正的运行包。
2.以下程序
main()
{
int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
程序运行后的输出结果是()
正确答案: A 你的答案: A (正确)
A.12353514
B.12353513
C.12343514
D.12343513
解释:
m++ ,这里m输出12后,m=13.
++n, 这里n输出35, n依旧=35.
n++, 这里n输出35, n=36.
++m,这里m输出14,m=14,
3.设int x=1,float y=2,则表达式x/y的值是:()
正确答案: D 你的答案: D (正确)
A.0
B.1
C.2
D.以上都不是
解释:
不同基本数据类型转化与运算byte-short-int-long-float-double,float=1转化为float=1.0,int/float相比先转化为同一类型即float(1.0)/float(2.0)=0.5
4.执行语句“int a= ’ 2 ’ ”后,a的值是( )
正确答案: B 你的答案: B (正确)
A.2
B.50
C.49
D.0
解释:
常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。
5.我们在程序中经常使用“System.out.println()”来输出信息,语句中的System是包名,out是类名,println是方法名。
正确答案: B 你的答案: B (正确)
A.对
B.错
解释:
System是java.lang中的类,out为System中的一个静态成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类的方法,所有可以调用类.静态方法.println()方法。
6.存根(Stub)与以下哪种技术有关
正确答案: B 你的答案: B (正确)
A.交换
B.动态链接
C.动态加载
D.磁盘调度
解释:
- 存根类是一个类,它实现了一个接口,它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦。
- RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub
充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。- 每个远程对象都包含一个代理对象stub,当运行在本地Java虚拟机上的程序调用运行在远程Java虚拟机上的对象方法时,它首先在本地创建该对象的代理对象stub,
然后调用代理对象上匹配的方法。每一个远程对象同时也包含一个skeleton对象,skeleton运行在远程对象所在的虚拟机上,接受来自stub对象的调用。这种方式符合等到程序要运行时将目标文件动态链接的思想。
7.关于下面的一段代码,以下哪些说法是正确的:
public static void main(String[] args) {
String a = new String("myString");
String b = "myString";
String c = "my" + "String";
String d = c;
System.out.print(a == b);
System.out.print(a == c);
System.out.print(b == c);
System.out.print(b == d);
}
正确答案: A D 你的答案: A D (错误)
A.System.out.print(a == b)打印出来的是false
B.System.out.print(a == c)打印出来的是true
C.System.out.print(b == c)打印出来的是false
D.System.out.print(b == d)打印出来的是true
8.关于多线程和多进程,下面描述正确的是():
正确答案: A C 你的答案: B C (错误)
A.多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间。
B.线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护。
C.线程的通信速度更快,切换更快,因为他们在同一地址空间内。
D.一个线程可以属于多个进程。
解释:
A.子进程得到的是除了代码段是与父进程共享以外,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,子进程可获得父进程的所有堆和栈的数据,但二者并不共享地址空间。两个是单独的进程,继承了以后二者就没有什么关联了,子进程单独运行;进程的线程之间共享由进程获得的资源,但线程拥有属于自己的一小部分资源,就是栈空间,保存其运行状态和局部自动变量的。
B.线程之间共享进程获得的数据资源,所以开销小,但不利于资源的管理和保护;而进程执行开销大,但是能够很好的进行资源管理和保护。
C.线程的通信速度更快,切换更快,因为他们共享同一进程的地址空间。
D.一个进程可以有多个线程,线程是进程的一个实体,是CPU调度的基本单位。
9.Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
正确答案: A D F 你的答案: A D (错误)
A.Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B.通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C.通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D.Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E.Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F.Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
解释:
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
10.以下语句返回值为 true 的是()
正确答案: A B 你的答案: A B (正确)
A.a1== a2
B.d1== d2
C.b1== b2
D.c1 == c2
解释:
选项A,a1、a2赋值给Integer类型,自动装箱。对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象),变量所指向的是同一个对象,所以a1== a2返回true。
选项B,Integer和int比较会进行自动拆箱,比较的是数值大小,所以d1== d2返回true。
选项C,由于超出自动装箱的范围,return返回的是新建的对象,所以对象内存地址不同,b1 == b2返回false。
选项D,普通new创建对象,两个new创建两个地址不同的对像,所以c1 ==c2返回false。