Java编程语言在面试和笔试中经常涉及众多核心概念和特性,以下是对提供的部分知识点的详细解释:
1. **作用域**:
- `public`:任何地方都可以访问。
- `private`:只能在同一个类中访问。
- `protected`:在同一个包内和子类中可以访问。
- `friendly`(默认):在同一包内可以访问,不适用于Java,但在C++中对应的是包访问权限。
- 不写作用域修饰符:默认为friendly,即包级私有。
2. **匿名内部类**:
- 可以实现接口,但不能继承其他类。
- 匿名内部类主要用于创建一次性使用的简单类。
3. **静态嵌套类(Static Nested Class)与内部类(Inner Class)**:
- 静态内部类不需要外部类的实例就可以创建对象。
- 非静态内部类需要一个外部类的实例来创建对象,并且可以直接访问外部类的成员,包括私有成员。
- 静态内部类不能直接访问外部类的非静态成员。
4. **位运算符"&"与逻辑运算符"&&"**:
- "&"是位运算符,对两个操作数的每个位进行逐位与运算。
- "&&"是逻辑运算符,只有当左侧表达式为真时才会计算右侧表达式,常用于短路逻辑。
5. **Collection与Collections**:
- `Collection`是所有集合框架的顶级接口,包括`List`和`Set`。
- `Collections`是一个工具类,提供了多种集合操作的静态方法,如排序、搜索、线程安全化等。
6. **断言(Assertion)**:
- 用于调试,用于在开发阶段确保程序关键部分的正确性。
- 通常在开发和测试时启用,发布时关闭,以提高性能。
7. **字符串对象创建**:
- `String s = new String("xyz");`创建了两个对象:一个字符数组对象和一个指向它的`String`对象。
8. **Math.round()**:
- `Math.round(11.5)`等于12,因为它向上取整至最接近的整数。
- `Math.round(-11.5)`等于-11,同样地,它向下取整。
9. **短整型变量加法**:
- `short s1 = 1; s1 = s1 + 1;`错误,因为`s1 + 1`的结果是`int`型,需要显式转换。
- `short s1 = 1; s1 += 1;`正确,编译器会自动处理类型转换。
10. **goto关键字**:
- Java中没有`goto`关键字,它是保留字,但未被使用。
11. **length()方法**:
- 数组没有`length()`方法,但有`length`属性。
- `String`类有`length()`方法,用于获取字符串的长度。
12. **重载(Overloading)与覆盖(Overriding)**:
- 重载发生在同一类中,方法名相同但参数列表不同(数量、类型或顺序)。
- 覆盖发生在父类与子类之间,方法名、参数列表完全相同,但子类方法的访问权限不能更低,返回类型也不能改变(除非是void)。
13. **Set的重复检测**:
- 使用`equals()`方法来判断元素是否重复,因为`==`比较的是对象的引用,而`equals()`比较的是对象的内容。
- 在Set中,`add()`方法会通过`equals()`来检查添加的元素是否已存在。
以上是Java笔试题中常见的知识点,涵盖了作用域、匿名类、内部类、运算符、集合框架、断言、字符串对象、数学函数、变量类型转换、控制流以及方法重载和覆盖等多个方面。理解和掌握这些知识点对于提升Java编程能力至关重要。