# java课前问题列表

java能编写的程序

一、桌面应用

借助 AWT(抽象窗口工具包)、Swing(轻量级 GUI 工具包)或更现代的 JavaFX 框架,能开发带有图形用户界面的桌面应用,如企业内部的客户信息管理系统。

二、游戏开发

利用 Swing、JavaFX 可开发小型桌面游戏(如贪吃蛇、俄罗斯方块)。

Java 号称“一次编译、处处运行”(Write Once, Run Anywhere!),怎么理解这句话?为使编译好的程序能运行,需先在操作系统安装什么?

  • 编译过程的特殊性:Java 程序并非直接编译为操作系统可执行的机器码,而是通过 javac 编译器编译成字节码(Bytecode)(后缀为 .class 的文件)。这种字节码是一种与平台无关的中间代码,不依赖于特定操作系统或硬件架构。

  • 跨平台运行的实现:字节码需要通过 Java 虚拟机(JVM)来解释执行。不同操作系统会安装对应版本的 JVM,这些 JVM 能将统一的字节码转换为当前系统可识别的机器码,从而实现 "同一份字节码在不同平台运行" 的效果。

  • 运行前提:要使编译好的 Java 程序(字节码文件)能够运行,必须在目标操作系统中预先安装 Java 运行时环境(JRE);如果需要开发 Java 程序,则需安装 JDK(Java Development Kit),其中包含 JRE 以及编译器(javac)、调试工具等开发组件。

对比 C 版本的与 Java 版本 HelloWorld 代码,有何不同?

C 语言版本的 Hello, World! 代码

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

Java 语言的版本

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

程序结构

  • C:以函数为单位,main() 是独立的程序入口函数
  • Java:以类为单位,main() 必须定义在类中(如 public class HelloWorld

语法规范

  • C:需引入头文件(#include <stdio.h>),函数有明确返回值类型(int main()
  • Java:类和方法有访问修饰符(public),main() 必须声明为 public static void

怎么比较两个字符串内容是否相同?可以直接用吗?为什么对基本数据类型可以直接使用?对引用数据类型不行?

比较两个字符串内容是否相同不能直接使用 == 运算符, Java 中使用 equals() 方法

基本数据类型(如 intfloatchar 等)的存储方式是值存储,变量直接保存「数据本身」,而非地址。== 比较的是变量存储的「实际值」,因此结果符合预期。

引用数据类型(如 String、对象、数组等)的存储方式是引用存储,变量保存的是「数据在内存中的地址」(引用),而非数据本身。== 比较的是「两个变量的引用是否指向同一块内存地址」,而非内容。

下面这段代码,本意是要达到什么效果?能运行成功吗?为什么?怎么获得String的trim()方法的说明?

String x = null;
int length = x.length();
System.out.println("x.length = "+length +", content = "+x.trim());

这段代码的本意是想获取字符串x的长度,并输出其长度和去除首尾空格后的内容,但这段代码不能运行成功,会直接抛出NullPointerException(空指针异常)

代码中 String x = null 表示 x 是一个空引用(不指向任何实际的字符串对象)。而 x.length() 试图调用空引用的 length() 方法 ,x.trim() 试图调用空引用的 trim() 方法。

获得 String 的 trim() 方法说明的方式:

  1. IDE 提示:在 IDE(如 IntelliJ IDEA、Eclipse)中,将光标放在 trim() 方法上,按 Ctrl+Q(IDEA)或 F2(Eclipse),可直接查看方法的文档注释(包含功能描述、参数、返回值);
  2. 查阅官方文档:访问 Java 官方文档(String 类),在方法列表中找到 trim(),可查看完整说明(如“返回去除首尾空白字符后的字符串,空白字符包括空格、制表符、换行符等”);
  3. 源码查看:按住 Ctrl 点击 trim() 方法(IDE 中),跳转到源码,查看注释了解功能。

阅读如下代码


Integer x = Integer.valueOf("10");
Integer y = x + 1;
int z = x + y;

x 是 Integer 类型,1是 int 类型,为什么他们可以相加,使用了什么技术? z 是 int , x 与 y 是 Integer 类型,却可以直接将 x + y 赋给 z ,使用了什么技术?

这里使用了自动拆箱技术: x 是 Integer 类型(包装类),1是 int 类型(基本数据类型)。当包装类与基本数据类型进行运算时,Java 会自动将包装类对象拆箱为对应的基本数据类型(即调用 x.intValue() )。因此x + 1实际等价于 x.intValue() + 1 ,得到的结果是 int 类型(11)。之后,Java 又会自动将这个 int 类型的结果装箱为 Integer 类型(即调用 Integer.valueOf(11) ),赋值给y。

这里同样使用了自动拆箱技术:x 和 y 都是 Integer 类型,相加时会先被自动拆箱为 int 类型(调用 x.intValue()y.intValue() )。两者相加的结果是 int 类型(10 + 11 = 21)。由于 z 是 int 类型(基本数据类型),可以直接接收这个 int 结果,无需额外转换

posted @ 2025-09-10 16:36  只整冰红茶  阅读(14)  评论(0)    收藏  举报