java面试题集 代码_java面试题集5

1、以下方法,哪个不是对add方法的重载?

public class Test

{

public void add( int x,int y,int z){}

}

正确答案: B

解释:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。

原则如下:

一.方法名一定要相同。

二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。

1.如果参数个数不同,就不管它的参数类型了!

2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。

三.方法的返回类型、修饰符可以相同,也可不同。

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

通过DriverManager.getConnection方法加载

调用方法 Class.forName

通过添加系统的jdbc.drivers属性

通过registerDriver方法注册

正确答案: A

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

3、已知如下类定义:

class Base {

public Base (){

//...

}

public Base ( int m ){

//...

}

public void fun( int n ){

//...

}

}

public class Child extends Base{

// member methods

}

如下哪句可以正确地加入子类中?

private void fun( int n ){ //...}

void fun ( int n ){ //... }

protected void fun ( int n ) { //... }

public void fun ( int n ) { //... }

正确答案: D

解释:A,B,C都会提示如下信息:

Cannot reduce the visibility of the inherited method from Base

意思就是告诉你:不能降低从基类继承的方法的可见性。

那么,为什么不能降低可见性呢?

因为,每个子类的实例都应该是一个基类的有效实例,如果降低了方法的可见性,那么就相当于子类失去了一个父类的方法,这个时候,父类将不是一个有效的基类。即如果在父类中定义一个protected方法,那么在子类中可以将其覆盖,并将访问控制属性改为public,反过来则不行。

子类重写了父类的方法,子类的方法的权限修饰符不能比父类低,最好与父类一致。(public >默认修饰符>protected>private)

4、下面有关servlet的层级结构和常用的类,说法正确的有?

GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。

大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现

ServletConfig接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet得配置信息对象

HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息

正确答案: A B C D

解释:HttpServlet是GenericServlet的子类。

GenericServlet是个抽象类,必须给出子类才能实例化。它给 出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的,也就是说 你有可能用非http协议实现它。

HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。

一般没有特殊需要,自己写的Servlet都扩展HttpServlet。

5、以下代码的输出结果是?

public class B

{

public static B t1 = new B();

public static B t2 = new B();

{

System.out.println("构造块");

}

static

{

System.out.println("静态块");

}

public static void main(String[] args)

{

B t = new B();

}

}

静态块 构造块 构造块 构造块

构造块 静态块 构造块 构造块

构造块 构造块 静态块 构造块

构造块 构造块 构造块 静态块

正确答案: C

解释:静态块:用static申明,JVM加载类时执行,仅执行一次

构造块:类中直接用{}定义,每一次创建对象时执行

执行顺序优先级:静态块>main()>构造块>构造方法

静态块按照申明顺序执行,所以先执行publicstaticB t1 = newB();该语句创建对象,则又会调用构造块,输出构造块

接着执行public static B t1 = new B();输出构造块

再执行

static

{

System.out.println("静态块");

}输出静态块

最后main方法执行,创建对象,输出构造块。

6、有关hashMap跟hashTable的区别,说法正确的是?

HashMap和Hashtable都实现了Map接口

HashMap是非synchronized,而Hashtable是synchronized

HashTable使用Enumeration,HashMap使用Iterator

Hashtable直接使用对象的hashCode,HashMap重新计算hash值,而且用与代替求模

正确答案: A B C D

解释:Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

7、下面有关servlet中init,service,destroy方法描述错误的是?

init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法

Service()方法处理客户机发出的所有请求

destroy()方法标志servlet生命周期的结束

servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的

正确答案: D

解释:servlet在多线程下其本身并不是线程安全的。

如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。

8、class Foo {

final int i;

int j;

public void doSomething() {

System.out.println(++j + i);

}

}

的输出是?

0

1

2

不能执行,因为编译有错

正确答案: D

解释:final类型的变量一定要初始化,因为final的变量不可更改。

9、给出以下代码,请给出结果.

class Two{

Byte x;

}

class PassO{

public static void main(String[] args){

PassO p=new PassO();

p.start();

}

void start(){

Two t=new Two();

System.out.print(t.x+””);

Two t2=fix(t);

System.out.print(t.x+” ”+t2.x);

}

Two fix(Two tt){

tt.x=42;

return tt;

}

}

null null 42

null 42 42

0 0 42

0 42 42

An exception is thrown at runtime

Compilation

正确答案: B

解释:此处为Byte是byte的包装类型,初始化为null而不是0

10、下面有关java基本类型的默认值和取值范围,说法错误的是?

字节型的类型默认值是0,取值范围是-2^7—2^7-1

boolean类型默认值是false,取值范围是true\false

字符型类型默认是0,取值范围是-2^15—2^15-1

long类型默认是0,取值范围是-2^63—2^63-1

正确答案: C

解释:byte占8位,而且有正有负。最大值当然就是01111111 = 2^7 - 1。因为负的二进制有个按位取反再加1的操作,所以最小值是10000000,按位取反后为11111111,再加1后为110000000 = -2^7

char的情况:

char占16位,而且没有负值。所以最小值是0。最大值是1111111111111111 = 2^16 - 1

11、接口是一种引用类型,在接口中可以声明( ),但不可以声明公有的域或私有的成员变量。

方法、属性、索引器和事件

方法、属性信息、属性

索引器和字段

事件和字段

正确答案: B

解释:在接口中可以声明方法,属性信息和属性,但不能实例化方法,不能有字段。索引器   是c#里面的知识。

12、在为传统面向对象语言的程序做单元测试的时候,经常用到mock对象。Mock对象通过反射数。请问反射最大程度破坏了面向对象的以下哪个特性?

封装

多态

继承

抽象

正确答案: A

解释:反射破坏代码的封装性,破坏原有的访问修饰符访问限制

13、下列程序的运行结果

public void getCustomerInfo() {

try {

// do something that may cause an Exception

} catch (java.io.FileNotFoundException ex) {

System.out.print("FileNotFoundException!");

} catch (java.io.IOException ex) {

System.out.print("IOException!");

} catch (java.lang.Exception ex) {

System.out.print("Exception!");

}

}

IOException!

IOException!Exception!

FileNotFoundException!IOException!

FileNotFoundException!IOException!Exception!

正确答案: A

解释:如果捕获到了一种类型的异常,后面层级更高的异常就不会执行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值