当前位置:   article > 正文

JAVASE面试题

javase面试题


面向对象

面向过程更加注重事情的每一个步骤及顺序,面向对象更加注重事情有哪些参与者(对象)、及各自需要做什么。
面向过程比较直接高效,而面向对象更易用于复用、扩展和维护

三大特性

封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项

  • 自己的理解:内部的调用细节对外部透明,外部调用无需修改或者关心内部实现。(例如内部javabean中的属性,实现并提供了getset方法的实现,外部只需要知道这个属性的getset方法是干啥用的,不用关心这之中是如何实现的)

继承:继承基类的方法,并做出自己的改变或扩展
子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需要扩展自己个性化的
多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行逻辑不同
条件:必须要继承父类,父类的方法要重写在子类中,父类引用指向子类对象
弊端:无法调用子类特有的功能

JDK、JRE、JVM三者区别和联系

jdk=jre+java工具(javac、java、jconsole),jre=jvm(jre里面的bin)+lib(类库)
jdk包含了jre,jre包含了jvm

==和equals

:对比的是栈中的值,基本数据类型(八大基本数据类型,例如int long byte double等)是变量值,引用数据类型(类、包装类、接口、数组)是堆中内存对象的地址
equls:object中默认也是采用
比较,通常会重写,string类中的equlas()方法其实比较两个字符串的内容,不是栈中的地址

final

简述final的作用?

最终的,不可改变

  • 修饰类:表示类不可被继承
  • 修饰方法:表示方法不可被子类覆盖,但可以重载
  • 修饰变量:表示变量一旦被赋值就不可以更改它的值。

(1) 修饰成员变量

  • 如果final修饰的是类变量(用static修饰的变量),只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。
  • 如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。
    (2)修饰局部变量
    系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此在使用局部final修饰局部变量时,即可以在定义时指定默认值(后面的代码不能对变量再赋值),也可以不指定默认值,而在后面的代码中对final变量赋初值(仅一次)
    (3)修饰基本数据类型和引用数据类型
    如果是基本数据类型的变量,则其数值一旦初始化之后便不能更改
    如果是引用类型的变量,则在对其初始化之后便不能再让其指定另一个对象。但是引用的值是可变的。

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

由于编译的时候会生成class文件,无论是外部类还是内部类都会生成class文件。当外部类的方法结束时,局部变量就会销毁了,但是内部类对象可能还存在。**然后就出现了一个矛盾:内部类访问了一个不存在的变量。**为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样局部变量死亡之后,内部类仍可以访问它,实际访问的是局部变量的“cop

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/795897
推荐阅读
相关标签
  

闽ICP备14008679号