下面也将收集一些经典的java面试题,琢磨这些面试题仍是很是有好处,能够弄清楚一些容易混淆的知识点,下面面试题的答案部分来自网络,有些来自本身的理解,都是本身精心概括整理的,有问题的地方,但愿你们指出,以便及时更正。 java
1、GC是什么? 为何要有GC? 程序员
GC是Gabage Collection的缩写。中文意思就是垃圾回收。 面试
Java由C++发展而来,在C/C++中,须要程序员本身来释放无用变量的内存空间,这样很是繁琐,程序员也可能忘记释放或者释放了不应释放的内存。同时也会耗费程序员大量精力在释放内存上。因此,Java就对此作了改进,由系统来管理内存的释放,再也不由程序员去人工释放内存空间了。当Java虚拟机发觉内存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间,若是程序员显示地调用System.gc(),能够通知虚拟机加快垃圾回收的速度。但并不能控制垃圾回收。 网络
2、switch语句可否做用在byte上,可否做用在long上,可否做用在String上? this
在switch(condition)中,condition只能是一个整数表达式或者枚举常量,整数表达式能够是int基本类型或Integer包装类型,因为byte,short,char均可以隐含转换为int,因此这些类型以及这些类型的包装类型也是能够的。long不能做用于switch语句中。String在jdk1.7以前的版本也不能够。 spa
3、"=="和equals方法究竟有什么区别? 对象
1. "=="是运算符,equals是方法,能够被重写。 继承
2.“==”操做符用来比较变量所对应的内存中所存储的数值是否相同。因此要比较两个基本类型的数据或两个引用变量是否相等,只能用==操做符。由于比较基本数据类型是否相等就是比较其内存中的数值是否相等。比较两个引用变量是否相等就是比较其内存中的值(该变量所指向的对象的首地址)是否相等,就是比较它们是否指向同一个对象。 接口
3. equals()方法是用于比较两个独立对象的内容是否相同。好比:String a=new String("java"); String b=new String("java");这两个变量指向的是两个不一样的对象,它们的首地址是不一样的,也就是说a和b内存中存储的值是不一样的,即a==b会返回false,但它们的内容是相同的,因此a.equals(b)将返回true。 内存
4. equals是Object的方法。其底层实现就是根据“==”来判断的,这就是说若是一个类或者其父类没有覆盖Object的equals()方法,那么“==”和equals()效果是同样的。上面就是由于String类已经重写了equals()方法,因此“==”和equals()获得的结果才会不同。
4、构造方法可否被重写和重载?
一、构造方法是容许被重载的,并且重载构造方法是一种很广泛的作法,能够方便使用者灵活的建立对象。重载的构造方法之间相互调用可使用this关键字。
二、在继承过程当中构造方法是不能被继承的,所以在子类中没法对父类构造方法从新定义,固然就不能被重写了。若是须要在子类中调用父类的方法,能够调用super关键字引用。
5、抽象类和接口的区别?
一、接口和抽象类都不能产生对象。接口变量只能指向实现类对象,抽象类变量只能指向子类对象。 二、一个类实现接口或者一个类继承一个抽象类,都必须实现接口或抽象类中定义的全部抽象方法。除非该类也是抽象类。 三、抽象类中能够定义抽象方法也能够定义具体方法。但接口中只能定义抽象方法。 四、接口中定义的变量都是public static final。而抽象类中定义的变量是普通属性。 五、接口中定义的方法都是public。不能用private,protected修饰。而抽象类中定义的方法能够是默认、protected、public。 六、一个类只能继承另外一个类,但能够实现多个接口。 七、接口和抽象类中均可以不定义抽象方法。