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
解释:如果捕获到了一种类型的异常,后面层级更高的异常就不会执行了