Java面试宝典题目大全--基础篇(附答案)

1、switch能否作用在byte、int、long、String?
答案:switch能作用在byte、int、enum常量, 补充:jdk7可以作用在String上

2、short s = 1; s = s + 1;有什么错? short s = 1; s += 1;有什么错?
答案: s = s + 1; 在计算右边的表达式时,隐式的将s转换为int,将一个int类型赋值给short出错,必须强制转换,即: s = (short)(s+1); 而s+=1; 编译器会首先将+=后面的1强制转换为+=前面的数据类型。故无错。

3、char型变量中能不能存贮一个中文汉字?为什么?
答案: 可以,因为java默认采用unicode编码表示一个字符。

4、用最有效率的方法算出2乘以8等於几?
答案: 2<<3 将2左移3位,2的3次方等于8;

5、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
答案: 引用不能变,而引用对象的值可以改变,
比如final StringBuffer BUFF = new StringBuffer("123");
BUFF.append("456"); //打印后是123456的字符串

6、静态变量和实例变量的区别?
答案: 静态变量又叫类变量,属于类而不是对象,用static关键字修饰;而实例变量属于对象,必须先实例化一个对象后,才能使用实例变量。

7、是否可以从一个static方法内部发出对非static方法的调用?
答案: 不能,因为static方法属于类,而非static方法属于实例化对象,静态类方法不知道调用哪个对象的非静态方法。

8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
答案:12, -11;原因:向最大方向四舍五入。

9、请说出作用域public,private,protected,以及不写时的区别
答案:同一个包下的类认为是朋友:friendly。默认为friendly
public: 当前类、子类、同一包、其他包
protected: 当前类、子类、同一包
private: 当前类
friendly: 当前类、同一包

10、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答案: Overloaded是重载,Override是重写。Overloaded在方法参数列表不同时,可以改变返回值的类型。

11、构造器Constructor是否可被override?
答案: Constructor即构造方法,不能被继承,当然不能被重写。

12、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
答案: 接口可以被继承,使用extends关键字;抽象类可以实现接口;抽象类可以继承具体类;抽象类中可以有静态main方法,也可以有静态方法。

13、写clone()方法时,通常都有一行代码,是什么?
答案: super.clone(); clone即克隆,将一个对象拷贝给另一个对象,这两个对象属于独立的对象,改变其中一个对象,不会改变另一个对象。注意有浅克隆和深克隆之分。

14、抽象类和接口的区别:
答案: 1、面向对象中,所有对象都用类来描述,但是并不是所有类都用来描述对象。如果一个类中没有足够的信息来描述具体的对象,我们称之为抽象类。是对一系列看上去不同,但本质相同的具体概念的抽象。
2、语法上,用abstract class和interface区别,实现分别用extends和implements实现。
3、抽象类可以有非抽象方法但接口只能有抽象方法
4、一个类只能继承一个类,但可以实现多个接口。
5、抽象类中的字段可以不被初始化,但接口中定义字段时必须被初始化。

15、什么是内部类?Static Nested Class 和 Inner Class的不同。
答案: 内部类:是定义在类中的类。static nested class(嵌套类)是静态内部类:1、创建嵌套类的对象,并不需要其外部类的对象。 2、不能从嵌套类的对象中访问非静态的外部类对象。

16、是否可以继承String类?
答案: 不能,String类是一个final终结类。

17、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?
答案: 两个。"xyz"作为一个常量字符串首先被创建,它保存在”常量“区,一旦创建不能修改,因此下次需要一个相同的字符串时,不必创建。引用一个常量串没有任何危险,因为它是只读的。当new String("xyz")调用时,再在堆(heap)中创建一个对象,值为常量区字符串的拷贝。区别: 一个在常量池,一个在堆中。

18、String 和StringBuffer、StringBuilder的区别?
答案: 都不是基本数据类型,都是final类不能被继承。String对象是一个不可变对象,一旦创建不能修改它的值。对于已经存在的String对象修改它的值,会重新创建一个新的对象,然后把新的值保存进去。对String对象的连接操作(+)实际上是会建立一个StringBuffer类对象,然后把字符串添加进去,最后调用toString()方法。 StringBuffer类是一个可变对象,当对它进行修改时不会像String那样重新建立一个对象,调用append()方法即可。StringBuffer是线程安全的,而Stringbuilder不是线程安全的。所谓线程安全,就是每个修改容器中数据的是同步的,因此保证了线程安全。

19、如何把一段逗号分割的字符串转换成一个数组?
答案: 调用String类中的实例方法split(); str.split(",");

20、数组有没有length()这个方法? String有没有length()这个方法?
答案: 数组没有length()方法,有一个length字段,String有length()方法。

21、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
答案:5个对象,现在常量池创建了"a","b","c","d",4个对象。再在堆中创建了一个"abcd"对象。

22、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答案: finally{}里的代码一定会被执行。return之后执行finally,再执行了return,但是finally修改后的值,return的是修改之前的值。

23、final, finally, finalize的区别。
答案:final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

24、error和exception有什么区别?
答案: 相同处:Error类和Exception类都继承自Throwable类。不同处:Exception: 1、可以是可被控制(checked)或不可控制的(unchecked); 2、表示一个有程序员导致的错误。3、应该在应用程序级被处理。Error: 1、总是不可控制的(unchecked); 2、经常用来用于表示系统错误或底层资源错误。 3、如果可能的话,应该在系统级被捕获。

25、运行时异常与一般异常有何异同?
答案: 1、一般异常指checked exception: 这类异常都是Exception的子类。异常向上抛出,可能导致的问题: 代码效率低,耦合度过高。 2、运行时异常unchecked exception:这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是他们是不同的,他们不能通过用户代码来试图解决。

26、请写出你最常见到的5个runtime exception?
答案: ClassCastException类型转换异常, ArithmeticException算数运算异常,NullPointerException空指针异常,IndexOutOfBoundsException索引越界异常。

NegativeArraySizeException负数作为数组大小异常,BufferOverflowException缓冲区溢出异常。

 

更多信息请查看 java面试题  http://www.itchm.com/zhaopinqiuzhi/java_bishi_mianshi/

你可能感兴趣的:(Java面试)