Java面试全攻略:基础题与进阶挑战

需积分: 3 1 下载量 149 浏览量 更新于2024-07-27 收藏 628KB DOC 举报
"这是一份全面的Java面试复习资料,涵盖了基础到高级的Java知识,旨在帮助准备面试的人员巩固和提升Java技能。" 在Java编程语言中,掌握好基础知识和核心概念对于开发者来说至关重要。这份复习资料包含了多个关键知识点,以下是其中的一些详细解释: 1. **一个.java源文件中的类限制**:一个.java源文件可以包含多个类,但只能有一个公共类(public class),其他类可以是非公共类(如private或默认访问修饰符的类)。 2. **Java中无goto语句**:Java语言设计时摒弃了goto,以支持更清晰的控制流。 3. **&与&&的区别**:&是逻辑与运算符,无论两侧表达式是否为真都会进行计算;而&&是短路与运算符,如果左侧表达式为假,右侧表达式将不会被执行。 4. **跳出多重嵌套循环**:使用`break`语句可以跳出最内层的循环,`return`可以结束整个方法并返回值,从而间接跳出所有循环。 5. **switch语句的使用**:switch不能直接作用于byte、long和String,但在Java 7及以上版本,可以使用`switch`与`String`配合。 6. **short变量加法问题**:直接赋值`s1=s1+1`会自动提升为int类型,可能会导致数据溢出,因此需要强制类型转换。而`s1+=1`则会自动处理类型提升和转换。 7. **char存储中文**:char类型在Java中占用两个字节,可以存储一个中文字符。 8. **效率计算2乘以8**:最直接的方式是`2 << 3`,利用位移运算,高效且直观。 9. **设计大数计算器**:需考虑如何高效处理大整数,可能涉及到字符串处理、数组存储、自定义算法等。 10. **final关键字**:final修饰的变量其引用不可变,即不能指向其他对象,但引用的对象内容可以改变(如果对象是可变的)。 11. **"=="与equals的区别**:"=="比较的是对象的引用,而equals比较的是对象的内容。 12. **静态变量与实例变量**:静态变量属于类,而实例变量属于类的实例。静态变量被所有实例共享,实例变量在每个实例中都有独立副本。 13. **从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**:Overload是重载,方法名相同但参数列表不同;Override是重写,子类方法覆盖父类同名同参的方法。Overloaded方法不能改变返回值类型。 19. **构造器不能被override**:构造器不是方法,不能被重写,但可以重载。 20. **接口继承接口**:接口可以继承接口。抽象类可以实现接口,但抽象类不能继承具体类。抽象类可以有静态的main方法,但不能运行。 21. **clone方法**:在实现Cloneable接口的类中,通常需要覆写`clone()`方法,并调用`super.clone()`以创建新对象。 22. **面向对象特征**:封装、继承、多态。 23. **Java中多态的实现**:通过接口、抽象类和方法的覆盖来实现多态性。 24. **abstractclass与interface的区别**:抽象类可以有方法实现,而接口全部是抽象方法;一个类只能继承一个抽象类,但可以实现多个接口。 25. **abstract、static、native、synchronized组合**:abstract不能与static和native同时使用,也不能与synchronized同时使用。 26. **内部类**:内部类是定义在另一个类中的类,分为静态嵌套类(StaticNestedClass)和非静态内部类(InnerClass)。前者不持有对外部类的引用,后者可以直接访问外部类的成员。 27. **内部类与外部类成员的引用**:内部类可以引用外部类的所有成员,包括私有成员,但外部类不能直接引用内部类的私有成员。 28. **匿名内部类**:没有类名的内部类,通常用于快速实现一个接口或继承一个类,可以简化代码,但不能被其他地方引用。 这些知识点的深入理解和掌握将有助于提升Java开发者的专业水平,为面试和实际开发工作做好充分准备。