Java面试题--基础部分

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、构造代码块的作⽤?

​ 用于抽取出构造方法中的公共部分、减少重复代码

24、Integer是否可以被
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值