在做基础面试题的时候,会有很多区别性的问题,题干给出两个意思相近的单词,然后写出他们的区别,这里简单整理的一些基础面试题的区别问题。
目录
5.Override 和Overload的区别是什么?Overload的方法是否可以改变返回值的类型?
1.ArrayList、Vector 和 LinkedList有什么特点? HashMap和HashTable有什么区别?
4.List<? extends T> 和 List<? super T>之间有什么区别?
1.jsp和servlet有哪些相同点和不同点?它们之间的联系是什么?
1.检查异常与运行时异常的区别?error与Exception的区别。
(一)基础语法部分
1.接口与抽象类的区别?
相同点:都不能被实例化。
接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。
不同点:
接口只有定义,不能有方法的实现,而抽象类可以有定义与实现,即方法可以在抽象类中被实现。
实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。
接口的设计理念是“has-a” 抽象类的设计理念是“is-a”。
接口中定义的成员变量默认的修饰符石 public static final, 只能有静态的不能被修改的数据成员,而且,必须给其赋初始值,其所有的成员方法都是 public abstract 的,而且只能被这两个关键字修饰。而抽象类可以有自己的数据成员变量,也可以有非抽象方法,而且诶,抽象类中的成员变量默认为default,当然也可以被定义为private、protected和public,这些成员变量可以再子类中被重新定义,也可以被重新赋值,在jdk(1.8)之前接口中的抽象方法不能用private、static。Synchronized访问修饰符,同时方法必须以分号结尾,并且不能带花括号{}。所以,当功能需要积累的时候,使用抽象类,不需要积累的时候,使用接口。
接口被用于实现比较常用的功能,便于日后的维护或者添加方法,而抽象类更倾向于充当公共类的角色,不适用与日后重新对里面的代码进行修改。
2.int与Integer 的区别?
Int是Java语言提供的八种原始数据类型之一,当作为对象的属性的时候,默认值为0
Integer是Java为int提供的包装类,默认值为null。
Int是基本类型,在使用的时候采用的是值传递。
Integer采用的是引用传递。
当往容器里存放整数的时候,无法直接存放int 而是将int类型转换为Integer存放。
3. String与StringBuffer的区别?
String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringBuffer属于可变类。
String是不可变类,也就是说,String对象一但被创建,其值不可以被改变,而StringBuffer是可变类,当对象被创建后,仍然可以对其值进行修改。如果一个字符串经常需要修改的时候,使用StringBuffer有更高的效率。
String 和StringBuilder都是线程不安全的。
StringBuffer是线程安全的。
单线程大量操作的时候才需要用StringBuilder。
4.final finally finalize 的区别?
final 用于声明变量。方法和类,分别表示属性不可变。方法不可覆盖。类不可被继承。
finally用于异常处理,只能用在try/catch语句中,并且附带着一个语句块,表示这段话最终一定会被执行,经常用于需要释放资源的情况下。
finalize 是Object类的一个方法,在垃圾收集器执行过的时候会调用被回收对象的finalize方法。可以覆盖此方法来实现对其他资源的回收。
5.Override 和Overload的区别是什么?Overload的方法是否可以改变返回值的类型?
Overload(重载)和Override(覆盖)是java多态性的不同表现,其中,重载是在一个类中多态性的一宗表现,是指在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型。在使用重载时,需要注意:
1重载时通过不同的方法参数来区分的,
2 不能通过方法的访问权限,返回值类型和抛出的异常来进行重载。
3对于继承类来说,如果基类方法的访问权限是private,那么就不能在派生类中对其进行重载,如果派生类也定义了一个同名函数,这只是一个新的方法,不会达到重载的作用。
Override 是指派生类函数覆盖基类函数,覆盖一个方法并对其进行重写,以达到不同的作用。
在使用覆盖的时候需要注意。
派生类的覆盖方法必须和基类中的覆盖方法有相同的函数名和参数。