2021Java面试题一(一百多题吧,持续更新)

首先这些是我在b站上找的,然后我是根据视频的讲解(也会查找相关资料)来写答案,算是自己的理解吧,也希望把个人理解分享给大家,争取日更到结束,也算是督促自己明天学点新东西。

题目

1.什么是面向对象
2.JDK,JRE,JVM三者的区别
3.==和equals的区别
4.final的作用
5. 为什么局部内部类和匿名内部类只能访问final变量
6.String,StringBuffer和StringBuilder的区别和使用场景。
7.重载和重写的区别
8.接口和抽象类的区别
9.List和Set的区别
10.hashcode和equals是什么
11.为什么要有hashcode

个人理解

1.什么是面向对象
面向对象注重参与者,将事物对象化,包括其属性和行为。更易于扩展和维护。
面向对象的三大特征是封装,继承和多态。封装的意义在于明确标识出允许外部使用的所有成员函数和数据项,内部细节对外透明,外部调用无需修改或关心如何实现。继承,用子类来继承父类,可以做出改变和扩展(代码复用)。多态,同一操作作用于不同的对象,可以产生不同的效果,无法调用子类特有的功能。

2.JDK,JRE,JVM三者的区别
JDK是Java开发工具包,JRE是Java运行环境,JVM是Java虚拟机。JDK包括了JRE和Java工具,JRE中包含了JVM和Jave类库。

3.双等于和equals的区别
双等于对比的是栈中的值,基本数据类型(直接在栈中分配)比较的是变量值,引用(指向了堆中的内存地址)比较的是堆中内存对象的地址。
equals没有重写会跟==一样,String中已经重写好了,可以比较字符串中的内容是否相等 。

4.final的作用
final修饰类的时候表示类无法被继承,修饰方法表示方法不可以被子类覆盖,但可以被重载,修饰变量表示无法更改它的值。final在修饰成员变量时,要在声明,代码块和构造器中赋值。 final在修饰局部变量时,可以先声明后赋值,但一定要在使用前赋值。修饰数组和引用时,可以多次修改值,但不能指向null。

5.为什么局部内部类和匿名内部类只能访问final变量
因为局部内部类或匿名内部类在使用外部成员变量时,系统会将外部成员变量拷贝一份给内部类使用,为了保证这两个变量是相等的,就必须是加上final修饰。

6.String,StringBuffer和StringBuilder的区别和使用场景
区别:String是final修饰的,不可变,后两者都在原对象上操作。StringBuffer是线程安全的,StringBuilder是线程不安全的。
使用场景:经常要改变字符串内容用后两者,优先使用StringBuilder,多线程使用StringBuffer。

7.重载和重写的区别
重载是发生在 同一个类中,方法名必须相同,参数类型个数顺序返回值和修饰符可以不同。
重写是发生在子类和父类中,其中方法名和参数列表必须相同。返回值要小于父类,修饰符范围要大于等于父类(例如父类protect,子类可以是protect或是public),父类是private的无法重写。

8.接口和抽象类的区别
抽象类( eg:public abstract XXX{ } )接口(eg:interface)
1. 抽象类可以存在普通成员函数,而接口只能存在public方法,且默认public abstract。
2. 抽象类只能单继承,而接口可以多实现。
3. 抽象类中成员变量可以是各种类型,接口中只能是public static final类型。

9.List和Set的区别
1. List是有序可重复,Set无序不可重复。
2. List允许多个null,Set只有一个。
3. List可以用迭代器和get获取元素,Set只能使用迭代器。
10.hashcode和equals是什么
equals对比两个对象是否相等,没有重写和==一样。
hashcode会返回int整数(找到对象在堆中的位置),确定对象在哈利表的索引位置。

11.为什么要有hashcode
当对象要加入hashset时,hashset会计算对象的hashcode值,来判断对象要加入的位置上是否有其他值存在,若不存在就直接加入,若存在会调用equals来对比两个值是否相等,如果相等就不会加入,如果不相等就会将其加入到其他位置上。(如果两个值相等,那么hashcode一定相等)

最后

明天晚上还会更新的!
如果有理解不对的地方,欢迎指出。
谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值