一些Java面试题

 1.考察String类型的字符串是不可变的

	public static class StringTest{
		String str = new String("old");
		char[] ch = {'a','b','c'};
		public static void main(String[] args) {
			StringTest st = new StringTest();
			st.change(st.str,st.ch);
			System.out.print(st.str+"and");
			System.out.print(st.ch);
		}
		public void change(String str,char ch[]) {
			str = "new";
			ch[0]='n';
		}
	}//结果为 oldandnbc

解析:str的类型是String,String的值是不能修改的,所谓的修改只会新创建新的String,而ex.str依然指向原来的String地址,所以它的值没有改变。数组传递的是引用,即指向地址空间的变量,所以用这个变量来修改值时也就修改了内存地址空间里的值,因为这个地址里的数据是所有指向该地址的变量所共有的,所以在调用函数时,数组的值会发生改变。

2.考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。

class TestA {
	    public TestA() {
	        System.out.println("HelloA");
	    }
	    { System.out.println("I'm A class"); }
	    static { System.out.println("static A"); }
	}
	public class TestB extends TestA {
	    public TestB() {
	        System.out.println("HelloB");
	    }
	    { System.out.println("I'm B class"); }	    
	    static { System.out.println("static B"); }	    
	    public static void main(String[] args) {
			new TestB();
		}
	}
	/*结果为
     static A
     static B
     I'm A class
     HelloA
     I'm B class
     HelloB
	 */

 解析:对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

3. getCustomerInfo()方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException,将会输出什么结果(IOException!)       (考察多个catch语句块的执行顺序。)

 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!");
        }
    }

 解析:当用多个catch语句时,catch语句块在次序上有先后之分。从最前面的catch语句块依次先后进行异常类型匹配,这样如果父异常在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得匹配的机会,也即子异常类型所在的catch语句块将是不可到达的语句。所以,一般将父类异常类即Exception老大放在catch语句块的最后一个。

4.下面方法输入2时返回值是多少(6)    (考察switch case 语句)

public static int getValue(int i) {
	int result = 0;
	switch (i) {
	case 1:
		result =result+i;
	case 2:
		result = result+ i*1;
	case 3:
		result = result + i*2;
	}
	return result;
}
public static void main(String[] args) {
	Test01 t = new Test01();
	int a=t.getValue(2);
	System.out.println(a);
}//结果为 6

 解析:当case后没有break时就继续执行下一个case语句;有default就会执行default

5.选项中哪一行代码可以替换题目中//add code here而不产生编译错误?(A)

public abstract class MyClass {

     public int constInt = 5;
     //add code here
     public void method() {
     }
}
//A public abstract void method(int a);

//B constInt = constInt + 5;

//C public int method();

//D public abstract void anotherMethod() {}

 解析:考察抽象类抽象方法 (1)A选项正确 (2)B选项由于抽象类中初始化变量后变量值不可以更改所以错误 (3)C选项不可以定义相同方法名不同返回值类型的方法(可以定义相同方法名不同参数的方法)(4)D选项抽象方法不能有方法体

另:抽象类和接口的区别:

(1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

(2)abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

(3)在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。

(4)abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"has-a"关系。

(5)实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。抽象类中可以有非抽象方法。接口中则不能有实现方法。

(6)接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以在子类中重新赋值。

6. ArrayList list = new ArrayList(20);中的list扩充几次?答案是0次

解析:如果是ArrayList list = new ArrayList();不给定初始容量时默认长度为10,使用移位方式扩容每次增加为之前的1.5倍。

ArrayList list = new ArrayList(20);直接给定初始容量的不需要扩容。

7.Java接口的修饰符可以(A B D) 
A private B protected C final D abstract 

解析:private可以修饰(在内部类中)但是一般不使用   protected修饰后只能在本包内调用   接口默认是abstract的

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值