1.Java Application(Java 应用程序)源程序文件编译后的字节码文件的扩展名是( )。
A.java
B.class
C.exe
D.jar
- 答案:B.class
- 解析:这就很简单的一道题了吧,A: .java是java程序的源代码文件 B: .class不是类的扩展名,JVM并不能直接运行java源文件,需要通过javac将java源文件编译成字节码文件,也就是.class文件,JVM在运行某个类的时候,通过加载指定该.class文件就可以,因为class文件名与类名相同,但是他俩并不是一回事,运行的是类,不是文件。 C: java可以编写成.exe,虽然是exe文件,但是不代表是windows可执行文件,尽管扩展名一样 D: 可以打包成jar,需要有jdk支持,通过JVM运行,这个才是java真正的运行包。
2.下面有关java classloader说法错误的是?
A.Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader
B.ClassLoader使用的是双亲委托模型来搜索类的
C.JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
D.ClassLoader就是用来动态加载class文件到内存当中用的
- 答案:C.JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
- 解析:JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,
- Bootstrap ClassLoader :负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
- Extension ClassLoader :负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
- App ClassLoader :负责加载当前java应用的classpath中的所有类。
3.下面代码运行结果是()
public class Test{
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println("catch语句块");
}
finally{
System.out.println("finally语句块");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println("和是:"+test.add(9, 34));
}
}
A.catch语句块 和是:43
B.编译异常
C.finally语句块 和是:43
D.和是:43 finally语句块
- 答案:C
- 解析:finally{}代码块比return先执行;多个return是按顺序执行的的,多个return执行了一个后,后面的return就不会执行了;不管有没有有异常抛出, finally都会在return返回前执行。
4.运行下面代码,输出的结果是()
class A {
public A() {
System.out.println("class A");
}
{ System.out.println("I'm A class"); }
static { System.out.println("class A static"); }
}
public class B extends A {
public B() {
System.out.println("class B");
}
{ System.out.println("I'm B class"); }
static { System.out.println("class B static"); }
public static void main(String[] args) {
new B();
}
}
A.
B.
C.
D.
- 答案:A
- 解析:Java程序初始化顺序:父类的静态代码块;子类的静态代码块;父类的普通代码块;父类的构造方法;子类的普通代码块;子类的构造方法
5.一个Java源程序文件中定义几个类和接口,则编译该文件后生成几个以.class为后缀的字节码文件。
A.正确
B.错误
- 答案:A
- 解析:这是一个基础的问题,所以就不做过多的解释了,这也是一个基础题,所以要牢记,Java代码编译完后生成的是.class为后缀名的字节码文件
6.For which of these values of ais the expression(a != 3 && a != 4 && a != 5 && a != 6)false?
I. 4
II.6
III. 8
A.I only
B.II only
C.III only
D.I and II only
E.I, II, and III
- 答案:D
- 解析:&& 运算时出现false时运算结果就判断为false,(a != 3 && a != 4 && a != 5 && a != 6)
a = 4;因为a != 4 false 所以 结果false;
a = 6;因为a != 6 false 所以 结果false;
a = 8;因为a != 3 a != 4 a != 5 a != 6都为 ture 所以 结果true
7.下列代码编译和运行的结果是:()
public class Threads4{
public static void main(String[] args){
new Threads4().go();
}
public void go(){
Runnable r=new Runnable(){
public void run(){
System.out.print("foo");
}
};
Thread t=new Thread(r);
t.start();
}
}
A.编译错误
B.抛出运行时异常
C.输出:foo
D.代码正常运行,但是无输出
- 答案:C
- 解析:调用go方法,go方法内实现多线程打印foo,所以选择C
8.what is the result of the following code?
enum AccountType
{
SAVING, FIXED, CURRENT;
private AccountType()
{
System.out.println(“It is a account type”);
}
}
class EnumOne
{
public static void main(String[]args)
{
System.out.println(AccountType.FIXED);
}
}
A.Compiles fine and output is prints”It is a account type”once followed by”FIXED”
B.Compiles fine and output is prints”It is a account type”twice followed by”FIXED”
C.Compiles fine and output is prints”It is a account type”thrice followed by”FIXED”
D.Compiles fine and output is prints”It is a account type”four times followed by”FIXED”
E.Compilation fails
- 答案:C
- 解析:先来翻译一下题目的意思:hat is the result of the following code?以下代码的结果是什么?再者我们要明白枚举类有三个实例,故调用三次构造方法,打印三次It is a account type
9.如果希望监听TCP端口9000,服务器端应该怎样创建socket?
A.new Socket("localhost",9000);
B.new ServerSocket(9000);
C.new Socket(9000);
D.new ServerSocket("localhost",9000);
- 答案:B
- 解析:ServerSocket(int port)是服务端绑定prot端口,调用accept()监听等待客户端连接。Socker("InetAddress address,int port")是创建客户端连接主机的socket流。
10.下列关于系列化和反序列化描述正确的是:
A.序列化是将数据转为n个 byte序列的过程
B.反序列化是将n个 byte转换为数据的过程
C.将类型int转换为4 byte是反序列化过程
D.将8个字节转换为long类型的数据为序列化过程
- 答案:AB
- 解析:序列化:将数据结构转换称为二进制数据流或者文本流的过程。序列化后的数据方便在网络上传输和在硬盘上存储。反序列化:与序列化相反,是将二进制数据流或文本流转换成为易处理和阅读的数据结构的过程。