Java面试必备:基础题详解

需积分: 10 0 下载量 106 浏览量 更新于2024-07-23 收藏 560KB PDF 举报
"Java面试题" Java面试题涵盖了广泛的基础知识,包括语法、数据类型、类与对象、封装、继承、多态、接口、异常处理、内存管理等多个方面。以下是一些核心知识点的详解: 1. **Java源文件与类的关系**:一个.java源文件可以包含多个类,但只能有一个公共类(public class),且该公共类的名称必须与文件名相同。 2. **Java中的goto**:Java中没有goto关键字,它遵循结构化编程原则,推崇使用流程控制语句如if、while、for和switch等。 3. **& 和 && 的区别**:& 是位运算符,用于按位与操作;&& 是逻辑运算符,用于逻辑与,只有当两边的操作数都为真时结果才为真,具有短路特性。 4. **跳出多重嵌套循环**:使用`break`语句可以直接跳出最外层循环,而`return`不仅可以跳出循环,还可以结束整个方法的执行。 5. **switch 语句**:switch可以作用在byte、char、short和int上,Java 7以后还可以作用于枚举类型,但不能作用于long和String,Java 14以后引入了switch表达式,可以用于字符串。 6. **short变量的赋值问题**:直接使用`=+`赋值会涉及类型提升,可能会导致溢出,因此`s1=s1+1`可能错误;而`s1+=1`则会自动转换为整型进行计算,然后赋值回short类型,避免溢出。 7. **char存储中文**:char类型可以存储单个Unicode字符,因此可以存储中文,每个中文字符占用两个字节。 8. **计算2乘以8**:最有效率的方式是直接使用`2 << 3`,利用位移运算。 9. **设计大数计算器**:要设计一个能处理大数的计算器,可以使用StringBuilder或String来存储数字,然后实现加减乘除等运算。 10. **final关键字**:final修饰的变量,其引用一旦初始化后不可改变,但如果是对象,对象内的属性仍然可以改变。 11. **"=="与equals的区别**:"=="比较的是对象的引用,而equals方法比较的是对象的内容,对于基本类型,两者效果相同,但对于对象,需要重写equals方法以比较对象内容。 12. **静态变量与实例变量**:静态变量属于类,生命周期始于类加载,终于类卸载;实例变量属于对象,生命周期始于对象创建,终于对象销毁。 13. **静态方法与非静态方法**:不能从静态方法内部直接调用非静态方法,因为静态方法不依赖任何对象实例,而非静态方法需要对象实例。 14. **Integer与int**:Integer是int的包装类,用于对象形式的操作,它们之间存在自动装箱拆箱,Integer对象的缓存范围是-128到127。 15. **Math.round**:Math.round(11.5)等于12,Math.round(-11.5)等于-11,round方法四舍五入到最接近的整数。 16. **代码不妥之处**:这部分没有给出具体代码,所以无法分析,但常见的不妥之处可能包括语法错误、逻辑错误或潜在的性能问题。 17. **访问修饰符的区别**:public可以被所有类访问,private只能在本类中访问,protected可以在同一包内及子类中访问,无修饰符默认为包级私有。 18. **Overload与Override**:Overload是重载,发生在同一个类中,方法名相同但参数列表不同;Override是重写,发生在子类对父类方法的覆盖,要求方法名、返回类型和参数列表完全一致。 19. **构造器是否可被override**:构造器不能被override,但可以被重载。 20. **接口与继承**:接口可以继承接口,抽象类可以实现接口,但抽象类不能继承具体类(除非使用JDK 8的菱形继承);静态的main方法不能在抽象类中作为程序入口,因为抽象类不能实例化。 21. **clone方法**:通常在实现clone方法时,会调用`super.clone()`来复制对象。 22. **面向对象的特征**:封装、继承、多态。 23. **Java中实现多态的机制**:通过方法的重写(Override)和方法的重载(Overload),以及接口的实现。 24. **abstractclass和interface的区别**:抽象类可以有方法实现,可以有非抽象方法,可以有构造器,可以有字段;接口只能声明方法,不能有实现,字段默认为public static final。 25. **abstract、static、native和synchronized**:抽象方法不能是static或native,也不能是synchronized。 26. **内部类**:内部类是定义在另一个类内部的类,分为静态嵌套类(StaticNestedClass)和非静态嵌套类(InnerClass)。静态嵌套类没有隐含的对外部类的引用,而内部类则有。 27. **内部类与外部类的引用**:内部类可以直接访问外部类的所有成员,包括私有成员,但外部类不能直接访问内部类的私有成员,需通过内部类对象。 28. **匿名内部类**:可以继承其他类或实现接口,通常用于一次性使用的简短类实现。 29. **super关键字**:super用于调用父类的构造器、方法或字段,这里省略了具体问题,通常涉及子类与父类之间的关系处理。 这些知识点是Java开发者应具备的基本功,掌握好这些将有助于在面试中表现出色。