### 常用面试题详解
#### Java与JDK
**Java**是一种广泛使用的编程语言,具有跨平台性、面向对象、安全性高等特点。而**JDK(Java Development Kit)**是Sun公司提供的Java开发工具包,包含了编译、运行Java程序所需的所有工具。早期版本如JDK 1.3到1.4.2等都有不同的特性和改进。
- **JDK**:最初由Sun公司发布,后来被Oracle收购。J2SDK(Java 2 Software Development Kit)是JDK的一个别称。
- **JRE(Java Runtime Environment)**:Java运行环境,包含运行Java应用程序所需的库和其他组件。如果只需要运行Java Applet或应用程序,只需安装JRE即可。
- 学习Java推荐使用JDK+文本编辑器的方式开始,熟悉`path`、`classpath`、`package`等概念,并掌握`javac`和`java`命令的使用。此外,还需要了解JDK自带的API文档,确保能够熟练地查找API文档中的内容。
- 推荐使用IDE(集成开发环境)如JCreator来提高效率,尤其是对于初学者来说。Eclipse也是一个不错的选择。
#### 学习资源
学习Java时,建议参考以下资源:
- **《Thinking in Java》**:这本书深入浅出地讲解了Java的核心概念和技术,非常适合初学者。
- **O'Reilly**和Wrox出版社出版的相关书籍也很受欢迎。
#### Java与C++
Java与C++在很多方面有区别:
- Java更加注重跨平台性和安全性,而C++更偏向于性能和控制。
- Java不需要关注底层细节如内存管理等,这使得它在编写复杂系统时更为高效。
#### J2SE/J2EE/J2ME
- **J2SE**:Java 2 Standard Edition,适用于桌面应用。
- **J2ME**:Java 2 Micro Edition,适用于移动设备和嵌入式系统的开发,提供了一套专门针对小型设备的SDK。
- **J2EE**:Java 2 Enterprise Edition,适用于企业级应用的开发,基于J2SE并在此基础上扩展了许多高级特性。
#### Java程序开发流程
创建一个名为`xxx.java`的源文件,使用`javac xxx.java`命令编译该文件,会生成一个名为`xxx.class`的字节码文件。然后可以通过`java xxx`命令运行程序。
#### 编译错误“javac未找到”
如果遇到“javac未找到”这类错误,通常是因为系统路径设置问题:
- 确认系统变量`path`是否包含了`javac.exe`所在的目录。
- 如果安装了JDK,需要将`JAVA_HOME`设置为JDK的安装目录,并将`%JAVA_HOME%\bin`添加到系统`path`变量中。
#### 运行时错误“NoClassDefFoundError”
当尝试运行Java程序时出现“NoClassDefFoundError”错误,表示类路径设置不正确,即类路径中找不到指定的类:
- 检查`classpath`设置是否包含了类文件所在目录。
- 确保已经编译了`javaxxx.class`文件,并且其路径已被正确配置。
#### 运行时错误“NoSuchMethodError”
如果遇到“NoSuchMethodError”,可能的原因包括:
- 某个类中的方法签名改变,但调用方没有更新。
- 编译时和运行时的类版本不同。
#### package关键字
- `package`用于组织类文件,每个包名都必须是唯一的。
- 例如,`String`类位于`java.lang`包中,全名为`java.lang.String`。
- 如果想在同一包内引用其他类,可以使用完全限定名,例如`mypackage.String`来避免与`java.lang.String`混淆。
- 在Java文件中使用`package mypackage;`语句声明包名。
- 如果没有指定包名,默认为无名包(默认包)。
#### 导入包
- 使用`import`关键字导入特定的类或整个包。
- 例如,`import package1.class1; import package2.*;`表示导入`package1`下的`class1`类以及`package2`下的所有类。
- 若出现“NoClassDefFoundError”,可能是由于编译后的`.class`文件路径设置不正确。
#### Java执行文件
- JDK只能将Java源代码编译成字节码文件(`.class`文件),而不是可执行文件。
- 字节码文件可以在任何安装了Java虚拟机(JVM)的平台上运行,实现了跨平台性。
- 若要将Java程序编译成可执行文件,需要使用特定平台上的编译器(如Windows下的C++/C#编译器)。
#### “deprecated API”
- “deprecated”表示某些API已过时,不再推荐使用,可能在未来版本中被移除。
- 使用这些API可能会触发警告信息。
- 通常会有替代方案或新的API推荐使用。
#### main方法参数
- `public static void main(String[] args)`方法中的`args`参数是一个字符串数组,可以接收从命令行传入的参数。
- 调用程序时,如`java package1.class1 -arg1 -arg2`,`args`数组将包含`"-arg1"`和`"-arg2"`。
#### 输入处理
- Java的输入处理方式与C++有所不同。
- 使用`BufferedReader`类可以从标准输入流读取数据:
```java
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String s = cin.readLine(); // 读取一行输入
int n = Integer.parseInt(s); // 将字符串转换为整数
double d = Double.parseDouble(s); // 将字符串转换为双精度浮点数
```
以上是对常用面试题的详细解析,涵盖了Java的基础知识、开发环境配置、常见错误处理等多个方面,有助于加深对Java的理解和实际应用能力。