"Java面试宝典"
这是一本专注于Java面试准备的指南,涵盖了Java语言的基础到高级概念,包括语法、面向对象特性、类与对象、接口、内部类、异常处理等多个方面。以下是对其中一些重点知识点的详细解释:
1. Java源文件中的类数量:一个.java文件可以包含多个类,但只能有一个公共类(public class),其他类可以是非公共的(如private或默认访问级别)。
2. goto关键字:Java中没有goto关键字,它不符合Java的面向对象编程理念,因此不被支持。
3. &和&&的区别:&是位运算符,用于按位与操作;&&是逻辑与运算符,只有当两边的表达式都为真时,结果才为真。在短路逻辑中,如果左侧为假,右侧的表达式将不会被评估。
4. 跳出多重嵌套循环:可以使用break语句跳出最内层循环,使用label + break可以跳出指定的循环。
5. switch语句的使用:switch可以作用于byte、char、short和int,以及枚举类型(JDK 5.0后)。在Java 7及以上版本,switch还可以作用于字符串(String)。
6. short变量的加法问题:在原始类型中,赋值表达式s1=s1+1会自动提升为int类型,需要强制转换回short,否则编译错误;而s1+=1是合法的,因为编译器会自动处理类型转换。
7. char类型与中文字符:char类型可以存储单个Unicode字符,包括中文汉字。
8. 2乘以8的最有效率计算:可以直接写成2 * 8,Java会自动进行计算。
9. 一百亿的计算器设计:在Java中,可以使用BigDecimal类来处理大数值计算,以避免精度丢失。
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是重写,子类方法覆盖父类方法,方法名和参数列表必须完全相同。
19. 构造器不能被override,但可以重载。
20. 接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法。
21. clone()方法:通常包含`super.clone()`调用以创建对象的浅复制。
22. 面向对象的特征:封装、继承、多态。
23. 多态的机制:通过方法的重写(Override)和向上转型(Upcasting)实现。
24. abstractclass与interface的区别:抽象类可以有非抽象方法和字段,可以实现多继承;接口只能有抽象方法和常量,实现多继承。
25. abstract、static、native和synchronized的组合:abstract不能与static、native、synchronized一起使用,因为它们代表不同的概念和设计原则。
26. 内部类:内部类是定义在一个类内部的类,分为静态嵌套类(StaticNestedClass)和非静态嵌套类(InnerClass)。静态嵌套类不持有外部类的引用,而内部类则可以直接访问外部类的私有成员。
27. 内部类与外部类的成员:内部类可以访问外部类的所有成员,包括私有成员,但外部类只能通过内部类实例访问内部类的非静态成员。
28. A类的实例能否调用B类的静态成员:可以,因为静态成员属于类而不是对象,可以用类名直接调用。
以上只是部分内容的解析,完整的学习和理解Java面试宝典还需要深入阅读和实践。