当前位置:文档之家› java面试题&答案(热点题型)

java面试题&答案(热点题型)

1、抽象类和接口的区别?
答:○1、抽象类在Java语言中表示一种继承关系,一个类只能使用一次继承关系。

但是,一个类却可以实现多个接口。

○2、在抽象类中可以有自己的数据成员,也可以有非抽象类的成员方法,而接口中,只能有静态的不能被修改的数据成员(即成员属性必须是static final的,但接口中一般不定义数据成员),所有的成员方法都是抽象的。

○3、抽象类和接口所反映的设计理念不同。

抽象类表示“is-a”关系,接口表示“like-a”关系。

○4、实现抽象类和接口的类必须实现其中的所有方法。

抽象类中可以有非抽象方法;接口中不能有实现方法。

○5、接口中定义的变量默认是public static final 型,必须给其赋初值,所以实现类中不能重新定义,也不能改变其值。

抽象类中的变量默认是友好型(friendly),其值可以在子类中重新定义,也可以重新赋值。

○6、接口中的方法默认都是public,abstract类型的。

2、在Java中一个类被声明为final类型,表示了什么意思?
答:如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。

因此一个类不能既被声明为abstract的,又被声明为final的。

(扩展:将变量或方法声明为final,可以保证它们在使用中不被改变。

被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

被声明为final的方法也同样只能使用,不能重载。

)3、Error 与Exception 有什么区别?
答:Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择。

Exception(违例或异常)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者外在的输入等引起的一般性问题,是程序必须处理的4、Overload 和Override 的区别。

Overloaded 的方法是否可以改变返回值
的类型?
答:Overload表示重载,Override表示覆盖或重写。

重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写(Override)表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这是面向对象编程的多态性的一种表现。

如果几个Overloaded的方法的参数列表不一样,它们的返回值类型当然也可以不一样。

如果两个方法的参数列表完全一样,通过让它们的返回值不同来实现重载Overload是不行的。

5、接口是否可以继承接口?抽象类是否可以实现(implements)接口?抽象类是否可以继承实体类(concrete class)?
答:接口不可以继承接口,接口之间有类似继承的关系,但是严格说成是继承是不对的,因为接口是要被实现而不是被继承的。

抽象类可实现接口。

抽象类可以继承实体类,但是要求实体类必须有明确的构造函数。

6、构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。

7、是否可以继承String类?
答:string类是final类故不可以继承。

8、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会
不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。

9、swtich是否能作用在byte上,是否能作用在long上,是否能作用在string 上?
答:switch(expr1)中,expr1是一个整数表达式。

因此传递给switch 和case 语句的参数应该是int、short、char 或者byte。

但是long,string 都不能作用于swtich。

10、编程题:写一个Singleton
答:
/**
* 单例模式的目的就是要控制特定的类只产生一个对象,允许在一定情况下灵活的
* 改变对象的个数,提供一个访问它的全局访问点。

*/
public class SingleTon {
private static SingleTon singleTon=new SingleTon();
private SingleTon(){
}
public static SingleTon getInstance(){//获得实例
return singleTon;
}
public static void main(String[] args) {
SingleTon s1=SingleTon.getInstance();
SingleTon s2=SingleTon.getInstance();
System.out.println(s1==s2);
}
}11、float型float f=3.4是否正确?
答:不正确。

精度不准确,应该用强制类型转换,正确处理如下:float f=(float)3.4 或float f = 3.4f 。

在java里面,没小数点的常量默认是int;有小数点的常量默认是double。

12、写一个方法,实现字符串的反转,如:输入abc,输出cba
解:答案如图:
13、char型变量中能不能存储一个中文汉字?为什么?
答:可以。

JA V A默认的编码是UNICODE.不是ASCII的char。

测试用例如下:package com.bd.zl;
public class Test {
public static void main(String args[]) {
char s = '我';
System.out.print(s);
}
}
程序运行结果:我,如图所示:
14、String与StringBuffer的区别?
答:String:是对象不是原始类型,为不可变对象,一旦被创建,就不能修改它的值;对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去;String 是final 类,即不能被继承。

StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象,它只能通过构造函数来建立:StringBuffer sb = new StringBuffer();不能通过付值符号对他进行付值:sb = "welcome to here!";对象被建立以后,在内存中就会分配内存空间,并初始保存一个null;向StringBuffer中付值的时候可以通过它的append方法。

字符串连接操作中StringBuffer的效率要比String高:
15、throw和throws有什么不同?
答:throws是用来声明一个方法可能抛出的所有异常信息;throw则是指抛出的一个具体的异常类型。

通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。

.对异常处理方式不同.throws 对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而cathch的范围又要大于throws的Exception的范围;throw 主动抛出自定义异常类对象;throws抛出的是类,throw抛出的是对象。

16、“deprecated API”,是什么意思?
答:“deprecated API”表示JA V A开发中不赞成使用的应用程序接口,是JA V A早期的应用
程序接口版本,不赞成使用。

17、什么是内部类,内部类在什么情况下应用?
答:可以将一个类的定义置入另一个类中定义,这就叫做“内部类”。

以下情况下应用内部类:·只用到类的一个实例。

·类在定义后马上用到。

·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。

(扩展:)在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。

·匿名内部类不能定义任何静态成员、方法和类。

·匿名内部类不能是public,protected,private,static。

·只能创建匿名内部类的一个实例。

18、什么是静态自由块,主要有什么作用?
答:声明为static属性的代码块就叫做静态自由块。

其主要作用:static代码快可以不用创建对象来调用,可以直接用类名+方法名来调用.。

相关主题