Day1/Java实习面试题每日一刷

什么是面向对象?

对比面向过程,面向对象更注重事情有哪些参与者(对象),以及各自需要做什么,而面向过程仅仅是注重事情的步骤以及顺序。就像洗衣机洗衣服这件事,面向过程会拆分成一个个小步骤,从打开洗衣机,放衣服,一直到烘干。面向对象会拆出人和洗衣机两个对象,人要做什么,洗衣机要做什么。面向过程比较直接,面向对象更易于复用,扩展和维护。

面向对象还有三大特性:封装、继承、多态
封装的意义在于明确出允许外部使用的所有成员变量和方法,而无需关系内部是怎么实现的
最常见的封装就是Javabean中的属性私有,对外开放getter和setter方法,还有就是mybatis调用方法操作数据库。

继承:就是基于父类去扩展子类,一个父类可以有多个子类,父类是子类共有的特性,子类是他们独有的特性。在项目中通常会把模型的id,gmtCreated,gmtModified放入一个类当中,让其他的类去继承,减少了代码的重复

多态:多态首先得满足有几个条件,1是得有继承关系,2.子类要重写方法,3.父类引用要指向子类对象 多态的好处是便于维护,更易于扩展,但它也有个坏处,就是不能调用子类特有的方法。

==与equals的区别

==对比的是栈中的值,对基本数据类型比较的是变量值,对引用类型比较的就是内存对象的地址

equals在object类中作用是和==是一样的,但通常来说我们会重写equals,比如String中的equals方法就是比较String对象的值是否是相同,底层是将一个个字符拆出来对比的。

后期理解String直接创建与new String的区别?

简述final作用

final可以修饰类,方法和变量,修饰类,表示该类不可以被继承,修饰方法,表示该方法不可以被重写,但可以被重栽,修饰变量,表示该变量不可以被重新赋值。

final修饰的成员变量,在声明的时候就要赋值,或者在代码块中和构造器中赋值,类变量在声明的时候就要赋值或者在静态代码块中进行赋值。
final修饰的局部变量,在声明时可以不赋值,但在使用之间一定要赋值,
final修饰的引用类型的变量,一旦声明就不能指向另一个对象,也不能=null,但引用的值时可变的,像数组可以改变某一索引值的位置,对象可以改变它的属性。

为什么局部内部类和匿名类只能访问局部final变量

当外部类方法结束时,局部变量就销毁了,这时如果内部类还没有结束,访问了外部类方法已经被销毁的变量,就会出现一个错误,为了解决这个问题,内部类就会复制局部变量称为内部类的成员变量,内部类任可访问它,但如果局部变量发生改变与这个copy的变量不一样时,也会发生错误,所有给局部变量加个final,不给它改变,这实际上就是个妥协。在idea中好像是给内部类调用的局部变量自动加了个final。

String、StringBuffer、StringBuilder区别以及使用场景

String的源码是用final修饰的,每次创建不会改变对象,而是产生新的对象
这就造成了内存的浪费
StringBuffer和StringBuilder是在原对象上进行操作,不会产生新的对象,所以说要经常改变值的话,最好用StringBuffer和StringBuilder

StringBuffer在源码中方是法被synchronized修饰,是线程安全的,StringBuilder没有synchronized修饰是线程不安全的,性能方面是StringBuilder比StringBuffer要要好一点。

如果在单线程情况下,考虑性能选择用StringBuffer,在多线程情况下,多个线程共享变量使用StringBuffer

重载和重写的区别

重载是发生在一个类当中,方法名必须相同,参数个数,类型,顺序不同。访问修饰符和返回类型是没有关系的,如果只有这个不同编译时是会发生错误的

重写是发生在父子类当中,方法名,参数列表必须相同,返回值范围要小于等于父类,抛出的异常范围小于等于父类,访问修饰符要大于等于父类;如果父类访问修饰符为private,则方法不能被重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚努力学Java的大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值