"Java面试宝典包含了初级Java程序员面试中常遇到的问题,涵盖了Java语言的基础、语法、特性等多个方面,旨在帮助求职者准备面试。"
在Java面试中,以下几个知识点经常出现,是理解Java语言的关键:
1. **Java源文件与类的关系**:一个`.java`源文件可以包含多个类,但只能有一个公共类(public class),且公共类的名字必须与文件名相同。
2. **goto关键字**:Java中没有`goto`关键字,它不支持这种跳转语句。
3. **逻辑运算符&和&&**:`&`是按位与运算符,而`&&`是逻辑与运算符。在布尔表达式中,`&&`具有短路特性,只有当左侧表达式为真时才会评估右侧。
4. **跳出多重循环**:使用`break`语句可以跳出最内层循环,`break label;`则可以跳出标记的循环。
5. **switch语句的适用范围**:switch可以作用于`byte`, `char`, `short`, `int`, `枚举类型`和`String`(JDK 1.7及以上版本)。
6. **short变量的加法**:直接赋值`s1=s1+1`会导致数据溢出,因为结果会自动提升为int类型。而`s1+=1`会自动转换回short类型,因此正确。
7. **char存储中文**:char类型在Java中占两个字节,可以存储一个中文字符。
8. **计算2乘以8**:最有效率的方式是`2 << 3`,利用位移操作符。
9. **设计大数计算器**:考虑使用BigInteger类处理大规模计算。
10. **final关键字**:final修饰的变量其引用不可变,即一旦赋值,不能再指向其他对象;如果修饰基本类型,则数值不可变。
11. **"=="与equals方法**:"=="比较的是对象的引用,而equals方法比较的是对象的内容(除非重写)。
12. **静态变量与实例变量**:静态变量属于类,实例变量属于对象。静态变量在类加载时初始化,实例变量在对象创建时初始化。
13. **静态方法与非静态方法**:不能从静态方法内部直接调用非静态方法,因为静态方法属于类,而非静态方法属于对象。
14. **Integer与int**:Integer是int的包装类,存在自动装箱拆箱。Integer对象在一定范围内有缓存,而int是原始类型。
15. **Math.round方法**:Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. **代码不妥之处**:通常涉及代码的异常处理、变量初始化、效率优化等方面,需要具体代码分析。
17. **访问修饰符的区别**:public(公开)对所有类可见,private(私有)只在本类中可见,protected(受保护)在同一包内及子类可见,不写(默认)则在同一包内可见。
18. **重载与重写**:重载是方法名相同但参数列表不同,不改变返回类型。重写是子类重新实现父类的方法,方法名、参数列表和返回类型必须完全一致。
19. **构造器不可覆盖**:构造器不能被重写(override),但可以被重载。
20. **接口与继承**:接口可以继承接口,抽象类可以实现接口,但不能继承具体类。静态的main方法不属于任何对象,所以抽象类中可以有静态main方法。
21. **clone方法**:通常会包含`super.clone()`来实现浅复制。
22. **面向对象特征**:封装、继承、多态。
23. **Java中的多态**:通过方法重写(Override)和向上转型实现。
24. **abstractclass和interface的区别**:抽象类可以有非抽象方法和实例变量,接口只能有抽象方法和默认方法,不能有实例变量。
25. **abstract、static、native、synchronized的组合**:抽象方法不能是static或native,也不能是synchronized。
26. **内部类**:内部类是定义在另一个类中的类,分为静态嵌套类(StaticNestedClass)和非静态嵌套类(InnerClass)。静态嵌套类与外部类之间没有实例关联,而内部类可以直接访问外部类的成员。
27. **内部类与外部类的交互**:内部类可以访问外部类的所有成员,包括私有成员,但外部类不能直接访问内部类的私有成员。
28. **匿名内部类**:没有名字的内部类,通常用于快速实现一个接口或继承一个类的简短代码。
这些知识点只是Java面试中的一部分,理解并掌握它们能为面试者提供坚实的基础。