### Java历届面试题知识点详解 #### 一、作用域关键字(public, private, protected, friendly) **作用域关键字**在Java中用于控制类成员(如字段、方法等)的可见性和可访问性。 - **public**: 最大范围的访问级别,可以在任何地方访问。 - **protected**: 在同一包内或者子类可以访问。 - **friendly(默认)**: 仅在同一包内的类可以访问,未明确指定访问修饰符时,默认为friendly。 - **private**: 只能在当前类中访问。 | 访问级别 | 当前类 | 同一package | 子孙类 | 其他package | |---------|--------|-------------|--------|-------------| | public | √ | √ | √ | √ | | protected | √ | √ | √ | × | | friendly | √ | √ | × | × | | private | √ | × | × | × | #### 二、匿名内部类(Anonymous Inner Class) **匿名内部类**是一种特殊的内部类,它没有显式的类名,通常用于简化代码,特别是在事件监听器中非常常见。 - **特点**: - **无法继承**: 由于匿名内部类没有类名,因此不能声明为继承其他类。 - **可以实现接口**: 匿名内部类可以实现一个或多个接口。 #### 三、静态内部类(Static Nested Class)与普通内部类(Inner Class) **静态内部类**与**普通内部类**的主要区别在于它们对外部类的访问能力以及实例化的条件。 - **静态内部类**: - 不需要外部类的实例即可创建。 - 不能直接访问外部类的非静态成员。 - **普通内部类**: - 创建时需要外部类的实例。 - 可以直接访问外部类的所有成员。 #### 四、`&` 和 `&&` 的区别 - **&**: 位运算符,用于按位逻辑运算。 - **&&**: 逻辑运算符,用于布尔表达式的逻辑与操作,并具有短路特性。 #### 五、`Collection` 和 `Collections` 的区别 - **Collection**: 是所有单列集合类的根接口,例如`Set`和`List`。 - **Collections**: 是一个工具类,提供了许多静态方法来操作集合类。 #### 六、何时使用 `assert` **assert** 用于调试目的,在开发阶段可以帮助开发者检测假设是否成立。当`assert`表达式为`false`时,系统会抛出`AssertionError`。 #### 七、字符串对象创建 - **示例**: ```java String s = new String("xyz"); ``` - **创建对象数量**: 2个,一个是字符串常量池中的"xyz",另一个是通过`new String()`创建的对象。 #### 八、`Math.round` 方法 - **示例**: ```java Math.round(11.5); // 结果为12 Math.round(-11.5); // 结果为-11 ``` - **原理**: `Math.round()`方法首先将参数加0.5,然后向下取整。 #### 九、类型转换问题 - **示例**: ```java short s1 = 1; s1 = s1 + 1; // 编译错误 s1 += 1; // 正确 ``` - **原因**: `s1 + 1`的结果类型默认为`int`,需要强制类型转换。 - **解决方案**: 使用复合赋值运算符`+=`,可以自动处理类型转换。 #### 十、`goto` 关键字 - **Java中**的`goto`是保留字,但在实际编程中并未使用。 #### 十一、数组和字符串的长度属性 - **数组**: 没有`length()`方法,但有`length`属性。 - **字符串**: 有`length()`方法。 #### 十二、方法的重写(Override)和重载(Overload) - **重写(Override)**: 发生在子类与父类之间,方法签名相同。 - **重载(Overload)**: 发生在一个类中,方法名相同但参数列表不同。 #### 十三、`Set` 中元素的唯一性 - **方法**: - `equals()`用来判断两个对象是否相等。 - `hashCode()`用于生成散列码,`equals`方法和`hashCode`方法应该保持一致性。 - **实现**: - `Set`通过`equals()`方法来判断元素是否重复。 #### 十四、常见运行时异常(RuntimeException) - **示例**: - `ArithmeticException`: 算术异常。 - `NullPointerException`: 对象引用为空时发生的异常。 - 更多异常类型如`ArrayIndexOutOfBoundsException`等。 #### 十五、`Error` 和 `Exception` 的区别 - **Error**: 通常是不可恢复的错误,比如内存溢出等。 - **Exception**: 可以被捕获并处理的异常。 #### 十六、`List`, `Set`, `Map` 是否继承自 `Collection` 接口 - **`List` 和 `Set`**: 继承自 `Collection` 接口。 - **`Map`**: 并不继承自 `Collection` 接口。 #### 十七、`abstract class` 和 `interface` 的区别 - **`abstract class`**: 可以包含构造函数、字段、抽象方法和具体方法。 - **`interface`**: 提供了一种实现多重继承的方式,只能包含抽象方法和默认方法(Java 8及以上版本),以及常量字段。 - **区别**: - `interface` 可以被多个类实现,而`abstract class`只能被一个类继承。 - `interface`中的方法默认是`public`的,而`abstract class`中的方法可以是任何访问级别。
剩余29页未读,继续阅读
- 粉丝: 6
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助