初级java开发面试必会

153 阅读4分钟

1.什么是面向对象

先说一下什么是面向过程:就好比你要吃鱼香肉丝,你首先需要买菜,然后切菜,配料,起锅烧油等等 而面向对象直接就是到饭店,告诉服务员我要吃鱼香肉丝,让他做就可以了.
面向对象是模型化,你只需要抽象出一个类,这个类有你想用的功能,你直接调用进行了,没不要去考虑是怎么实现的 面向对象的底层其实也是面向过程,就是把面向过程抽象成类,然后封装,方便我们使用就可以了.

优点:易于维护,易扩展,易复用,,由于面向对象有封装继承多态的特性,可以设计出低耦合的系统,使用更加灵活,更易于维护.

2.Java面向对象的特征

封装,继承,多态
封装:就是把对象的属性和行为封装起来,结合成一个整体,并且隐藏程序的一些功能内部实现的细节,把不想让别人看见的东西隐藏起来,提供一个get去让他们调用,减少程序的耦合性,提高程序的安全性
继承:继承就是子类继承父类的属性和方法,子类可以根据自己的需求去扩展自己的方法,提高代码的复用性
多态:多态就是同一种行为,有多个不同的表现形式或形态的能力,多态就是同一个接口,使用不同的实例而执行不同的操作,多态存在的三个必要条件:继承,重写,父类引用指向子类对象:消除了类型之间的耦合关系,灵活性,简化性,接口性,可扩充性,可替代性
抽象类:对问题进行分析,设计出来的抽象概念,是对一系列看上去不同,但是本质相同的具体概念的抽象,在java中抽象用abstract关键字进行修饰,不能被实例化,可以看出抽象类就是为了继承而存在的\

3.抽象类与接口的区别

1.抽象类要被子类继承,而接口是实现
2.接口只能做方法声明,抽象类可以多方法的声明,也可以做方法的实现
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通的变量
4.接口中只有抽象方法和静态常量,而抽象类中可以有普通方法和成员变量
5.接口主要用来抽象功能,抽象类主要是用来抽象类别

4.String StringBuffer StringBuilder 三者之间的区别

String 字符串常量 StringButter 字符串变量(线程安全) StringBuilder 字符串变量(线程不安全) String是Final修饰的,不可变的,每次操作都是产生新的String对象 StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所有线程是安全的 StringBuilder并没有对方法进行加同步锁,所以线程是不安全的

如果要操作少量的数据用String 单线程操作字符串缓冲区下操作大量数据用StringBuilder 多线程操作字符串缓存区下操作大量数据用StringButter

5.重载与重写的区别

重载:发生在同一个类中,方法名必须相同,参数列表不同,个数不同,顺序不同,方法的返回值类型和访问修饰符不同,发生在编译时. 重写:发生在父子类中,方法名参数列表相同,返回值类型范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类,如果父类方法用private进行修饰的话,子类无法重写该方法.

6.List和Set的区别

List:有序,有下标,按照对象进入的顺序保存对象,可以重复,允许多个Null元素对象,可以使用iterator取出所有元素,也可以使用get方法来获取指定的下标元素 Set:无序的,不可重复的,最多允许有一个Null元素对象,取元素时只能用到iterator接口取得所以元素,在逐一遍历各个元素

7.