"这是一份全面的Java面试题集,涵盖了Java基础知识,包括类与对象、语法特性、数据类型、运算符、流程控制、方法、类与对象的生命周期、访问修饰符、重载与覆盖、接口与抽象类等多个方面。这份文档旨在帮助面试者准备Java相关职位的面试,提升对Java语言深入理解的能力。"
1. 一个".java"源文件中可以包含多个类,但只能有一个公开的类(public class),其他类可以是非公开的(如private或无访问修饰符)。
2. Java中没有goto语句,它遵循结构化编程的原则,鼓励使用循环和函数来替代goto的功能。
3. &是按位与操作符,&&是逻辑与操作符。前者对两个操作数的二进制位进行逐位与运算,后者在判断逻辑表达式时,如果第一个操作数为假,则不会评估第二个操作数。
4. 要跳出多重嵌套循环,可以使用break语句配合标签(label)来实现。例如:`outer: for (...) { inner: for (...) { ... break outer; } }`
5. switch语句可以作用于byte、char、short和int类型,Java 7以后还可以作用于枚举类型。不能直接作用于long和String,但可以通过包装类(如Long和String)间接使用。
6. 在shorts1 = 1; s1 = s1 + 1; 这一行,会自动提升为int类型,所以s1将变为int类型,而不是short。而s1 += 1; 是复合赋值操作符,会自动处理类型转换,保持s1为short类型。
7. char型变量可以存储一个中文汉字,因为UTF-16编码的中文字符占据两个字节。
8. 计算2乘以8最有效率的方法是直接写出结果,即2 * 8 = 16。
9. 设计一个一百亿的计算器,需要考虑大数运算,可以使用BigInteger类来处理超过int和long范围的数值。
10. 使用final关键字修饰变量,意味着变量的引用一旦初始化后不能改变,但如果是对象引用,对象的内容可以改变。
11. "=="比较的是变量的值,而equals()方法比较的是对象的内容。对于基本类型,两者等价;对于对象,"=="比较的是两个对象的内存地址,equals()比较的是对象的内容(默认行为)或重写后的比较逻辑。
12. 静态变量属于类,实例变量属于类的每个实例。静态变量被所有实例共享,实例变量在每个实例中都有独立的副本。
13. 不可以从static方法内部直接调用非static方法,因为非static方法依赖于实例对象,而static方法与实例对象无关。
14. Integer是int的包装类,它们之间的主要区别在于Integer是对象,int是原始类型。Integer提供了额外的方法,如compareTo(),而int则没有。
15. Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. 下面的代码可能不妥之处在于可能会抛出空指针异常,如:`Object obj = null; obj.toString();`
17. public表示全局可访问,private仅限本类访问,protected允许同包和子类访问,不写时默认为包级私有(package-private)。
18. Overload是重载,可以改变参数列表,但不能改变返回类型;Override是重写,必须保持方法签名一致。
19. 构造器Constructor不能被override,但可以被重载。
20. 接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类,但抽象类中的main方法必须声明为static,否则不能作为程序入口。
21. 写clone()方法时,通常会包含`super.clone()`来创建对象的副本。
22. 面向对象的特征包括封装、继承、多态。
23. Java中实现多态的机制是通过方法重写(Override)和接口实现(Implements)。
24. abstractclass是抽象类,可以有方法实现,而interface是完全抽象的,所有的方法默认都是abstract。抽象类可以有构造器,接口没有。
25. abstract不能与static、native、synchronized同时使用,因为它们的性质和用途不兼容。
26. 内部类(Inner Class)是定义在另一个类内部的类,分为静态内部类(Static Nested Class)和其他内部类。静态内部类不依赖外部类的实例,而其他内部类需要外部类实例才能创建。
27. 内部类可以引用其包含类的成员,包括私有成员,但不能访问静态成员,除非通过外部类实例。
28. 匿名内部类(Anonymous Inner Class)是没有名字的内部类,通常用于实现接口或继承类,并且只用一次的情况。