JavaSE面试题
1、面向对象深刻理解?
面向对象就是对现实世界的具体存在的实体的抽象表述,这些对象在真实世界中都存在对应的实体,我们通过属性、行为来描述一个对象的存在状态。每一个对象都属一个类别,对象是这个类别的一个具体实例。在接解决问题时,先要从问题当中抽取出这些实例对象,描述这些对象在解决问题的过程中的行为和属性的变化过程,就是面向对象。
封装:将一个类别中的对象具有的属性、行为封装到一个类中,对外提供对应的方法来实现访问,隐藏了所有的实现细节
继承:可以使现有类拥有父类的所有功能,并可以实现对父类的功能的增强或重写,并且可以扩展出自己独有的功能。
多态:父类引用指向子类实现,同一个消息或行为在不同的子类实现中体现出不同的结果。
2、Java语言和其他语言区别?
Java存在jvm虚拟机,因此可以实现跨平台性,即一次编译,到处运行。
3、JRE、JDK、JVM区别?
Jdk是java开发工具包,其中包含了jre
Jre是Java的运行环境,其中包含了jvm和核心类库
Jvm是Java虚拟机, java运行时的环境,JVM是一种用于计算设备的规范
6、JDK1.8之前和JDK1.8之后接口不同?
Jdk1.8之前:红黑树
Jdk1.8之后:LocalDate、optional、流式api、函数式接口、lambda表达式、方法引用等。
7、接口和抽象类区别?
接口通过
interface
修饰、一个类可以实现多个接口、实现了接口的类必须实现接口中的所有抽象方法、接口中除了default和static修饰的方法外都没有方法体。接口一般用来实现对方法的约束,制定规则。 抽象类通过abstract修饰、一个类只能继承一个抽象类、继承了抽象类的类必须实现抽象类中的所有抽象方法,否则也必须声明为抽象的,抽象类中可以存在方法体,抽象类不能创建对象但是有构造方法。抽象类一般用于对公共部分的抽取,降低重复编码,提升效率。
8、Java中的常用容器有哪些?
数组:长度不可变、灵活性差、插入删除慢、读取快
集合:长度可变、灵活性高
Collection、和 Map
List:ArrayList和LinkedList、Vector
Set:HashSet、LinkedHashSet和TreeSet
Map:HashMap、LinkedHashMap、TreeMap和HashTable
9、线程和进程有什么区别?
一个在内存中运行的应用程序就是一个进程、进程拥有自己独立的内存空间、它可以拥有多个线程,一个进程中的线程共享进程的堆和方法区,多线程可以并发运行,提升进程的运行效率。进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的最小单位
11、final、finally、finalize区别,怎么使用?
final是用来修饰类、方法和变量的。类上:不能被继承;方法上:不能被重写;变量上:不能被修改
finally:用来对异常进行处理时,无论如何都会被执行的代码段
finallize:是垃圾回收机制在回收对象之前调用该方法完成清除前的必要操作。
12、局部变量和成员变量区别?
局部变量:声明在方法中,仅在最近的外层{}内有效
成员变量:声明在类中,在该类中有效
13、值传递和引⽤传递区别?
值传递:真实值(基本数据类型)
引用传递:地址值(引用类型)
14、创建对象在JVM中的位置?
一般new出来的对象存储在堆内存中的新生代区域中、当该对象经历15次GC而未被回收后,将进入老年代中;
若new出的对象比较大时,将直接进入堆内存的老年代中,防止因为对象过大影响GC对新生代的垃圾回收性能。
15、==和equals区别?
Equals方法底层也是采用“ == ”的实现的;而对于基本数据类型而言比较的是真实值、对于引用类型而言比较的是地址值;
16、Hashcode和equals的区别?
Hashcode是用来生成对象的一个哈希值,不同对象的哈希值有可能会相同
Equals是用来对比两个对象是否相同,不同对象的equals方法返回false
即equals为true时哈希值一定相同,equals为false时哈希值有可能相同
17、重载和重写区别?
重载是指在同一个类或子父类中存在方法名相同、方法的参数个数或参数类型不同的方法,在使用时可以通过传入的参数区分
重写是指子类的方法和父类的方法定义完全相同,子类提供了自己的实现,因此父类的该方法被隐藏
18、Java基本数据类型?
Byte(1)、short(2)、int(4)、long(8)
Boolean(1/4)、char(2)、float(4)、double(8)
19、包装类和基本类区别?
包装类:可为空、可以在泛型中使用、可以拥有诸多方法,效率低
基本类:不可为空但有默认值、不能再泛型中使用、没有、高效
20、为什么要提供包装类?
包装类可以通过该对象调用方法,可以拥有诸多的操作,而基本类无法调用方法,功能太弱
21、包装类和基础类怎么转换?
基本类->包装类 自动装箱
包装类->基本类 自动拆箱
22、构造器代码块、局部代码块、静态代码块执⾏顺序和执⾏次数?
静态代码块:最先执行、仅一次
构造代码块:每次构造方法之前、多次
局部代码块:方法中、随方法执行、一次
23、构造代码块的作⽤?
用于抽取出构造方法中的公共部分、减少重复代码