Java课前问题思考

1. 使用Java能编写哪些类型的程序?试举至少两个例子。

Java是一种多用途、跨平台的编程语言,可以用于开发各种类型的应用程序。

例子1:Web应用——阿里巴巴的后台服务使用Java处理用户请求、订单管理和支付流程。

例子2:Android应用——Spotify的Android客户端使用Java来管理音乐播放、用户界面和网络通信。

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

理解:Java的“一次编译、处处运行”意味着开发者只需将Java源代码(.java文件)编译一次,生成字节码文件(.class文件),这些字节码不是针对特定操作系统或硬件的机器码,而是针对Java虚拟机(JVM)的中间格式,任何安装了JVM的平台都可以解释和执行这些字节码,从而实现跨平台运行。

需要安装什么:必须在目标操作系统上安装JRE或 JDK。JRE包含了JVM和运行Java程序所需的核心类库;JDK则包含了JRE以及开发工具(对于最终用户,通常只需安装JRE即可运行Java程序)。

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

以下是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!"); 
    }
}

不同点:

(1)编程范式:C语言是面向过程的,程序围绕函数构建;Java是面向对象的,程序必须包含在类中。

(2)入口点:C语言的入口是main函数;Java的入口是main方法,且必须位于类内。

(3)编译和运行:C代码被编译成平台特定的机器码,直接由操作系统执行;Java代码被编译成字节码,由JVM执行。

(4)输出语句:C使用printf函数;Java使用System.out.println方法。

(5)文件命名:Java源文件名必须与公共类名一致,而C语言没有此要求。

(6)头文件/包:C使用#include引入头文件;Java使用import引入包。

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

(1)如何比较字符串内容:比较两个字符串内容是否相同,必须使用equals()方法,例如:str1.equals(str2)。该方法比较字符串的字符序列是否一致。

(2)能否直接使用 ==:不能直接使用 == 比较字符串内容,因为 == 对于引用类型比较的是对象的内存地址,即是否指向同一个对象,而不是内容。

(3)为什么基本数据类型可以用 == :基本数据类型(如int、char、boolean)存储的是实际值,因此 == 直接比较值是否相等。

(4)为什么引用数据类型不能用 == :引用数据类型(如String、自定义类)变量存储的是对象的引用,而不是对象本身。因此 == 比较的是引用是否相同,即是否指向同一个对象,而不是对象的内容。即使两个对象内容相同,如果它们是不同的实例, == 也会返回false。
这部分内容不变,并以markdown的形式输出

示例:

String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1 == s2); // false,因为s1和s2是不同的对象
System.out.println(s1.equals(s2)); // true,因为内容相同

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

代码:

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

(1)本意:这段代码试图获取字符串x的长度和去除首尾空格后的内容。

(2)能运行成功吗:不能运行成功,它会抛出NullPointerException(空指针异常)。

(3)为什么:因为变量x被赋值为null,表示它不引用任何对象,当调用null引用的方法时,Java虚拟机就会抛出NullPointerException,代码在执行x.length()时就会中断,不会到达x.trim()。

(4) 如何获得String的trim()方法的说明:

· 官方文档:访问Oracle的Java SE文档,找到String类,查看trim()方法的详细说明。

· IDE工具:在IntelliJ IDEA、Eclipse等集成开发环境中,将光标放在trim()方法上,按快捷键即可显示文档提示。

· 源代码:下载JDK源代码(src.zip),查看String类的trim()方法注释。

6. 阅读如下代码

代码:

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

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

这里使用了自动拆箱技术。当Integer对象与int基本类型相加时,Java编译器自动将Integer对象转换为int值,因此,x + 1实际上被解释为x.intValue() + 1,从而允许加法操作。

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

这里也使用了自动拆箱技术。在表达式x + y中,两个Integer对象都被自动拆箱为int基本类型,结果是一个int值。然后,这个int值可以直接赋值给int类型的变量z。此外,Java还支持自动装箱,但在这个特定表达式中,主要是自动拆箱在起作用。

posted @ 2025-09-09 16:46  Writing  阅读(10)  评论(0)    收藏  举报