32道常见的Java基础面试题

1. 什么是 Java 虚拟机(JVM)?为什么 Java 被称作是“平台无关的编程语言”?

Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。 

Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

2. JDK、JRE、JVM 分别是什么关系?

JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE。开发工具如:用于编译 Java 程序的 javac 命令、用于启动 JVM 运行 Java 程序的 Java 命令、用于生成文档的 Javadoc 命令以及用于打包的 jar 命令等等。 

JRE 即为 Java 运行环境,提供了运行 Java 应用程序所必须的软件环境,包含有 Java 虚拟机(JVM)和丰富的系统类库。系统类库即为 Java 提前封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。

JVM 即为 Java 虚拟机,提供了字节码文件(.class)的运行环境支持。 简单说,就是 JDK 包含 JRE 包含 JVM。

 3. Java 支持的数据类型有哪些?

Java 支持的数据类型包括基本数据类型和引用类型。基本数据类型如下。

整数值型:byte,short,int,long 

字符型:char 

浮点类型:float,double 

布尔型:boolean

整数默认 int 型,小数默认是 double 型。Float 和 long 类型的必须加后缀。比如 float f = 100f。 

首先知道 String 是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String 类还是 final 修饰的。 

4. 什么是自动拆装箱?

自动装箱和拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,因为基本类型转换为引用类型后,就可以 new 对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者 toString(当然用类名直接调用也可以,便于一眼看出该方法是静态的),还有就是如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。

5. 什么是面向对象?

面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java 是一个支持并发、基于类和面向对象的计算机编程语言,面向对象软件开发具有以下优点:代码开发模块化,更易维护和修改;代码复用性强;增强代码的可靠性和灵活性;增加代码的可读性。

6. 面向对象的四大基本特性?

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类,对类进行实例化得到对象。

封装:封装可以使类具有独立性和隔离性,保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected 和 private 等)。

继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。

多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为,就是类多态特性。多态可以分成编译时多态和运行时多态。

 抽象、封装、继承和多态是面向对象的基础。 

7. & 与 && 的区别?

& 运算符有两种用法:(1) 按位与,(2) 逻辑与。&& 运算符是短路与运算。

逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&& 之所以称为短路运算是因为,如果 && 左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

 很多时候我们可能都需要用 && 而不是 &,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为:

1username != null && !username.equals(“”)

二者的顺序不能交换,更不能用 & 运算符,因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

8. 什么是值传递和引用传递?

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyjss.html