"这是一个关于Java编程语言的综合知识集合,涵盖了2014年面试中常见的问题和重要概念,适合初级开发者学习和准备面试。"
在Java编程中,掌握基础和核心概念至关重要。以下是一些关键知识点的详细解释:
1. 一个.java源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开的(如private或默认包访问级别)。主要限制是主类(即包含main方法的类)必须是公开的,且源文件名需与主类名一致。
2. Java中没有goto语句,它鼓励使用结构化编程,避免了无尽的跳转可能导致的混乱。
3. &和&&的主要区别在于短路逻辑:&是按位与运算符,而&&是逻辑与运算符,后者只有在左侧表达式为真时才会评估右侧表达式。
4. 跳出多重嵌套循环,可以使用标签(label)配合break语句。例如:`outer: for (...) { inner: for (...) { ... break outer; } }`
5. switch语句不能作用于byte,但自从Java 7起,可以作用于枚举类型。在Java 8及以上版本,switch还可以作用于字符串(String)。
6. 对于short s1 = 1; s1 = s1 + 1; 这样的代码,会有编译错误,因为s1 + 1的结果会自动提升为int类型,需要强制转换为short。而s1 += 1; 则会自动处理类型转换,是合法的。
7. char类型可以存储一个中文汉字,因为一个中文汉字在Unicode编码中占两个字节,正好符合char类型的大小。
8. 计算2乘以8最有效率的方式是直接使用`2 * 8`,因为这是编译器优化后的基础运算。
9. 设计一个能处理一百亿的计算器要考虑数据类型的选择,可能需要使用BigInteger类来处理大整数。
10. 使用final关键字修饰变量时,意味着该引用一旦赋值后就不能再改变,但引用的对象内容可以改变。如果对象本身也是final的,那么整个对象都是不可变的。
11. "=="比较的是变量的值,而equals()方法比较的是对象的内容。对于基本类型,两者等价;对于对象,"=="检查引用是否指向同一对象,equals()则检查内容是否相等。
12. 静态变量属于类,实例变量属于类的每个实例。静态变量在类加载时创建,而实例变量在对象创建时创建。静态变量可以直接通过类名访问,而实例变量需要通过对象实例访问。
13. 不可以从static方法内部直接调用非static方法,因为static方法与类关联,而非static方法与类的实例关联。需要先创建实例,然后通过实例调用非static方法。
14. Integer是int的包装类,用于处理对象和基本类型之间的转换。Integer对象在一定范围内可以缓存,而int是原始类型,处理速度更快。
15. Math.round(11.5)等于12,Math.round(-11.5)等于-11,round方法四舍五入到最接近的整数。
16. 下面的代码可能存在类型转换问题,例如将double转换为int,可能会丢失精度。
17. public、private、protected和默认访问修饰符的区别在于访问权限:public可被所有类访问,private仅限本类,protected允许同包及子类访问,而默认访问级别只允许同包内的访问。
18. Overload(重载)是方法名相同但参数列表不同的方法,返回值类型不影响重载。Override(重写)是子类覆盖父类的同名方法,要求方法名、参数列表和返回值类型都相同。
19. 构造器不能被override,但可以被重载。
20. 接口可以继承接口,抽象类可以实现接口,但抽象类不能继承具体类(除非抽象类是泛型类的参数)。抽象类中可以有静态的main方法,但无法作为程序入口点,因为静态方法不能实例化抽象类。
21. 写clone()方法时,通常会包含`super.clone()`以实现对象的浅复制。
22. 面向对象的特征包括封装、继承、多态。
23. Java中多态是通过方法的重写和接口实现来实现的,允许父类引用指向子类对象,调用子类的方法。
24. abstract class和interface的主要区别在于:抽象类可以包含非抽象方法和字段,而接口只能包含抽象方法和常量;类可以继承一个抽象类并实现多个接口。
25. abstract method不能同时是static,因为静态方法与类相关联,而抽象方法与特定的实例有关。它们也不能同时是native,因为native方法由操作系统实现。同样,它们不能同时是synchronized,因为抽象方法没有实际实现。
26. 内部类(Inner Class)是定义在另一个类中的类,分为静态内部类(Static Nested Class)和非静态内部类。静态内部类不需要外部类的实例就可以创建,而非静态内部类需要。
27. 内部类可以引用其包含类的成员,包括私有成员,但不能访问静态成员,除非通过其包含类的实例。
28. A类是B类的子类,B类是C类的子类,这种关系称为多层继承。在多层继承中,子类会继承所有父类的非私有成员。
这些只是Java基础知识中的一部分,深入理解和熟练掌握这些知识点对成为一名合格的Java开发者至关重要。不断学习和实践,才能在Java开发的道路上越走越远。