课前问题列表
一、使用Java能编写哪些类型的程序?
- 移动应用:Android 平台的大部分应用都是用 Java 或基于 Java 的 Kotlin 编写的,比如各类社交 APP、工具类 APP。
- 企业级后端服务:很多公司的服务器端程序用 Java 开发,处理数据交互、业务逻辑等,比如电商平台的订单处理系统。
二、Java号称“一次编译、处处运行”(Write Once, Run Anywhere!),怎么理解这句话?为使编译好的程序能运行,需先在操作系统安装什么?
- 理解:Java 程序编译后生成的是字节码(.class 文件),而非直接运行的机器码。字节码需要通过 Java 虚拟机(JVM)解释执行,而不同操作系统(如 Windows、Linux)都有对应的 JVM,因此同一份字节码可以在安装了对应 JVM 的任何系统上运行,无需重新编译。
- 需要安装:Java 运行时环境(JRE,Java Runtime Environment),它包含了 JVM 和运行 Java 程序所需的核心类库。
三、对比c版本的与Java版本HelloWorld代码,有何不同?
- C 语言的 HelloWorld:
#include <stdio.h>
int main() {printf("Hello World!\n");return 0;
}
- Java 的 HelloWorld:
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}
}
主要不同:
- 结构:Java 必须放在类中,类名与文件名一致;C 不需要类。
- 入口方法:Java 的入口是public static void main(String[] args);C 是main()函数。
- 输出方式:Java 用System.out.println();C 用printf()。
- 编译运行:Java 编译生成.class 字节码,通过java命令运行;C 编译生成机器码可执行文件,直接运行。
四、怎么比较两个字符串内容是否相同?可以直接用吗?为什么对基本数据类型可以直接使用?对引用数据类型不行?
- 比较字符串内容:用equals()方法,例如str1.equals(str2)。
- 不能直接用:对字符串(引用类型)比较的是两个变量的内存地址(是否指向同一个对象),而非内容。
- 基本数据类型(如 int、char)用:基本类型变量存储的是值,直接比较值是否相等。
- 引用数据类型用:引用类型变量存储的是对象的内存地址,比较的是地址是否相同(是否为同一个对象),而非对象内容。
五、下面这段代码,本意是要达到什么效果?能运行成功吗?为什么?怎么获得String的trim()方法的说明?
String x = null;
int length = x.length();
System.out.println("x.length = "+length +", content = "+x.trim());
- 本意:可能是想获取字符串 x 的长度,并输出长度和修剪(去除首尾空格)后的内容。
- 不能运行成功:因为 x 被赋值为null(没有指向任何对象),调用x.length()和x.trim()时会抛出NullPointerException(空指针异常)。
- 获得 trim () 说明:可以查阅 Java 官方文档(如 Oracle 的 Java API 文档),或在 IDE(如 IDEA、Eclipse)中鼠标悬停在trim()上查看提示。
六、阅读如下代码,x是Integer类型,1是int类型,为什么他们可以相加,使用了什么技术?z是int,x与y是Integer类型,却可以直接将x + y 赋给z,使用了什么技术?
Integer x = Integer.valueOf("10");
Integer y = x + 1;
int z = x + y;
- x(Integer)和 1(int)能相加:因为使用了 “自动拆箱” 技术,Integer 对象会自动转换为 int 基本类型,之后进行数值相加。
- x + y(Integer 类型相加)能赋给 z(int):x 和 y 先自动拆箱为 int 类型并相加,结果是 int 类型,直接赋值给 z,这也是自动拆箱的体现(本质是拆箱后的值直接赋值给基本类型变量)。