面试题

面试题

小龙 671 2021-04-21

Java基础

1. 谈谈你对java的理解

Java是与平台无关的,一处编译,处处允许、JavaGC机制自动回收垃圾空间、丰富的语言特性:泛型、反射、面向对象等

2. 什么是面向对象?谈谈你对面向对象的理解

面向对象注重的是事件的参与者,一级每位参与者需要做什么;面向对象易于复用、方便扩展和维护;Java面向对象有三大特性:封装、继承、多态。
封装:封装的意义在于明确表示出只允许外部访问的所有成员函数和数据项,内部细节对外部透明,外部调用无需关心内部的实现逻辑;封装最多的应用就是Javbean,javabean对外只提供set/get方法,因为javabean属性的获取和赋值,只能由javabean来定义,外部调用是不能随意修改的
继承:继承基类的方法,并作出自己的改变或扩展,子类共性的方法或属性直接调用父类的,不需要自己再定义,只需要扩展子类个性化的。
多态:基于所属类的不同,外部对同一个方法的调用,实际执行实现逻辑不同。

3、==和equals

==比较的是栈内存中的值,分两种类型,如果比较的基本数据类型,是数值比较;如果比较的是引用数据类型,比较的是栈内存中的引用地址,是地址比较。
equals是Object中的方法,默认实现使用的==。

4.final的作用

final最终的,可以修饰类,方法,变量
修饰类:表示该类不能被继承
修饰方法:表示该方法不能被重写,但可以重载
修饰变量:表示该变量一但赋值就不能在改变其值;
变量分为成员变量、局部变量,还可修饰基本数据类和引用数据类型
修饰成员变量:如果修饰的类变量(static),只能在静态代码块中指定初始值或者在声明变量时指定初始值;如果修饰的是成员变量(无static),可以在普通代码块中指定初始值、也可以在构造器中指定初始值或者在声明时就指定初始值
修饰局部变量:系统不会为局部变量初始化,局部变量只能由程序员显示的初始化。在使用final修饰局部变量时可以在声明是指定初始值,也可以不知道默认值,在程序使用到此变量之前进行赋值也可以,但是他们在赋值之后就不能修改了。
修饰基本数据类型:基本数据类一旦初始化后就不能修改
修饰引用数据类型:引用数据类型初始化之后不能让其指向其他对象,但是其指定的对象本身是可变的。

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

内部类和外部内是处于同一级别的,内部类不会因为定义在方法中而随着方法执行完毕后就立刻销毁;这样就会产生一个问题,当外部类执行完后,局部变量也随着销毁了,但是内部类可能还在执行,这样内部类就会访问到一个不存在的变量;程序中为了解决这样的问题,在编译时会将局部变量复制一份到内部类中,当外部类执行完毕销毁后,内部类还可以继续使用变量,这样就好像延长了局部变量的生命周期。为了保证外部类和内部类的值始终一致,就必须使用final关键字修饰,一旦变量初始化之后就不能在修改了,使外部类和内部类始终保存一致