JAVA程序员面试宝典笔记总结(刘磊版)
### JAVA程序员面试宝典笔记总结 #### 1. JDK与JRE - **JDK (Java Development Kit)**:这是Java开发工具包,包含了Java运行所需的各类库和工具,包括编译器、文档、示例代码等。JDK还包含了一个JRE(Java Runtime Environment),这意味着只要安装了JDK,就可以同时拥有开发和运行Java程序的能力。 - **JRE (Java Runtime Environment)**:它是Java程序运行的环境,包含了Java虚拟机(JVM)、Java核心类库等,用于支持Java程序的运行。 #### 2. 环境变量设置 - **JAVA_HOME**:此环境变量指向JDK的安装目录。很多Web服务器(如Tomcat)没有内置JDK,它们通过JAVA_HOME来定位JDK的位置。 - **PATH**:通常是在原有的PATH值基础上添加`%JAVA_HOME%\bin`。这样可以在任何命令行窗口中使用javac、java等命令。 - **CLASSPATH**:用于指定Java程序搜索类文件的路径。编译和运行时,Java程序会首先查找jre/lib/rt.jar中的类,然后是CLASSPATH中指定的类。 #### 3. 动态指定类搜索路径 - 可以通过`-cp`或`-classpath`选项来指定编译或运行时的类搜索路径,例如: - `javac -cp D:\work\log4j.jar Hello.java` - `java -cp D:\work\log4j.jar Hello` #### 4. Java与C/C++在编译及运行上的区别 - C/C++的编译器(如UNIX下的cc命令或Windows下的cl命令)将源代码直接编译成机器码(如EXE或DLL文件),可以直接运行。 - Java采用了一种称为“编写一次,到处运行”的方法。它的编译器(javac)首先将源代码编译成字节码文件(.class文件),这些字节码文件可以被任何平台上的JVM解释执行,从而实现了跨平台性。 #### 5. JVM及其工作原理 - JVM(Java Virtual Machine)是一个抽象的概念,通过软件在实际计算机上模拟实现。它有自己的硬件模型,如处理器、栈、寄存器等,并且有自己的指令集。 - 当执行字节码时,JVM将其解释为特定平台的机器指令并执行。 #### 6. Java的垃圾回收机制 - Java使用自动内存管理和垃圾回收机制来管理堆空间。当不再需要对象时,JVM会自动回收内存。 - 垃圾回收器负责识别不再使用的对象,并释放其占用的内存空间。 - Java中的栈用于存储非静态的局部变量、函数参数等,这些数据的生命周期由系统自动管理。 - 对象创建时会分配在堆上,需要显式地使用new关键字创建。垃圾回收器负责回收不再使用的对象。 - Java对象有一个`finalize()`方法,该方法可以在对象被垃圾回收之前执行。 - `System.gc()`和`Runtime.getRuntime().gc()`可以手动触发垃圾回收,但这并不是最佳实践。 #### 7. jar和war - `jar`(Java Archive)是一种压缩格式,用于打包Java应用程序,包括类文件、资源文件和其他依赖项。它主要用于桌面应用程序。 - `war`(Web Application Archive)也是压缩格式,专门用于打包Web应用程序,其中包含了Web应用的所有组件,如HTML、Java Servlets、JSP等。 - 两者都可以使用JDK自带的`jar`命令进行打包。 #### 8. Java变量及作用范围 - **静态变量**:在类中用static修饰,其生命周期与类相同。 - **成员变量**:没有用static修饰的变量,其生命周期与对象相同。 - **局部变量**:定义在方法内部的变量,作用域仅限于方法体或代码块。 #### 9. Java的数据类型分类 - **基本数据类型**:如int、float等,直接存储数据值。 - **引用数据类型**:如Object、String等,存储的是指向数据的引用而不是数据本身。 - 基本数据类型和引用数据类型的主要区别在于存储位置和存储方式。基本数据类型直接存储值,而引用数据类型存储的是对象在内存中的地址。 #### 10. 装箱与拆箱 - **装箱**:将基本数据类型转换为对应的包装类对象的过程。 - **拆箱**:将包装类对象转换为基本数据类型的过程。 #### 11. C++指针与Java引用的区别 - **类型转换**:Java中的引用类型转换可能抛出`ClassCastException`,而C++中的指针类型转换总是成功的。 - **初始值**:Java引用的初始值为null,而C++指针如果不初始化,默认值是未定义的。 - **计算**:Java中的引用不可计算,而C++中的指针可以进行计算操作,如++或--。 - **内存泄漏**:Java中的引用基本不会导致内存泄漏,因为有垃圾回收机制,而C++中指针可能导致内存泄漏,需要程序员手动管理内存。 - **作为参数传递**:Java方法实质上是传值,传递引用实际上是传递引用的副本;而在C++中,传递指针实际上是传递指针所指向的地址。 #### 12. equals()与== 的区别 - 当用于基本数据类型时,`==`比较的是值是否相等,而`equals()`方法不适用于基本数据类型。 - 当用于对象时,`==`比较的是两个对象的引用是否指向同一个对象(即地址是否相同),而`equals()`方法默认情况下也是比较引用,但String类重写了`equals()`方法来比较字符串的内容是否相同。 #### 13. 综合分析 以上内容覆盖了Java编程中的一些基础概念和技术要点,这对于Java程序员来说是非常重要的基础知识。理解JDK与JRE的区别、环境变量的设置、编译与运行的不同以及垃圾回收机制等,对于构建稳定可靠的Java应用程序至关重要。此外,熟悉不同数据类型的特点、了解C++与Java之间的差异也有助于更好地理解和掌握Java编程语言的核心概念。
- lisa32892012-10-08很不错,总结的很简洁,虽然跟书有些出入
- 粉丝: 66
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助