Java面试必备知识:基础篇

需积分: 10 4 下载量 197 浏览量 更新于2024-07-31 收藏 718KB DOC 举报
"Java面试宝典2011版" Java面试宝典涵盖了广泛的Java基础知识,以下是其中的一些关键知识点的详细解释: 1. 一个`.java`源文件可以包含多个类,但只能有一个公共类(public class),且文件名必须与公共类名相同。非公共类(非内部类)的数量不受限制。 2. Java中没有`goto`语句,它已被淘汰,因为Java强调结构化编程,鼓励使用循环和异常处理。 3. `&`和`&&`都是逻辑运算符。`&`始终计算两边的操作数,而`&&`(短路逻辑与)只有在必要时才会计算第二个操作数,这在条件判断中很重要。 4. 在Java中,要跳出多重嵌套循环,可以使用`break`语句配合标签(label)来指定跳出的循环。 5. `switch`语句可以作用在`byte`、`char`、`short`、`int`以及枚举类型上,自Java 7起,也可以作用在`String`上。 6. 对于`short s1 = 1; s1 = s1 + 1;`,由于`short`和`int`之间的运算结果是`int`,需要强制类型转换。而`s1 += 1;`会自动进行类型转换,所以没有错误。 7. `char`型变量可以存储一个中文汉字,因为UTF-16编码允许存储单个中文字符。 8. 计算2乘以8最有效率的方式是直接写`2 * 8`。 9. 设计一个能处理一百亿的计算器,要考虑数值的溢出问题,可能需要使用大整数类(如`BigInteger`)。 10. `final`关键字修饰的变量,其引用一旦赋值就不能改变,但如果是对象,对象的属性可以改变。 11. `==`比较的是两个对象的引用,而`equals()`方法比较的是对象的内容。对于基本类型,两者行为类似;对于对象,`equals()`需要重写以实现正确的比较。 12. 静态变量属于类,生命周期与类相同,所有类实例共享;实例变量属于对象,每个对象有自己的副本。 13. 不可以从`static`方法内部直接调用非`static`方法,因为非`static`方法依赖于对象实例。 14. `Integer`是`int`的包装类,用于支持对象操作,如比较和装箱拆箱。`Integer`对象的创建和操作比直接使用`int`要消耗更多资源。 15. `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11,`round`方法将浮点数四舍五入到最接近的整数。 16. 代码的不妥之处可能涉及变量作用域、类型转换、空指针等问题,需要具体代码分析。 17. `public`、`private`、`protected`分别代表公开、私有、包内可见的访问权限。不写访问修饰符默认为包内可见。 18. `Overload`是重载,允许方法有相同的名称但不同的参数列表,返回类型不影响重载。`Override`是重写,子类方法覆盖父类方法,要求签名完全一致。 19. 构造器(Constructor)不能被`override`,但可以被重载。 20. 接口可以继承接口,抽象类可以实现接口,但抽象类不能继承具体类(concrete class)。抽象类中可以有静态的`main`方法,但不能作为程序入口。 21. 实现`clone()`方法时,通常会包含`super.clone()`调用,以复制对象。 22. 面向对象的特征包括封装、继承、多态。 23. Java通过方法重写(Override)和接口实现(Implements)实现多态。 24. `abstract class`可以包含抽象方法和非抽象方法,而`interface`只能包含抽象方法,没有实现。抽象类可以有属性和构造器,接口不能。 25. `abstract`方法不能同时是`static`、`native`或`synchronized`,因为它们的性质与抽象方法冲突。 26. 内部类(Inner Class)是定义在另一个类内部的类,分为静态内部类(Static Nested Class)和非静态内部类。静态内部类不依赖于外部类的实例,可以独立存在,而非静态内部类需要外部类实例才能创建。 27. 内部类可以引用其包含类的成员,包括私有成员,但不能引用静态成员,除非明确指定外部类。 28. 匿名内部类可以继承其他类或实现接口,常用于快速实现简单的功能。 29. `super.getClass()`返回对象的实际类,这对于了解对象的类型很有用。 30. `String`不是基本数据类型,它是对象,属于引用类型。基本数据类型包括`int`、`char`、`boolean`等。 31. `String s = "Hello"; s = s + " world!";`执行后,原始的`String`对象没有变,而是创建了一个新的`String`对象,原始对象被废弃。 32. 不可以继承`String`类,因为`String`是final的,不允许被继承。 33. `String s = new String("xyz");`创建了两个`String`对象,一个在常量池,一个在堆。`String`对象在堆中,表示新创建的字符串。 34. `String`和`StringBuffer`的主要区别在于线程安全和效率。`String`是不可变的,每次修改都会创建新对象,而`StringBuffer`提供了线程安全的可变字符串操作。 这些知识点是Java开发者必备的基础,理解和掌握它们对于面试和实际开发至关重要。