Java笔试题(二)

1.以下java程序代码,执行后的结果是()

java.util.HashMap map=new java.util.HashMap(); 
map.put("name",null);      
map.put("name","Jack");
System.out.println(map.size());

答案:1

解析:

1.HashMap 可以插入 null 的 key 或 value。

2.插入的时候,检查是否已经存在相同的 key,如果不存在,则直接插入,如果存在,则用新的 value 替换旧的 value。

3.在本题中,第一条 put 语句,会将 key / value 对插入 HashMap,而第二条 put,因为已经存在一个 key 为 name 的项,所以会用新的 value 替换旧的 vaue,因此,两条 put 之后,HashMap 中只有一个 key / value 键值对。那就是(name,jack)。所以,size为 1。

 

2.下面程序的运行结果是()

String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);

答案:false

解析:

str1 指向的常量分配在字符串常量池中

“he” 在编译期分配在字符串常量池中,new String("llo") 指向的常量 “llo” 也分配在字符串常量池中。

虽然 str2 也是经过初始化,但是无法判断 new String("llo") 到底是什么,进而不会将 = 号右侧的内容存于常量池,而是在通过构造时在堆区中的常量池外的内存中声明,至此 str2 与 str1 不止是分配内存的时期不同(一个在编译期,一个在运行期)而且在内存空间的区域也不同。

 

3.以下代码执行后输出结果为( )

public class ClassTest{
     String str = new String("hello");
     char[] ch = {'a','b','c'};
     public void fun(String str, char ch[]){
     str="world";
     ch[0]='d';
 }
 public static void main(String[] args) {
     ClassTest test1 = new ClassTest();
     test1.fun(test1.str,test1.ch);
     System.out.print(test1.str + " and ");
     System.out.print(test1.ch);
     }
 }

答案:hello and dbc

解析:

1.Java 中都是按栈中的值传递,基本数据类型栈中的值就是实际存储的值,引用类型栈中的值就是指向堆中的地址。

2.String 和 char[ ] 都是引用类型,所以在方法中传递的都是指向真实数据的地址。

3.String 在源码中的是这么写的:public final class String,final 类型不可改变。fun() 方法是开辟一块新的内存,将 world 放入内存,然后把新的地址给 fun() 方法中的 str(形参)。也就是说,fun() 方法中根本没有改变初始存放 “hello” 的内存(地址)值,当这个方法返回时,main 方法中的 str 依然是那个没修改前的引用,当然还是输出 “hello” 了。

 

4.Java 的跨平台特性是指编译后的文件字节码文件,即 class 文件)跨平台,而不是源程序跨平台。该 class 文件与平台无关,而 class 文件经过解释执行之后翻译成最终的机器码,这是平台相关的。

 

5.JSP分页代码中,正确的步骤次序

1.count(*) 得到总记录数

2.计算总页数

3.过滤显示本页数据

 

6.Servlet的生命周期一般可以用三个方法来表示:

1.init():仅执行一次,负责在装载 Servlet 时初始化 Servlet 对象

2.service():核心方法,一般 HttpServlet 中会有 get,post 两种处理方式。在调用 doGet 和 doPost 方法时会构造 servletRequest 和servletResponse 请求和响应对象作为参数。

3.destory():在停止并且卸载 Servlet 时执行,负责释放资源

初始化阶段:Servlet 启动,会读取配置文件中的信息,构造指定的 Servlet 对象,创建 ServletConfig 对象,将 ServletConfig 作为参数来调用 init() 方法。

Java笔试题(二)