java面试题集4

来源:互联网 发布:java怎么编译 编辑:程序博客网 时间:2024/05/01 05:35

1、以下程序的输出结果是?

public class Example {

    String str = new String("good");

    char[] ch = { 'a', 'b', 'c' };

 

    public static void main(String args[]) {

        Example ex = new Example();

        ex.change(ex.str, ex.ch);

        System.out.print(ex.str + " and ");

        System.out.print(ex.ch);

    }

 

   public void change(String str, char ch[])      

   {

        str = "test ok";

        ch[0] = 'g';

    }

}

正确答案: B

解释:见http://blog.csdn.net/u013055396/article/details/48391503

2、关于JAVA的垃圾回收机制,下面哪些结论是正确?

程序可以任意指定释放内存的时间

JAVA程序不能依赖于垃圾回收的时间或者顺序

程序可明确地标识某个局部变量的引用不再被使用

程序可以显式地立即释放对象占有的内存

正确答案: B

解释:GC是完全自动的,不能确定具体的回收时间

另外C中,局部变量是放在栈中,而GC是用于堆,两者没有关联

3、 下面有关mavenant的描述,描述错误的是?

Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码

Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里

mavenant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期

Ant构建文件默认命名为build.xmlMaven默认构建文件为pom.xml

正确答案: C 

解释:AntMaven都是基于Java的构建(build)工具。理论上来说,有些类似于(UnixC中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。 

Ant特点 

没有一个约定的目录结构 必须明确让ant做什么,什么时候做,然后编译,打包 没有生命周期,必须定义目标及其实现的任务序列 没有集成依赖管理 

Maven特点 

拥有约定,知道你的代码在哪里,放到哪里去 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 拥有依赖管理,仓库管理

4、 如下代码,执行test()函数后,屏幕打印结果为()

public class Test2

{

    public void add(Byte b)

    {

        b = b++;

    }

    public void test()

    {

        Byte a = 127;

        Byte b = 127;

        add(++a);

        System.out.print(a + " ");

        add(b);

        System.out.print(b + "");

    }

}

正确答案: D

解释:public void add(Byte b){ b=b++; } 这里涉及java的自动装包/自动拆包(AutoBoxing/UnBoxing) Byte的首字母为大写,是类,看似是引用传递,但是在add函数内实现++操作,会自动拆包成byte值传递类型,所以add函数还是不能实现自增功能。也就是说add函数只是个摆设,没有任何作用。 Byte类型值大小为-128~127之间。 add(++a);这里++a会越界,a的值变为-128 add(b); 前面说了,add不起任何作用,b还是127

5、 关于spring说法错误的是()

spring是一个轻量级JAVA EE的框架集合

spring是“依赖注入”模式的实现

使用spring可以实现声明事务

spring提供了AOP方式的日志系统

正确答案: D

解释:Spring并没有提供日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统。

6、如何放掉一个指定占据的内存空间?()

调用free()方法

代用system.gc()方法

赋值给该项对象的引用为null

程序员无法明确强制垃圾回收器运行

正确答案: D

解释:Ajava属于自动内存回收,不能调用free是否内存

B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象【其实这个gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收。但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的对策。

C,赋值该对象引用为null,没有被引用的对象会被垃圾回收器当做垃圾进行回收,但是具体什么时候回收是程序员无法控制的

D,在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。

7、以下关于JAVA语言异常处理描述正确的有?

throw关键字可以在方法上声明该方法要抛出的异常。

throws用于抛出异常对象。

try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。

finally语句块是不管有没有出现异常都要执行的内容。

try块中不可以抛出异常

正确答案: C D

解释:Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。

throw用于抛出异常对象。

throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。

try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。

cacth用于捕获从try中抛出的异常并作出处理。

finally语句块是不管有没有出现异常都要执行的内容。

8、观察以下代码:

class Car extends Vehicle

{

    public static void main (String[] args)

    {

        new  Car(). run();

    }

    private final void run()

    {

        System. out. println ("Car");

    }

}

class Vehicle

{

    private final void run()

    {

        System. out. println("Vehicle");

    }

}

正确答案: A

解释:首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。

9、What will be printed when you execute the following code?

class C {

    C() {

        System.out.print("C");

    }

}

 

class A {

    C c = new C();

 

    A() {

        this("A");

        System.out.print("A");

    }

 

    A(String s) {

        System.out.print(s);

    }

}

 

class Test extends A {

    Test() {

        super("B");

        System.out.print("B");

    }

 

    public static void main(String[] args) {

        new Test();

    }

}

BB

CBB

BAB

None of the above

正确答案: B 

解释:初始化过程是这样的: 

1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 

2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 

3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;

4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 

 

1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出

2super("B"); 表示调用父类的构造方法,不调用父类的无参构造函数,输出

3) System.out.print("B"); 

 所以输出CBB

10、Java数据库连接库JDBC用到哪种设计模式?

生成器

桥接模式

抽象工厂

单例模式

正确答案: B

解释:桥接模式。JDBC提供两套接口,一个面向数据库厂商,一个面向JDBC使用者。

11、truefalsenullsizeofgotosynchronized 哪些是Java关键字?

true

false

null

sizeof

goto

synchronized

正确答案: E F 

解释:java中的关键字有abstract、 assert、 boolean、 breakbytecasecatchchar、 class const(保留关键字)、continuedefaultdo、 doubleelseenumextendsfinalfinally、 folatforgoto(保留关键字)、ifimplements、 importinstanceofintinterfacelongnativenew、 packageprivateprotectedpublicreturnshortstaticstrictfpsupperswitchsychronizedthisthrowthrowstransienttryvoidvolatilewhile

12、java中,StringBuilderStringBuffer的区别,下面说法错误的是?

StringBuffer是线程安全的

StringBuilder是非线程安全的

StringBuffer对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。

效率比较String<StringBuffer<StringBuilder,但是在 String S1 = This is only a” “ simple” “ test”时,String效率最高。

正确答案: C 

解释:StringString  类型进行改变的时候其实都等同于生成了一个新的  String  对象,然后将指针指向新的  String  对象,而不是StringBufferStringBuffer每次结果都会对  StringBuffer  对象本身进行操作,而不是生成新的对象,再改变对象引用。 

13 Consider the following code:

String s=null;

Which code fragments cause an object of type NullPointerException to be thrown?

if((s!=null)&(s.length()>0))

if((s!=null)&&(s.length()>0))

if((s==null)|(s.length()==0))

if(s==null)||(s.length()==0))

正确答案: A C

解释:A,单个与操作的符号用在整数上是按位与,用在布尔型变量上跟&&功能类似,但是区别是无论前面是否为真,后面必定执行,因此抛出异常

B,与操作,前半部分判断为假,后面不再执行

C,这里跟 && 的区别类似,后面必定执行,因此抛出异常

D,或语句,前面为真,整个结果必定为真,后面不执行

14、代码片段: 

byte b1=1,b2=2,b3,b6; 

final byte b4=4,b5=6; 

b6=b4+b5; 

b3=(b1+b2); 

System.out.println(b3+b6);

关于上面代码片段叙述正确的是()

正确答案: C

解释:表达式的数据类型自动提升关于类型的自动提升,注意下面的规则。

①所有的byte,short,char型的值将被提升为int型;

②如果有一个操作数是long型,计算结果是long型;

③如果有一个操作数是float型,计算结果是float型;

④如果有一个操作数是double型,计算结果是double型;

而声明为final的变量会被JVM优化,第6行相当于 b6 = 10

0 0
原创粉丝点击