Java基础面试知识点精选

本文详细讲解了Java面试中的关键知识点,包括JVM、JRE和JDK的关系,自动装箱与拆箱的概念,Java面向对象的三大特性(封装、继承、多态),重载与重写的区别,以及创建对象的四种方式。此外,还探讨了equals和==的区别,String、StringBuffer和StringBuilder的差异,接口与抽象类的对比,以及静态和final的区别。这些内容对于理解和掌握Java基础至关重要,是面试准备的重要资料。
摘要由CSDN通过智能技术生成

1. JAVA语言基础

1.1 JVM、JRE和JDK的关系

JVM

Java Virtual Machine是Java虚拟机,是运行Java字节码的虚拟机,在JVM中不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。

什么是字节码?采用字节码最大的好处是什么?

字节码: Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件)通俗的讲就是JVM可以理解的代码叫做字节码,它不面向任何特定的处理器,只面向虚拟机。

**采用字节码的好处:**Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

Java程序从源代码到运行的过程:
在这里插入图片描述

强调一点的是,.class文件–>可执行的机器码,在这一步,JVM类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这只方式的执行速度相对比较慢,而且有些方法和代码块是经常需要被调用的,所以后面引进了JIT属于运行时编译,而JIT属于运行时编译,当JIT编译器完成第一次编译后,就会将字节码对应的机器码保存下来,下一次直接可以使用,而我们知道机器码的运行效率高于Java解释器的,这也解释了我们为什么经常会说Java是编译和解释共存的语言。

JRE
Java的运行环境,包括Java虚拟机,Java类库,Java命令和其他的一些基础组件,但时不鞥创建新程序,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

JDK
它是功能齐全的Java SDK,它包含JRE,还有编译器(javac)和工具(javadoc和jdb),它能够创建和编译程序。

JDK和JRE的区别

  • JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。

具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。

JVM&JRE&JDK关系图

img

1.2 什么是自动装箱和自动拆箱

自动装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。 比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。

  • 基本数据类型: boolean,char,byte,short,int,long,float,double
  • 包装类型: Boolean,Character,Byte,Short,Integer,Long,Float,Double
//自动装箱
Integer total = 99;
//自动拆箱
int totalprim = total;  

综上所述,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。

谈谈 int和Integer的区别

  • Integer是int的包装类,int则是java的一种基本数据类型
  • Integer变量必须实例化后才能使用,而int变量不需要
  • Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
  • Integer的默认值是null,int的默认值是0

延伸:

关于Integer和int的比较

由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false

Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

Integer i = new Integer(100);
int j = 100;
System.out
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值