"这篇文档是2012年的Java面试经典题目集合,涵盖了Java基础知识、语法特性、面向对象、类与对象、接口、多态等多个方面的内容,旨在帮助求职者准备Java程序员的面试。"
1. Java基础部分:
- 一个.java源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开类。
- Java没有goto语句,它采用的是基于流程控制结构(如if,while,for,break,continue)来实现程序流程的跳转。
- &是按位与运算符,&&是逻辑与运算符。前者会计算所有位,后者在前一个操作数为假时不会计算第二个操作数。
- 使用break语句可以直接跳出多重嵌套循环,而return语句则可以结束方法并返回结果。
2. Java语言特性:
- switch语句不能作用于byte,因为Java 7之前switch仅支持byte, char, short, int和枚举类型,但自Java 7开始可以作用于String。
- shorts1 = 1; s1 = s1 + 1; 错误,因为s1+1的结果是int型,需要强制转换回short类型。s1 += 1; 是正确的,编译器会自动处理类型转换。
- char型变量可以存储一个中文汉字,因为UTF-16编码下,一个中文字符占两个字节。
- 最有效率的计算2乘以8的方法是直接赋值:int result = 2 * 8; 或者使用移位操作:int result = 2 << 3;
3. 类与对象、变量与方法:
- final关键字修饰的变量,其引用一旦赋值后不能改变,对于对象,意味着对象的引用不可变,但对象内部的状态可以改变。
- "=="比较的是对象的引用,而equals方法比较的是对象的内容。String类重写了equals方法,所以比较的是字符串内容。
- 静态变量属于类,而实例变量属于对象。静态变量在类加载时初始化,实例变量在对象创建时初始化。
- 不能从static方法内部直接调用非static方法,因为static方法与对象无关,而非static方法需要对象才能调用。
- Integer与int的区别在于Integer是对象,int是基本类型,Integer对象的创建需要额外的内存开销,而int更高效。
4. 多态、接口与抽象类:
- Java中多态是通过继承或实现接口来实现的,一个子类对象可以被视为父类对象,从而调用父类的方法。
- overloaded方法(重载)可以改变参数列表,但不能改变返回值类型。
- 构造器(Constructor)不能被override,但可以重载。
- 接口可以继承接口,抽象类可以实现接口,但不能继承具体类。
- 抽象类中可以有静态的main方法,但无法直接执行,因为静态方法不依赖于对象实例。
5. 其他高级特性:
- clone()方法通常会包含`super.clone()`来复制对象,以实现深拷贝或浅拷贝。
- 面向对象的特征包括封装、继承、多态。
- abstract方法不能是static、native或synchronized,因为这些特性与抽象方法的定义不符。
- 内部类可以访问其外部类的所有成员,包括私有成员,但静态内部类(StaticNestedClass)不能直接访问外部类的非静态成员。
- 匿名内部类可以继承其他类,也可以实现接口。
这些面试题目涉及了Java编程的广泛领域,对于理解Java语言的核心概念和机制非常有帮助。掌握这些知识将有助于在面试中表现出色,并能更好地应对实际编程工作中的挑战。