在Java编程语言中,面试题通常涵盖了许多核心概念和技术,如面向对象的特性、数据类型、内存管理和类的访问修饰符。以下是对标题和描述中提及的一些知识点的详细解释:
1. **面向对象的特征**:
- **抽象**:抽象是将复杂问题简化为更易于管理的部分,通过接口来隐藏实现细节。它包括过程抽象(函数、方法)和数据抽象(类、对象)。
- **继承**:继承允许一个类(子类)从另一个类(父类)中继承属性和行为,减少了代码重复,增强了代码复用。
- **封装**:封装是将数据和操作这些数据的方法绑定在一起,对外只提供公共接口,隐藏内部实现,以保护数据的安全性。
- **多态性**:多态性意味着一个接口可以有多种不同的实现,使得代码更加灵活,可以处理多种类型的对象。
2. **访问修饰符的区别**:
- **public**:任何地方都可以访问。
- **private**:只有在同一个类内部可以访问。
- **protected**:在同一个包内或不同包的子类中可以访问。
- **default(无修饰符)**:在同一包内可以访问,不同包则不能。
- 如果不写,那么默认为包访问权限(default)。
3. **基本数据类型与封装类的区别**:
- **基本数据类型**(如`int`)是直接存储值的,而**封装类**(如`Integer`)是对象,它们提供了一些额外的方法,如`equals()`、`compareTo()`等,同时支持`null`值。
4. **浮点型转换**:
- 浮点型常量默认为`double`类型,因此`float f=3.4;`会导致精度损失,应使用`(float)`进行强制类型转换。
- `float f=1.3;`和`s1 = s1 + 1;`的错误在于,整数或浮点型常量与`float`相加时会先转换为`int`或`double`,所以需要显式转换。
5. **运算符优先级与类型提升**:
- 在`s1 = s1 + 1;`中,由于`1`是`int`类型,加法运算后得到`int`结果,赋值给`short`类型的`s1`需要类型转换。
- 而`s1 += 1;`在语法层面会被编译器优化,自动进行类型提升,因此是合法的。
6. **保留字`goto`**:
- Java中`goto`是保留字,但并未实现此关键字,因此不能在代码中使用。
7. **引用类型与原始类型**:
- 引用类型(如`Integer`)是对象的引用,而原始类型(如`int`)是直接存储值。引用类型支持`null`,并且提供了额外的面向对象特性,如方法调用。
- 在内存管理上,原始类型存储在栈中,而封装类对象存储在堆中。
8. **内存管理与垃圾回收**:
- Java使用垃圾回收机制自动管理内存,当一个对象不再被引用时,垃圾回收器会释放其占用的内存。
- 对于原始类型,它们直接存储在栈中,生命周期短,随着变量的作用域结束自动回收。
- 封装类对象存储在堆中,当没有引用指向它时,垃圾回收器会在合适时机回收。
这些知识点是Java程序员必备的基础,不仅在面试中常见,也是日常开发中的关键概念。理解并掌握它们对于编写高效、可靠的Java代码至关重要。在复习时,不仅要理解概念,还要通过实践加深理解,例如编写代码示例、解决实际问题等。