"Java面试宝典2014版"
本书是一部针对Java程序员面试精心编写的指南,涵盖了众多Java基础知识及进阶话题。以下是一些关键知识点的详细解释:
1. **一个.java源文件中的类数量**:一个.java文件可以包含多个类,但只能有一个公开的(public)类,其他类可以是非公开的。这些类必须符合包命名规则,并且如果包含公共类,文件名应与该公共类的名称一致。
2. **Java没有goto语句**:Java语言设计中摒弃了goto,以提高代码的可读性和可维护性,鼓励使用结构化编程思想。
3. **&和&&的区别**:&是逻辑与运算符,无论两边条件如何都会进行运算;而&&是短路与运算符,如果左边的条件为假,右边的条件将不会被执行。
4. **跳出多重嵌套循环**:在Java中,可以使用`break label;`来跳出指定标签的循环,或者使用`return`语句结束当前方法并返回到调用者。
5. **switch语句的使用**:switch不能直接作用于byte、long和String类型,但在Java 7及以上版本中,可以使用String进行switch匹配。
6. **short变量的赋值问题**:`short s1 = 1; s1 = s1 + 1;` 这里会出现类型提升,s1+1的结果会转换为int类型,需要显式强制转换回short。而`s1 += 1;`则是合法的,因为编译器会自动处理类型转换。
7. **char型变量与中文字符**:char变量可以存储单个Unicode字符,包括中文汉字,因为它占据两个字节。
8. **效率计算2的8次方**:最有效的方法是使用位运算符:`int result = 1 << 8;`
9. **设计大整数计算器**:需要考虑使用String或BigInteger类来处理大数运算,以避免整数溢出。
10. **final关键字**:final修饰的变量其引用不可变,意味着一旦赋值就不能改变;如果是引用类型的final变量,其指向的对象内容可以改变,但不能指向其他对象。
11. **"=="与equals的区别**:"=="比较的是对象的引用,而equals()方法比较的是对象的内容(默认行为,可以被重写)。
12. **静态变量与实例变量**:静态变量属于类,所有实例共享;实例变量属于对象,每个实例有自己的副本。
13. **static方法与非static方法**:static方法不能直接访问非static成员,因为非static成员依赖于特定的实例。
14. **Integer与int**:Integer是int的封装类,提供了更多功能,如缓存、比较等;int是原始类型,效率更高。
15. **Math.round()**:Math.round(11.5)返回12,Math.round(-11.5)返回-11。
16. **代码错误分析**:根据给出的代码片段分析可能存在的问题。
17. **访问修饰符的区别**:public表示公共的,可以在任何地方访问;private表示私有的,只能在同一个类中访问;protected表示受保护的,可以被同一包内的类和子类访问;默认(无修饰符)则只允许同包内的访问。
18. **重载(Overload)与覆盖(Override)**:重载是指在同一类中定义多个同名方法,但参数列表不同;覆盖是指子类重写父类的同名方法,保持方法签名相同。
19. **构造器不可被覆盖**:构造器不能被重写(override),但可以被重载。
20. **接口与抽象类**:接口可以继承接口;抽象类可以实现接口;抽象类可以继承具体类,但具体类不能继承抽象类;抽象类中可以有静态的main方法,但无法运行。
21. **clone()方法**:在编写clone()方法时,通常会包含`super.clone()`调用以实现对象复制。
22. **面向对象特征**:包括封装、继承、多态。
23. **Java多态机制**:通过方法重写(Override)和向上转型(Upcasting)实现。
24. **抽象类与接口**:抽象类可以有非抽象方法和字段,可以作为其他类的基类;接口只有方法声明,不允许有实现,可以多继承。
25. **抽象方法与静态、native、synchronized**:抽象方法不能是static、native或synchronized,因为它们与抽象方法的定义相冲突。
26. **内部类**:内部类是定义在另一个类内部的类,分为静态嵌套类(Static Nested Class)和非静态嵌套类(Inner Class)。静态嵌套类像普通类一样,非静态嵌套类需要外部类实例才能创建。
27. **内部类与外部类的成员访问**:内部类可以直接访问外部类的所有成员,包括私有成员,而外部类需要通过内部类实例来访问内部类的成员。
28. **A“...”**:这部分内容未给出,可能是被截断了。通常“...”表示还有更多内容或待补充的知识点。
以上是Java面试宝典2014版中的一些核心概念和问题,掌握这些知识点有助于Java程序员在面试中表现优秀。