### IT企业面试题知识点解析
#### 一、final, finally, finalize
- **final**: 在Java中,`final`关键字可以用于变量、方法和类。当一个类被声明为final时,它不能被继承;当一个方法被声明为final时,它不能在子类中被重写;当一个变量被声明为final时,则该变量不可变,对于基本类型来说一旦赋值就不能改变,对于引用类型来说一旦指向某个对象后就不能再指向其他对象。
- **finally**: `finally`块通常与`try-catch`结构一起使用,用来确保无论是否发生异常,其中的代码都能被执行。这非常适用于释放资源等操作。
- **finalize**: `finalize`方法是Object类中的一个方法,用于垃圾回收机制中。当对象即将被回收时,系统会自动调用该对象的`finalize`方法进行清理工作。需要注意的是,`finalize`方法的执行不是强制性的,而且自JDK 9起,其使用已被弃用。
#### 二、匿名内部类(Anonymous Inner Class)
- **定义**: 匿名内部类是一种特殊的内部类,没有名称且只能出现一次。它们经常用于实现接口或者继承抽象类,并立即实例化。
- **特点**:
- 没有构造器,因为无法独立实例化。
- 可以实现接口或继承父类。
- 能够访问外部类的所有成员变量(包括私有的)。
#### 三、Collection与Collections
- **Collection**: Java集合框架的基础接口之一,代表一组对象的集合。
- **Collections**: 提供了一系列静态方法,用于对集合进行操作,如排序、查找等。
#### 四、assert断言
- **作用**: 主要用于开发过程中的调试,帮助检查程序运行时是否满足某些条件。
- **语法**:`assert 条件 : 附加信息;`
#### 五、GC(Garbage Collection)
- **概念**: 垃圾收集机制是自动内存管理的一部分,负责自动回收不再使用的对象所占用的内存空间。
- **目的**:提高内存利用率,避免内存泄漏等问题。
#### 六、String对象
- **创建方式**:`String s = new String("xyz");`
- **特性**:字符串是不可变的(immutable),这意味着一旦创建了String对象,其内容就不能更改。
#### 七、Math.round()函数
- **Math.round(11.5)**:返回12。
- **Math.round(-11.5)**:返回-11。
#### 八、short类型的运算
- **短整型加法**:`short s1 = 1; s1 = s1 + 1;` 此时编译错误,因为`s1 + 1`的结果默认为int类型,需要显式转换为short类型。
- **短整型自增运算**:`short s1 = 1; s1 += 1;` 正确,因为自增运算符会自动进行类型转换。
#### 九、sleep()与wait()
- **Thread.sleep()**:让当前线程暂停指定的时间,不释放锁。
- **Object.wait()**:让当前线程等待,直到其他线程通知或中断为止,释放锁。
#### 十、Java中有goto语句吗?
- **答案**:Java中没有传统的`goto`语句。
#### 十一、length属性
- **数组长度**:数组有`length`属性,用于获取数组的长度。
- **字符串长度**:`String`类也有`length()`方法,用于获取字符串的长度。
#### 十二、重载(Overload)与重写(Override)
- **Overload**:同一个类中多个同名方法,但参数列表不同。
- **Override**:子类重写父类的方法,需要方法签名完全一致。
#### 十三、Set集合的特点
- **元素唯一性**:Set集合不允许重复元素。
- **equals()与==**:`equals()`方法用于比较两个对象的内容是否相同,而`==`比较的是对象的引用是否相等。
#### 十四、RuntimeException异常
- **特点**:属于非受检异常,无需显示捕获或声明抛出。
- **常见类型**:如`NullPointerException`、`ArrayIndexOutOfBoundsException`等。
#### 十五、Error与Exception的区别
- **Error**:表示系统级错误,一般不由程序处理。
- **Exception**:表示程序可处理的异常情况。
#### 十六、List, Set, Map与Collection的关系
- **List/ Set/ Map**:都是`Collection`接口的子接口或实现类。
- **Collection**:所有这些集合的父接口,提供了基本的集合操作方法。
#### 十七、抽象类与接口的区别
- **抽象类**:可以包含抽象方法和具体方法,可以拥有状态。
- **接口**:只包含抽象方法,用于定义行为规范。
#### 十八、抽象方法能否同时具有static、native、synchronized修饰符
- **不能**:抽象方法不能同时被`static`、`native`、`synchronized`修饰。
- **原因**:这些修饰符与抽象方法的语义冲突。
#### 十九、抽象类与接口的实现细节
- **抽象类**:可以被继承。
- **接口**:通过`implements`关键字实现。
- **具体类**:实现了接口的具体类。
#### 二十、run()与start()方法
- **run()**:线程执行体,包含线程执行的逻辑。
- **start()**:启动线程,自动调用`run()`方法。
#### 二十一、构造器能否被重写?
- **不能**:构造器不能被重写,因为它们不是继承的一部分。
#### 二十二、String对象是否可变?
- **不可变**:String对象一旦创建后不可改变。
#### 二十三、同步代码块是否总是安全的?
- **安全**:使用`synchronized`关键字确保线程安全,但需注意性能问题。
#### 二十四、try-finally与return语句
- **finally块执行**:即使`try`块中有`return`语句,`finally`块也会在`return`前执行。
#### 二十五、位运算结果
- **位运算**:例如`28`的二进制表示为`11100`,按位取反后变为`00011`,即3。
#### 二十六、equals()与hashCode()的关系
- **关系**:如果两个对象的`equals()`方法返回`true`,则它们的`hashCode()`也应返回相同的值。
#### 二十七、volatile关键字的作用
- **作用**:确保多线程环境下的可见性和有序性。
- **应用场景**:常用于状态标记和单例模式的懒汉式实现。
#### 二十八、switch语句支持的数据类型
- **支持类型**:`byte`、`char`、`short`、`int`以及它们对应的包装类。
- **不支持类型**:`long`、`float`、`double`。
- **支持字符串**:从Java 7开始,`switch`语句支持字符串。
#### 二十九、Singleton模式的实现
- **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。
- **实现方式**:常用的有饿汉式、懒汉式(双重检查锁定)、静态内部类等。