持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
Java基础面试题
基础概念与常识
Java语言的特点?
- Java是一门面向对象的语言。编译与解释共存。
- Java使用虚拟机来实现平台无关性。
- 支持网络编程并且比较方便。
- 可靠、安全(不提供指针直接访问内存)
JVM & JDK & JRE
-
JVM
JVM是Java虚拟机。JVM针对不同的系统都有着不同的优化,目的是使用相同的字节码,都会给出相同的结果。也正是因为虚拟机的存在,使Java称为一门跨平台的语言。
-
JDK(Java Development Kit)
Java构建工具,包含JRE、编译器(javac)、和一些工具(javadoc)。能够创建和编译程序。
-
JRE(Java RunTime Environment)
Java运行环境,其中包含了运行Java程序所需的所有内容。比如JVM、Java核心类库、Java命令等。
什么是字节码?
Java程序通过编译器编译后就会产生字节码文件,JVM可以理解的代码就叫做字节码,是只面向虚拟机的,所以Java程序无需重新编译就可以在不同操作系统的计算机上运行。
Java程序的执行过程?
Java的执行过程整体可以分为两部分,首先是Javac进行编译,生成字节码文件。这部分的编译称为前端编译。接下来无需编译,直接逐条将字节码解释执行。在解释执行的过程中,JIT即时编译器会发挥作用,进行后端编译,也就是将字节码编译成机器码并保存下来,下次就可以直接使用,这样会提高Java程序的运行效率。
为什么说Java语言“编译与解释并存”?
因为Java语言既有编译型语言的特性,也有解释性语言的特性。Java语言的执行过程可以分为两步......
Java和C++的区别?
- Java的类不支持多重继承,但是可以通过接口实现。
- Java不提供指针来直接访问内存,数据更安全。
- Java只支持方法重载,C++同时支持方法重载和操作符重载。
- Java有GC机制。
基本语法
注释有哪几种形式?
注释分为单行注解、多行注解、文档注解。其中比较常用的是单行注解。注解就类似于代码的说明书,但是代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。
若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。
标识符和关键字的区别是什么?
标识符就是一个名字,比如类、变量、方法的名称。关键字是具有特殊含义的标识符。
比如说基本数据类型:int char boolean;访问控制相关的关键字:private、protected、public;类,方法和变量修饰符:abstract、class、extends、final、static等 。
成员变量与局部变量的区别?
- 语法:成员变量可以被public、static这些修饰符修饰,而局部变量不可以。但成员变量和局部变量都可以被final修饰。
- 创建:(非静态的)成员变量是属于实例的(在堆内存中);而局部变量是属于某一个方法的(在栈内存中)。
- 默认值:如果成员变量没有被final修饰,成员变量可以不赋默认值,会自动给一个默认值;而局部变量不会自动赋值。
字符型常量和字符串常量的区别?
字符型常量是一个字符,代表一个ASCII值。占2个字节。
字符串是多个字符,代表的是内存中的地址。
静态变量的作用?
静态变量是属于类的,不属于任何对象,通常情况下,静态变量会被 final关键字修饰成为常量。
静态方法和实例方法的区别?
- 调用静态方法推荐使用类名直接调用;而实例方法必须使用对象来调用。
- 静态方法只能允许访问静态成员,不可以访问实例成员。因为JVM在进行类加载的时候,会先初始化静态方法;而实例方法不存在这个限制。
重载和重写的区别?
重载即同一个类中多个同名方法根据不同的传参来执行不同的逻辑。重载要求方法名相同,参数可以不同。
重写发生在运行期,就是子类对父类方法的一种改造。重写要求方法名相同,参数一致。但是访问权限要大于父类,返回值类型和返回异常可以小于父类的。