第01周 预习、实验与作业:绪论与Java基本语法

第01周 预习、实验与作业:绪论与Java基本语法

1. Java能编写哪些类型的程序?

  1. 桌面应用程序 - 使用JavaFX或Swing库开发跨平台的图形界面软件
  2. Web应用程序 - 基于Java EE(Jakarta EE)技术开发服务器端Web应用
  3. 移动应用程序 - Android应用开发的主要语言
  4. 大数据技术 - Hadoop、Spark等大数据框架使用Java开发

2. 理解"一次编译、处处运行"

Java号称“一次编译、处处运行”(Write Once, Run Anywhere!),怎么理解这句话?

  • Java源代码只需编译一次,生成字节码(.class文件)
  • 这些字节码可以在任何安装了Java虚拟机(JVM)的平台上运行
  • 不需要针对不同操作系统重新编译源代码

为使编译好的程序能运行,需先在操作系统安装什么?

  • Java虚拟机(JVM) - 负责执行字节码
  • Java类库 - 提供标准API和支持功能

对于开发环境,需要安装Java开发工具包(JDK),它除了包含JRE外,还提供了编译器(javac)和其他开发工具。

3. 对比c版本的与Java版本HelloWorld代码

C语言:

#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!");
    }
}

有何不同?

  • 结构差异:Java必须包含在类中(面向对象),C是过程式语言
  • 编译方式:C编译为机器码,Java编译为字节码由JVM执行
  • 内存管理:C手动管理,Java自动垃圾回收
  • 平台依赖:C代码平台相关,Java字节码平台无关
  • 输出语句:C用printf(),Java用System.out.println()
  • 头文件:C需要#include,Java用import

4. 怎么比较两个字符串内容是否相同?

怎么比较两个字符串内容是否相同?可以直接用==吗?

不可以,应该使用equals()方法而不是==操作符:

为什么对基本数据类型可以直接使用?对引用数据类型不行?

  • 对于基本数据类型(int, char, boolean等),==比较的是存储在变量中的实际值
  • 对于引用数据类型(String, 数组, 对象等),==比较的是对象引用(内存地址),而不是对象内容

5. 代码分析

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

下面这段代码,本意是要达到什么效果?
获取字符串x的长度和字符串x去除首尾空格后的内容并打印。

能运行成功吗?
不能运行成功,会抛出NullPointerException异常。

为什么?

  1. 变量x被赋值为null,表示它不引用任何对象
  2. 调用x.length()x.trim()试图在null引用上调用方法,导致空指针异常

怎么获得String的trim()

String x = " Hello World "; // 赋予实际值
if (x != null) { // 添加null检查
    int length = x.length();
    String trimmed = x.trim();
    System.out.println("x.length = " + length + ", content = " + trimmed);
}

6. 代码分析

Integer x = Integer.valueOf("10"); // 装箱:将String转换为Integer对象
Integer y = x + 1; // 拆箱→计算→装箱
int z = x + y; // 拆箱→计算→赋值

x是Integer类型,1是int类型,为什么他们可以相加,使用了什么技术?

这里使用了Java的自动拆箱(Unboxing)机制。当Integer对象与基本类型int进行运算时,Java会自动将Integer对象转换为基本int值(相当于调用x.intValue()),然后进行数学运算。

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

  1. 自动拆箱:x和y都被自动转换为int基本类型
  2. 加法运算:在两个int值上进行数学加法
  3. 结果赋值:将int结果直接赋给int变量z

自动装箱(Autoboxing):将基本类型自动转换为对应的包装类对象

int a = 5;
Integer b = a; // 自动装箱,相当于 Integer.valueOf(a)

自动拆箱(Unboxing):将包装类对象自动转换为对应的基本类型

Integer c = Integer.valueOf(10);
int d = c; // 自动拆箱,相当于 c.intValue()
posted @ 2025-09-10 21:44  糯米鸡加鸡蛋  阅读(9)  评论(0)    收藏  举报