最基础的 3 道 java 面试题,你真的答得上来吗
想更好的应对面试,还是需要不断学习不断总结,下面我们来分析三道面试题。
下面是一道入门级面试题,这道题基本上都是问初级的小伙伴比较多,但如果你是中级,或者高级。我觉得未必都能回答上来。
说说 Java 语言有哪些特点
尽量答出以下几个关键词:
1)简单易学。Java 有丰富的类库,能够通过静态方法封装,降低 API 的学习成本,提高工作效率。
2)面向对象。这个也是 Java 最重要的特性,java 能够使得程序耦合度更低,内聚性更高。
3)可靠安全。Java 生态系统包括用于分析和报告安全性问题的各种工具。
4)与平台无关。Java 能够跨平台使用,Write Once Run AnyWhere。实际上就是对应操作系统上都有个虚拟机作为一个中间转换。
5)支持多线程。Java 可以采用多线程+协程方式实现更多的并发操作。
下面也是一道入门级面试题,面向过程与面向对象的区别,这里最好的是搞过 C 或 C++的同学,后面来搞 Java 了,这样对面向过程和面向对象编程的体会更深。
说说面向对象和面向过程的区别
1)从概念上来说。面向过程:字面意义上就是面向的是过程,先做什么、在做什么、最后做什么,然后用函数把这些步骤一步一步地实现,在使用的时候一一调用则可。面向对象:字面意义上就是面向的是对象,是把构成问题的事务分解成各个对象,但是建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。
2)从性能上来说。面向过程性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。从性能上来说,面向对象比面向过程要低。
3)从可用性来说。面向对象有封装、继承、多态的特性,所以易维护、易复用、易扩展,可以设计出低耦合的系统。
扩展面试题
:说说面向切面和面向对象的区别。
下面还是一道入门面试题,每个面试题都不要掉以轻心,都是考验基本功是否扎实。
说说方法重载和方法重写的区别
都是和方法有关系的,那 Java 中方法的签名包含什么呢?
要完整的描述一个方法,需要指出方法名以及参数类型,这就叫方法的签名。
比如说 String 类中有 4 个称为 indexOf 的公有方法:
`indexOf(int)
indexOf(int,int)
indexOf(String)
indexOf(String,int)
`
返回类型不是方法签名的一部分,也就是说,不能有两个名字相同、参数类型也相同却有着不同类型返回值的方法。
`
public void say(String name){
}
public String say(String name){
}
`
我们继续聊方法的重写与重载:
「方法的重写(Override)」
从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。
`public class Father {
public static void main(String[] args) {
Son s = new Son();
s.sayHello();
}
public void sayHello() {
System.out.println("Father say Hello");
}
}
class Son extends Father{
//Son 重写了 Father 的 sayHello 方法
@Override
public void sayHello() {
System.out.println("Son say hello ");
}
}
`
总结:
1.发生在父类与子类之间 。
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同。
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private) 。
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。
「方法的重载(Overload)」
Java 中允许同一个类中可以定义多个同名方法,只要形参列表(方法入参)不同就行。如果同一个类种包含了两个或者多个以上方法的名称相同,但是形参列表不同,则被称之为方法重载。
在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。
`public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Father s = new Father();
s.sayHello();
s.sayHello("wintershii");
}
public void sayHello() {
System.out.println("Hello");
}
public void sayHello(String name) {
System.out.println("Hello" + " " + name);
}
public void sayHello(Long userId, String name) {
sayHello("Hello" + " " + name);
}
}
`
总结:
方法重载要求两同一不同:
1.同一个类中。
2.方法名相同。
3.参数列表不相同。
方法返回值、修饰符,与方法重载没有任何关系。
不推荐使用以下方式:
`public void sayHello(String name){
}
public void sayHello(String... name){
}
`
因为这么做实在是没有太大的意义,并且容易降低程序的可读性。
总结
本文分享了三道入门级面试题,你都能回答上来吗?你回答都是背的吗还是自己真正理解的?
「稍微认真点、踏实点、努力点,发光是迟早的事」
推荐阅读
版权声明: 本文为 InfoQ 作者【田维常】的原创文章。
原文链接:【http://xie.infoq.cn/article/02a8b5e8610900189de34826a】。文章转载请联系作者。
评论