Java面试题 每日一练(4.9)

1.下列Java代码中的变量a、b、c分别在内存的____存储区存放。

class` `A {
  ``private` `String a = “aa”;
  ``public` `boolean methodB() {
    ``String b = “bb”;
    ``final String c = “cc”;
  ``}
}
  • 堆区、堆区、堆区
  • 堆区、栈区、堆区
  • 堆区、栈区、栈区
  • 堆区、堆区、栈区
  • 静态区、栈区、堆区
  • 静态区、栈区、栈区

解析:

当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。因此,所有在方法中定义的局部变量都是放在栈内存中的;在程序中创建一一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后, 这个对象还可能被另一个引用变量所引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候回收它。

正确答案:C

2.Which lines of the following will produce an error?

byte a1 = 2, a2 = 4, a3;
short s = 16;
a2 = s;
a3 = a1 * a2;
  • Line 3 and Line 4
  • Line 1 only
  • Line 3 only
  • Line 4 only

解析:高位向低位直接转化会报错,byte、char、short参与运算都会变成int类型

正确答案:A

3.下面哪一项不是加载驱动程序的方法?

  • 通过DriverManager.getConnection方法加载
  • 调用方法 Class.forName
  • 通过添加系统的jdbc.drivers属性
  • 通过registerDriver方法注册

解析:

DriverManager.getConnection方法返回一个Connection对象,这是加载驱动之后才能进行的

加载驱动方法示例:

Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”);

正确答案:A

4.在Java线程状态转换时,下列转换不可能发生的有()?

  • 初始态->运行态
  • 就绪态->运行态
  • 阻塞态->运行态
  • 运行态->就绪态

解析:只有就绪态和运行态可以直接相互转换,其他都是单向的
Java面试题 每日一练(4.9)_第1张图片

正确答案:AC

5.在Java中,下列说法错误的有( )

  • 数组是一种对象
  • 数组属于一种原生类
  • int number = []{31,23,33,43,35,63};
  • 数组的大小可以任意改变

解析:

A:数组是对象,int float char这些基本类型不是对象。关于如何判断基本类型和对象,参考下面的:

行为:
基本类型只是一个值,没有任何行为
对象类型有自己的行为
内存分配:
基本类型在栈内分配
对象在堆内分配
对象引用保存在栈内
引用与值:
基本类型是值类型,仅表示一个值,保存在栈内
引用类型分两部分,对象引用保存在栈内,对象保存在堆内,
访问变量,是使用的引用找对象

B:不是,属于引用数据类型,因为声明数组需要分配堆栈空间
D:大小一旦指定,不能改变

正确答案 BCD

6.在jdk1.5之后,下列 java 程序输出结果为______。

int` `i=``0``;
Integer j = ``new` `Integer(``0``);
System.out.println(i==j);
System.out.println(j.equals(i));
  • true,false
  • true,true
  • false,true
  • false,false
  • 对于不同的环境结果不同
  • 程序无法执行

解析:自动装箱与拆箱

正确答案 B

7.下列说法正确的有( )

  • 环境变量可在编译source code时指定
  • 在编译程序时,所能指定的环境变量不包括class path
  • javac一次可同时编译数个Java源文件
  • javac.exe能指定编译结果要置于哪个目录(directory)

解析:

a选项-d即可设置系统属性

c选项一次编译多个java文件用javac *.java. 即可编译当前目录下的所有java文件

d选项-s指定存放生成的源文件的位置

正确答案 ACD

8.下面有关forward和redirect的描述,正确的是() ?

  • forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
  • 执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
  • 执行redirect时,服务器端告诉浏览器重新去请求地址
  • forward是内部重定向,redirect是外部重定向
  • redirect默认将产生301 Permanently moved的HTTP响应

解析:

1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说

forward:高.

redirect:低.

正确答案 BCD

你可能感兴趣的:(每日一练)