“提问式”学习方法是一种有效的学习方法,尤其是一些经典的提问。通过思考和解决这些问题,不仅可以学习到知识,更是可以培养自我思考的习惯。
现在就让我们来思考和回答下列Java面试题目,我把其归之为Java面试题系列三。
1.数组有没有length() 这个方法?String类有没有length()这个方法?
答:数组没有length()这个方法,但是它有length这个属性。而String类有length()这个方法。数组使用length属性可以知道数组的长度,String类使用length()方法可以知道字符串的长度。测试代码如下:
public class MianShi1
{
public static void main(String[] args)
{
int[] arr = {1,2,3,4};
String str = "Hello";
int arrLen = arr.length;
int strLen = str.length();
System.out.println("数组的长度是:" + arrLen);
System.out.println("字符串的长度是:" + strLen);
}
}
运行结果如下:
数组的长度是:4
字符串的长度是:5
2.abstact class 和 interface有什么区别?
答:含有abstract修饰符的class即为抽象类,abstract类不能创建对象。含有abstact方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract
class类中定义抽象方法必须在具体的子类中实现,所以,不能有抽象的构造方法和抽象的静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中所有的方法都必须是抽象的。接口中定义方法默认为public abstract类型,接口中的成员变量类型默认为public static
final。
语法区别:
1).抽象类可以有构造方法,但不是抽象的,接口中不能有构造方法。
2).抽象类中可以有普通成员变量,接口中没有普通成员变量
3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4). 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5). 抽象类中可以包含静态方法,接口中不能包含静态方法
6). 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7). 一个类可以实现多个接口,但只能继承一个抽象类。
应用区别:
抽象类在代码实现方面发挥作用,可以实现代码的重用;接口更多是在系统架构设计上发挥作用,主要用于定义模块之间的通信契约。
3.Overload和Override的区别?
答:Overload是重载的意思,Override是覆盖的意思,也就是重写。
Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
4.请说出作用域public,private,protected,以及不写时的区别
答:这四个作用域的可见范围如下表所示。
作用域 当前类 同一package子孙类 其他package
public √ √√ √
protected √ √√×
friendly√ √××
private √×××
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。
5.请说出ArrayList,Vector和LinkList的存储性能和特性?
答:ArrayList和Vector都是采用数组结构存储数据,此数组的长度大于实际存储数据的个数以便于进行增加或插入元素。它们都可以按序号索引元素,但是插入或删除操作要涉及数据元素移动,因而,它们索引效率高,而插入或删除操作效率较低。Vector使用synchronized方法,线程安全,通常性能较ArrayList差。LinkList采用链式结构存储数据,遍历较慢但插入或删除操作较快。
6.Collection和Collections的区别?
答:Collection是集合类的上级接口,继承于它的接口有Set和List接口。Collections是集合类的一个辅助类,提供一系列静态方法实现对各种集合的搜索、排序和线程安全化等操作。