Java面试题复习总结01

一、Java基础

1、Java语言有哪些特点?

  • 面向对象(封装,继承,多态);
  • 平台无关性( Java 虚拟机实现平台无关性);
  • 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
  • 可靠性(具备异常处理和自动内存管理机制);
  • 支持网络编程并且很方便;
  • 编译与解释并存

2、JVM 、 JDK 、 JRE和JIT的区别?

  • JVM:Java 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。【平台无关性;.class -> 机器码】
  • JDK(Java Development Kit),它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等【.java -> .class】
  • JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。
  • JIT(Just in Time Compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。
    JDK、JRE、JVM、JIT的关系
JDK、JRE、JVM、JIT的关系

Java程序转变为机器代码的过程

Java程序转变为机器代码的过程

3、为什么说Java语言“编译与解释并存”?

这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行

4、Java中有几种基本数据类型?

8种基本数据类型:byte, short, int, long, float, double, char, boolean

基本类型位数字节默认值取值范围
byte810-27 ~ 27-1
short1620-215 ~ 215-1
int3240-231 ~ 231-1
long6480L-263 ~ 263-1
float3240f-
double6480d-
char162‘uoooo’-
boolean1-falsetrue, false

5、自动装箱和拆箱是什么?

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型;
  • 原理:
    从字节码中,我们发现装箱其实就是调用了 包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法

6、重载和重写有什么 区别?

  • 重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理。【本质是多个方法,由于参数列表不同(类型、数目等)
  • 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法。【覆盖原有的方法

7、面向对象的三大特征?

封装、继承、多态

8、多态的特点?举例说明多态的实现?

  • 多态:父类的引用指向子类的实例
  • 多态的特点
    • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
    • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定
    • 多态不能调用“只在子类存在但在父类不存在”的方法;
    • 如果子类重写了父类的方法,真正执行的是子类重写的方法,如果子类没有重写父类的方法,执行的是父类的方法

9、说一下深拷贝、浅拷贝和引用拷贝的区别?

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址即浅拷贝和拷贝对象其实是共用一个对象
  • 深拷贝:会在堆上创建一个新的对象,深拷贝会完全复制整个对象,包括这个对象所包含的内部对象,即深拷贝拷贝一个和原来对象相同的一个新对象
  • 引用拷贝:两个不同的引用指向同一个对象。

看下图所示:Person类(内部含有Address对象)、Address类
在这里插入图片描述

10、 == 和equals( )的区别?

  • == 对于基本类型和引用类型的作用效果是不同的:
    • 对于基本数据类型来说,== 比较的是
    • 对于引用数据类型来说,== 比较的是对象的内存地址
  • equals() 方法存在两种使用情况:
    • 类没有重写 equals()方法:通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是 Object类equals()方法【比较内存地址】。
    • 类重写了 equals()方法:一般我们都重写 equals()方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。

部分内容参考 JavaGuide
链接:https://javaguide.cn/java/basis/java-basic-questions-02.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值