Java基础精讲:JDK与JRE、equals与==的区别

0 下载量 44 浏览量 更新于2024-08-04 收藏 498KB PDF 举报
"2020版Java基础17道" 在Java编程中,掌握基础知识是至关重要的。以下是对摘要中提到的几个关键知识点的详细解释: 1. **JDK和JRE的区别** JDK(Java Development Kit)是Java开发工具包,它包括了JRE(Java Runtime Environment)以及用于开发和调试的工具,如Javac编译器、Javadoc文档生成器、JDB调试器等。JRE则仅提供运行Java应用程序所需的环境,不包含开发工具。 2. **==和equals的区别** 在Java中,`==`用于比较基本类型变量的值,而对于对象引用,它比较的是两个引用是否指向内存中的同一个对象。`equals()`方法是Object类的一个方法,用于比较对象的内容是否相等。如果覆盖了`equals()`方法,比如在String类中,它会比较两个字符串的内容是否一致。 3. **hashCode()和equals()** 根据Java规范,如果两个对象通过`equals()`方法判断为相等,那么它们的`hashCode()`方法应该返回相同的值。但这并不是说两个`hashCode()`相等的对象就一定通过`equals()`方法判断为相等,因为`hashCode()`可能有冲突。 4. **final关键字** `final`在Java中可以用来修饰变量、方法和类。修饰的变量一旦赋值后不可改变;修饰的方法不能被子类重写;修饰的类不能被继承。 5. **String不是基础数据类型** Java的八个基础数据类型包括byte、short、int、long、float、double、char和boolean,而String是一个对象,它是基于字符数组的类。 6. **Java中操作字符串的类** Java提供了String、StringBuilder和StringBuffer三个主要的字符串处理类。String是不可变的,而StringBuilder和StringBuffer是可变的,其中StringBuffer是线程安全的。 7. **String对象的创建** `String str = "i"`是常量池中的引用,而`String str = new String("i")`是在堆中创建了一个新的对象。 8. **字符串反转** 可以使用`StringBuffer`或`StringBuilder`的`reverse()`方法来反转字符串。 9. **String类的常用方法** 包括`length()`、`charAt()`、`substring()`、`indexOf()`、`replace()`、`split()`等,这些方法用于获取字符串长度、获取特定位置的字符、截取子串、替换字符、分割字符串等操作。 10. **抽象类和抽象方法** 抽象类不一定包含抽象方法,但含有抽象方法的类必须声明为抽象类。抽象方法没有方法体,只有方法签名。 11. **普通类与抽象类的区别** 普通类可以实例化,而抽象类不能直接实例化,只能被继承。抽象类通常用于定义接口或者作为基类,提供部分通用的功能。 12. **final修饰抽象类** 抽象类不能被final修饰,因为final表示不能被继承,而抽象类的存在就是为了被继承。 13. **接口与抽象类的区别** 接口只包含抽象方法和默认方法(Java 8引入),不包含字段,强制实现所有方法。抽象类可以包含抽象和非抽象方法,可以有字段,且支持多继承。 14. **Java的IO流分类** Java的IO流分为字节流(Byte Stream)和字符流(Character Stream),并按流向分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)。 15. **BIO、NIO、AIO的区别** - **BIO**( Blocking I/O)是传统的同步阻塞I/O模型,读写操作会阻塞线程,适合连接数目较少的情况。 - **NIO**(Non-blocking I/O)是同步非阻塞I/O,通过选择器(Selector)监控多个通道,提高了并发性能。 - **AIO**(Asynchronous I/O)是异步非阻塞I/O,系统通知完成I/O操作,减少了等待时间。 16. **Files类的常用方法** Files类提供了很多与文件操作相关的静态方法,如`createFile()`, `readAllBytes()`, `write()`, `exists()`, `delete()`, `copy()`, `move()`等,用于创建、读写、检查文件及文件属性,以及文件的移动和复制。 了解这些基础概念和用法是成为熟练Java开发者的关键步骤。通过不断学习和实践,可以深入理解Java的精髓,为更复杂的编程任务打下坚实基础。