每周10道Java面试题~第一期
1️⃣ Java实现可移植性的基本原理?
Java用编译器将Java源码编译成.class字节码,字节码用JVM虚拟机解释运行,同一字节码可以在不同的操作系统下被该操作系统相对应版本的JVM解释运行,从而实现了Java的跨平台性(也即可移植性) 。
因为.class字节码文件是按规定标准排列的二进制文件,所以不同操作系统的java编译器都会编译出一致的字节码文件。
2️⃣ Java语言的特性?
(1)Java是一种简洁有效 的程序设计语言。省略了C++语言中所有的难以理解、容易混淆的特性,如头文件、指针、结构、单元、运算符重载、虚拟基础类等。
(2)可移植性(即跨平台性)。可同时在Windows、Linux、MacOs、UNIX等平台上运行。
(3)面向对象(根据抽象的类,创建具体的对象)
(4)具有多线程 处理能力
(5)具有较高的安全性
(6)解释型 语言
(7)具有健壮性。提供异常体系和异常处理,在编译阶段就可发现一些问题,有效地减少了错误,保证了程序的稳定性、健壮性。
(8)拥有较好的性能。提供“准实时”(Just-in-Time,JIT)编译器,保证了更快的处理速度。
3️⃣ Java语言的3个分支?
- Java SE:包含构成Java语言核心的类。例如:数据库连接、接口定义、数据结构、I\O、网络编程;
- Java EE:不仅包含Java SE中的所有类,还包含用于企业级应用开发的类:EJB、Servlet、JSP、XML、事务控制;
- Java ME:包含用于电子产品类(呼机、智能卡、手机、PDA、机顶盒)的软件开发支持类。
4️⃣ JDK安装时,配置path和classpath的作用?
设置path环境变量的目的是指定Java命令搜索路径,在命令行界面中执行命令时(如 javac编译),会到path变量所指定的路径中查找是否能找到相应的命令程序。在JDK安装时,把 JDK安装目录下的bin目录(bin目录中就包含了Java的可执行文件如 javac/java/javadoc等)增加到现有的PATH变量中,完成设置后就可以在任何目录下使用Java执行命令了。
设置classpath环境变量的作用是指定类搜索路径,JVM是通过classpath来寻找类资源的。在JDK安装时,应把JDK安装目录下的lib子目录中的dt.jar、tools.jar以及当前目录“.”设置到classpath中。
5️⃣ JDK、JRE与JVM三者之间的关系?
- JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar);
- JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库;
- JVM(Java Virtual Machine),即Java虚拟机,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
总结,JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,可以认为bin里的是JVM,lib中则是JVM工作所需要的类库,而JVM和 lib合起来就称为JRE。
6️⃣ 编译型语言和解释性语言的区别?
计算机不能直接的理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言的编写的程序。翻译的方式有两种,一个是编译,一个是解释。
- 解释性语言是指它常用的执行机制是使用一个“解释器”来执行,解释器对于程序是一句一句“翻译”成机器语言来执行,例如shell脚本语言;
- 编译型语言是指它常用的执行机制是使用一个“编译器”来编译成机器语言,然后就可直接执行这个编译好的“可执行文件”,例如C语言。
不管是解释性语言还是编译型都可编译或解释,前提是有这样的编译器或解释器。所以各种编程语言本质没什么不同,所谓的“解释性”和“编译”指的是执行机制上的不同。
7️⃣ 方法重载与方法重写的区别?
- 方法重载是指在一个类中,方法名称相同而参数列表(参数个数、类型、顺序)不同,对权限符没有要求;
- 方法重写是指子类重写父类的方法,方法的名称、参数列表全部相同,重写方法的权限符等级必须大于等于被重写方法的权限符等级。
8️⃣ 逻辑运算符&和&&、| 和 || 的区别?
在 使用“&”进行逻辑运算时,不论左边为true或者false,右边的表达式都会进行运算。而使用“&&”进行运算,当左边为false时,右边的表达式不会再进行运算,因此“&&”被称作短路与。
同与操作类似,“||”表示短路或,当运算符“||”的左边为true时,右边的表达式不会再进行运算。
所以,“&&”和“||” 相较于 “&”和“|”来说,效率更高。
9️⃣ 关键字continue和break的区别?
break和continue主要都是用来控制循环结构的,主要作用是结束或跳出循环。二者的区别是:
- break用于结束或跳出一层循环体;而continue的作用是结束本次循环或跳过本次循环体中剩下尚未执行的语句,立即进行下一次循环;
- break可以在循环体内和switch语句体内使用,continue 只能在循环语句中使用。
🔟 使用public class和 class声明类的区别?
二者都是用来声明类的,其区别是:
- 使用 public class进行类的声明,类名称必须与文件名称完全一致;而使用class进行类的声明,则类名称可以与文件名称不一致;
- 在一个类文件中,只能有一个public class的声明,但是允许有多个class的声明。
注意一个类文件中总共声明了多少个类,在编译时就会生成多少个*.class字节码文件。字节码文件的名称和 代码中声明类时的名称完全一致。
图片引用来源(依序):
Java的前生今世(上)
Java基础