Java---面试容易容易出现的一些考点
考点内容是我个人的一点看法,不代表一定是这些,后面会慢慢继续补充
请写出final、finally、finalize的区别
首先:你得明白这是三个假兄弟。虽然看书写的格式都长得差不多,但是不要被这个表象给骗了,他们三个之间没有一毛钱的关系。
1、final和finally都是关键字。而finalize是一个方法,是属于Object的一个方法,用来销毁对象的方法,但是这个方法不是由我们程序员来调用,而是由GC(Java中的垃圾回收机制)来调用,具体怎么调用,什么时候调用我们都是不知道的,我们程序员最多只能呼唤GC,使用System类的gc方法来呼唤GC。语法:System.GC(注意System和GC之间是一个英文符号.()点)
2、final是一个修饰常量的修饰符,但是也可以修饰类和方法,final在修饰类的时候,表示这个类不能被继承。final在修饰方法和时候,表示这个方法不能被重写。也就是我们常说的最终类和最终方法。finally都会出现在try{ } catch ( ){ }finally{ }语句中。如果在try 、catch、语句中使用finally的话,表示finally语句块的中语句不管在什么情况下(除非你关掉JVM或者电脑)都会被执行。
String、StringBuffer、StringBuilder的区别
这三个是真正的三兄弟,和上面讲的三个假兄弟的是完全不一样的。
1、String是对象内容不可改变。而StringBuffer和StringBuilder是专门用来做字符串内容可变的。三者之间没有任何继承关系,它们都是直接继承的Object。
2、StringBuffer和StringBuilder的相同处是都用来做字符串内容可变的,不同点是StringBuffer的线程是安全的,但是它的效率低。反之StringBuilder的线程是不安全的,但是效率高。
抽象类和接口和区别
1、抽象类中可以包含普通方法。而接口中只能包含抽象方法。
2、抽象类中可以定义静态方法。而接口中不能定义静态方法。
3、抽象类可以定义普通属性,也可以定义静态常量属性。而接口中只能定义静态常量属性,不能定义普通属性。
4、抽象类可以包含构造器,抽象类中的构造器并不是用于产生对象,而是让子类调用这些构造器来完成属于抽象类的初始化工作。接口中不包含构造器。
5、抽象类可以包含初始化块。而接口中不包含初始化块。
6、一个类最多有一个直接父类,包括抽象类。但是一个类可以直接实现多个接口,通过实现多个接口来弥补Java单继承的不足。
throw 和 Throws的区别
1、throw是抛出另一个异常对象。throws是声明可能会出现的异常。
2、throw抛出运行时异常不会自动提醒。throws会提醒。
3、出现的位置不同。throw是出现在方法的实现部份。throws是出现在方法的声明部分。
4、throw是一段可执行代码,一旦被执行,就会真正发生一个异常对象被抛出,如果throw后面跟的是一个运行时异常,就不需要要求方法声明部分使用throws。如果throw后面跟上非运行异常。就需要要求方法声明部份使用throws;throws不是执行代码,只是警告方法调用者,本方法有可能会发生异常,调用者需要自行处理。
vertor和ArrayList的区别
1、vertor这个类名称中虽然没有List,但它也是List分支下面的集合类。
2、它在底层的实现和ArrayList是一样的,都是数组。
3、vertor线程是安全的,但效率低,ArrayList线程不安全,但是效率高。
线程安全问题在单线程中不会发生,在多线程中发生概率也很低,所以一般我们不用考虑。
HashMap与HashTable进行比较
1、HashTable的键、值都必须为非空。而HashMap的键和或值都可为空(键只能有一个null).
2、HashTable的线程是安全,但是效率低。反之HashMap的线程不是安全的,但是效率高。
继承(面向对象编程的重要特征之一)
扯一句题外话。面向对象编程的4个基本特征那有4个?
继承,封装,多态,抽象。
什么是继承?
Java中的继承是必须是单继承,没有例外,但是可以多重继承(前提条件是这几个类的关系必须有is a 关系。例如:B类继承了A类,C类继承B类,D类继承C类,如果它们之间的关系正确的情况下,D类中就拥有了A、B、C三个类的所有属性和方法,但是被private 修饰 属性和方法只能继承而不能使用,除非父类为private修饰的属性提供了get/set方法,这样子类就可以使用被private修饰的属性)
Java中设计单继承就是为了使类的层次更加的清晰,提高代码重复可用性的另一种重要方式。这是它的优点,也是它的缺点。但是Java引入了多态性、抽象类和接口弥补了它的这个由继承造成的缺点。
继承是通过扩展一个已有类,并且继承该类的属性和行为(方法),来创建一个新的类,这就是Java中的继承。继承的关键字是:extends。举例说明使用语法如下:public class A extends B(){} 这样就说明类A继承了类B。
继承就是类与类的关系。但是这个关系必须是is a(是一个)关系的时候,才能继承。例如:毛衣是衣服,衬衣是衣服,西装也是衣服,它们的父类是衣服。笔记本是电脑,台式机是电脑,服务器是电脑,工作站也是电脑,它们的父类是电脑。玻璃门是门,铁门是门,木门也是门,它们的父类是门。希望这个简单的例子能让大家理解is a关系。
接口能否继承接口?抽象类是否可以实现接口?抽象类可否继承一个非抽象类?
这个问题关键点在于第三个问题:抽象类可否继承一个非抽象类。答案是可以继承。 但是如果面试时你只这样答的话是不会让面试官满意的。
完整的回答应该是这样:可以继承,但是和实体类的继承一样,也要求父类可继承,并且拥有子类可访问到的构造器,此外子类构造器中必须明确要调用父类哪一个可访问的构造器(子类构造器第一行书写Super(M),括号内的M就是要调用的构造器的参数,若无参,则M不写)。
因为在继承时,子类会隐式调用父类的无参构造器,当父类没有无参构造器时,子类必须明确所调用的可访问父类构造方法。
以上内容属于个人观点。在面试中经常会遇到的考题。后续发现会继续补充

浙公网安备 33010602011771号