Java面试必备知识点详解

需积分: 4 0 下载量 88 浏览量 更新于2024-07-16 收藏 1.17MB PDF 举报
"Java面试宝典2014版.pdf" 是一份详尽的Java面试题库,涵盖了各种Java基础知识和进阶概念,旨在帮助求职者准备Java相关的面试。这份资料包含了许多面试中常遇到的问题,提供了详细的解答,帮助应聘者理解并掌握Java编程的核心知识点。 1. Java源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开的(非public)。如果类没有指定访问修饰符,它们默认为包级私有(package-private)。 2. Java中没有`goto`语句,它是一种流程控制语句,但在Java中为了代码的可读性和避免复杂的跳转结构,被省略了。 3. `&`和`&&`都是逻辑运算符。`&`始终会计算两边的操作数,而`&&`(短路与)只有在第一个操作数为真时才会计算第二个操作数。 4. 要跳出多重嵌套循环,可以使用`break`语句配合标签(label)来实现,如:`outer: for(...){ inner: for(...){... break outer; } }` 5. `switch`语句可以作用于`byte`, `char`, `short`, `int`以及枚举类型(enum),但在Java 7之后,也可以用于`String`类型。 6. `short s1 = 1; s1 = s1 + 1;` 这里会出现类型提升,因为`short`加`int`的结果是`int`,需要显式转换回`short`。而`s1 += 1;`则是自动处理了类型转换。 7. `char`型变量可以存储一个中文汉字,因为UTF-16编码中一个字符可能由一个或两个`char`组成,中文汉字通常占用两个`char`。 8. 最有效率的方法计算2乘以8是直接赋值:`int result = 2 * 8;` 9. 设计一个一百亿的计算器要考虑数值溢出问题,可能需要使用大整数类如`BigInteger`。 10. `final`修饰的变量,其引用不可变,意味着不能指向其他对象,但引用的对象内容可以变。 11. `==`比较的是对象的引用,而`equals()`方法比较的是对象的内容(除非重写`equals()`)。 12. 静态变量属于类,实例变量属于对象。静态变量在类加载时初始化,而实例变量在对象创建时初始化。 13. 不可以从`static`方法内部直接调用非`static`方法,因为`static`方法与对象无关,无法访问对象特有的非`static`成员。 14. `Integer`是`int`的包装类,它们之间存在自动装箱拆箱。`Integer`对象包含额外的特性,如缓存、比较等。 15. `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。 16. 下面的代码可能存在不妥之处,比如未定义变量、语法错误等,具体要看代码内容。 17. `public`、`private`、`protected`分别代表不同的访问权限,不写表示包级私有。`public`可被任何地方访问,`private`仅在类内访问,`protected`在同一包和子类中访问,无修饰词则仅在同包内访问。 18. `Overload`是重载,方法名相同但参数列表不同;`Override`是重写,子类方法覆盖父类方法。重载不改变返回值类型,而重写可以但必须保持一致。 19. 构造器不能被`override`,但可以重载。 20. 接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类,但抽象类中的`main`方法必须声明为`static`。 21. 实现`clone()`方法时,通常会包含`super.clone()`调用来创建对象副本。 22. 面向对象的特征包括封装、继承、多态。 23. Java通过方法重写(Override)和抽象方法实现多态。 24. `abstract class`可以包含方法实现,而`interface`只能声明方法签名,不能包含实现。`abstract class`可以有构造器,`interface`则不能。 25. `abstract`方法不能同时是`static`,不能同时是`native`,也不能同时是`synchronized`,因为这些特性与抽象方法的定义相冲突。 26. 内部类是定义在另一个类内部的类,分为静态内部类(StaticNestedClass)和非静态内部类(InnerClass)。静态内部类可以像普通类一样使用,而非静态内部类需要外部类实例才能创建。 27. 内部类可以引用包含类的成员,但非静态内部类需要包含类的实例,静态内部类可以直接访问静态成员。 28. A类包含B类,B类包含C类,C类包含D类,这种情况下,D类可以访问到A类的成员,但A类不能直接访问D类的成员,除非通过B类或C类的实例。