2022-JAVA面试必背

一、什么是面向对象?

1. 把具体的事物抽象成类,封装事物的特征。

2. 面向对象的特征:封装、继承、多态

封装:外部调用者无需关注内部细节

继承:子类继承基类的共同属性,并作出个性化扩展

多态:外部调用一个方法时,可以有不同的执行逻辑和结果,继承、重写、父类引用指向子类对象

二、JDK、JRE、JVM

JDK:java开发环境

JRE:java运行环境

JVM:java虚拟机

三、==和equals

==是运算符,对比的是栈中的值,equals比较的是对中对象的内存地址

常见于与String相关的笔试题,Object类提供的equals方法底层使用的是==,而String类重写了equals方法,没重写就是比地址,重写了就是比值

例如

2022-JAVA面试必背

str1在常量池中指向“Hello”,str2在常量池和堆空间中都创建了对象,str3指向了str2的引用(内存地址),所以

str1 == str2 str1在常量池中,str2在堆空间中,==比地址,false

str1 == str3 str1在常量池中,str3在堆空间中,==比地址,false

str2 == str3 str2在堆空间中,str3在堆空间中,str2传递引用给str3,==比地址,true

str1.equals(str2) 已重写,equals比较值,str1=“Hello”,str2=“Hello”,true

str1.equals(str3) 已重写,equals比较值,str1=“Hello”,str3=str2,true

str2.equals(str3) 已重写,equals比较值,str3 = str2,true

四、final

1.用法

修饰类:这个类不能被继承

修饰方法:这个方法不能被重写,但能重载

修饰变量:修饰基本数据类型时,这个变量不能被修改;修饰引用类型时,不能更改引用,可以更改属性值

2.成员变量声明时要赋初值,局部变量使用前要赋初值

3.局部内部类和匿名内部类只能访问外部的final变量(lamda表达式),因为

五、String、StringBuffer、StringBuilder

String StringBuffer StringBuilder
有啥用 创建和操作字符串
有啥区别 创建的字符串不能修改,只会修改引用 可以修改字符串内容 单线程
线程安全 线程安全 线程不安全
性能等级 3 2 1
使用场景 多线程共享变量使用 优先使用

六、重载和重写

重载:同一个类中,方法名必须相同

重写:父类和子类中,方法名、参数列表必须相同,访问修饰符和返回值类型要小于父类

private和protected不允许重写

七、接口和抽象类的区别

语法上:

1.接口中只能是抽象方法,抽象类可以存在普通成员函数

2.接口中的成员变量只能是public static final ,抽象类中随便

3.一个类只能继承一个抽象类,但可以实现多个接口

使用场景上,接口更偏向于做什么,抽象类偏向于事物的本质是什么

八、List和Set的区别

List:有序,可重复。

Set:无序,不可重复;只能用Iterator取出所有元素。

九、hashCode和equals

1.hashCode()获取到一个int型的hashcode,这个哈希码的作用是确定该对象在哈希表中的索引位置,哈希表存储的是散列结构即k-v,能够通过key快速检索对象在堆空间的位置。

2.在存储数据时,发生hash冲突时会调用equals检查两个对象是否相同。

十、

上一篇:【学习笔记】sort函数


下一篇:C语言库函数qsort()详解