Java经典面试题总结(一)
题一:Java编译运行原理
- Java源代码通过Java编译器(javac )进行编译,生成字节码文件( xxx.class文件)。
- 这些字节码文件包含了与特定平台无关 的中间代码,在Java虚拟机JVM中进行解释执行 ,并转换成平台能够理解的形式来运行。
示意图如下:
题二:JDK,JVM,JRE三者之间的关系
- JDK(Java Development Kit),又称Java开发工具包,包含了JRE以及开发工具,提供给程序员使用。同时包含了Java编译器(javac)和自带的调试工具console等。
- JRE(Java Runtime Environment),又称 Java运行时环境,包含了JVM和Java类库。是编写程序运行时所需的环境。
JVM(Java Virtual Machine),又称Java虚拟机,是Java程序的运行平台。
示意图如下:
题三:谈一下对冯诺依曼体系的了解
冯诺依曼体系是一种计算机架构,由冯诺依曼提出。它包含中央处理器、存储器、输入输出设备以及总线这几个关键组件。
- 中央处理器(CPU):负责执行指令和处理数据。CPU由控制单元和算术逻辑单元组成,控制单元负责解析和执行指令,而算术逻辑单元负责执行算术和逻辑操作。
- 存储器(Memory):用于存储程序指令和数据。存储器被划分为不同的地址,每个地址都可以存储一个字节或多个字节的数据。
- 输入/输出(I/O)子系统:用于与外部设备进行交互,如键盘、显示器、硬盘等。
- 总线(Bus):用于连接CPU、存储器和I/O子系统,实现数据和指令的传输。
题四:重载与重写的区别
- 重载是在同一个类中定义多个方法,他们具有相同的方法名和不同的参数列表,重写是在子类中重新定义父类中已有的方法。
- 重载:方法名相同;参数列表要不同;返回值没有特定的要求。
- 重写:方法名相同,参数列表要相同,返回值要相同。
题五:拆箱装箱是指什么?
拆箱和装箱是指Java中用于基本类型 和对应的包装类型 之间转换的概念。
装箱指的是将基本类型转换成其对应的包装类型对象,例如,将int类型的值转换为Integer对象。
拆箱则相反,指的是将包装类型对象转化为基本类对应的基本类型的值。例如,将Integer对象转换为int类型的值。
补充内容:
int num = 30;
Integer integerObj = num; // 自动装箱
int result = integerObj; // 自动拆箱
拆箱和装箱的主要作用是在需要使用包装类型的场景中,可以直接使用基本类型,并在需要时自动进行转换。这样可以方便地在基本类型和包装类型之间进行转换,提高了代码的灵活性和可读性。但需要注意的是,在频繁进行拆箱和装箱操作时,可能会对性能产生一定的影响,因此需要谨慎使用。
Integer a = 10;
Integer b = 10;
System.out.println(a == b); // true,因为a和b都指向缓存中的同一个对象
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false,因为c和d超出了缓存范围,会创建新的对象
在比较包装类型对象时,应该使用equals()方法进行比较。
针对自动装箱操作,存在一个缓存数组,用于提高性能和节省内存。具体来说,对于范围在-128到127之间的整数和一些常见的字符,他们的包装类型对象在第一次创建时会被缓存起来,后续在创建相同值的对象时会直接返回缓存中的值二不会重新创建对象。