Java 基础知识解析
1. 使用 Java 能编写哪些类型的程序?试举至少两个例子。
Java 是一种功能强大的编程语言,可以用于开发多种类型的应用程序:
*Web 应用程序:可以开发企业级 Web 应用,如电子商务平台、银行系统等。
*移动应用程序:用于 Android 应用开发(微信,QQ及支付宝等)。
*桌面应用程序:使用 Java Swing 或 JavaFX 可以开发跨平台的桌面应用程序。
2. Java 号称"一次编译、处处运行",怎么理解这句话?为使编译好的程序能运行,需先在操作系统安装什么?
*"一次编译、处处运行"是 Java 的核心特性之一,意思是 Java 代码只需编译一次,生成的字节码可以在任何安装了 Java 虚拟机(JVM)的平台上运行,无需重新编译。
*为使编译好的 Java 程序能运行,需要先在目标操作系统上安装 Java 运行时环境(JRE),对于开发环境,通常安装 Java 开发工具包(JDK)。
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!");}
}
主要区别:
*结构组织不同:C 语言是过程式语言,代码直接写在函数中;Java 是面向对象语言,所有代码必须包含在类中。
*入口不同:C 使用 main() 函数作为程序入口;Java 使用 public static void main(String[] args) 方法作为入口点。
*输出方法不同:C 使用 printf() 函数;Java 使用 System.out.println() 方法。
*编译不同:C 代码编译为机器码;Java 代码编译为字节码,由 JVM 执行。
4. 怎么比较两个字符串内容是否相同?可以直接用 == 吗?为什么对基本数据类型可以直接使用?对引用数据类型不行?
使用 equals() 方法:
String str1 = "hello";
String str2 = "hello";
boolean isEqual = str1.equals(str2); // 返回 true
*不能直接使用比较字符串内容,因为:
== 对于引用类型比较的是引用地址,而不是内容。对于基本数据类型, 比较的是实际值。
*为什么对基本数据类型可以直接使用: 基本数据类型直接存储值本身, 比较的是它们的实际值。
*为什么对引用数据类型不能直接使用==:引用数据类型变量存储的是内存地址,而不是对象本身。使用 == 比较的是引用地址是否相同,而不是对象内容是否相同。
5. 下面这段代码,本意是要达到什么效果?能运行成功吗?为什么?怎么获得 String 的 trim() 方法的说明?
String x = null;
int length = x.length();
System.out.println("x.length = "+length +", content = "+x.trim());
效果:获取一个字符串的长度和修剪后的内容并打印出来。
*不能运行成功。
*因为变量 x 被赋值为 null,表示它不引用任何对象,不能在 null 引用上调用方法。
*在 IDE中,将光标放在trim()上并按 Ctrl+Q。
6. 阅读如下代码
Integer x = Integer.valueOf("10");
Integer y = x + 1;
int z = x + y;
x 是 Integer 类型,1 是 int 类型,为什么他们可以相加,使用了什么技术?
这里使用了 Java 的自动拆箱(Unboxing) 技术。当 Integer 对象与基本类型 int 进行算术运算时,Java 会自动将 Integer 对象转换为基本类型 int 值(拆箱),然后进行运算。
z 是 int,x 与 y 是 Integer 类型,却可以直接将 x + y 赋给 z,使用了什么技术?
这里同时使用了自动拆箱技术。在表达式 x + y 中,两个 Integer 对象都先被自动拆箱为 int 基本类型,然后进行加法运算,结果为 int 类型,可以直接赋值给 int 变量 z。
Java 5 引入的自动装箱和自动拆箱功能使得基本类型和对应的包装类之间的转换自动完成,简化了代码编写。