Java面试必备知识:基础篇
需积分: 10 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开发者必备的基础,理解和掌握它们对于面试和实际开发至关重要。
2024-01-06 上传
2023-07-15 上传
2023-06-20 上传
2023-07-26 上传
2024-05-13 上传
2023-08-27 上传
2023-09-17 上传
2023-08-13 上传
2023-06-22 上传
lm568618500
- 粉丝: 0
- 资源: 10
最新资源
- Postman安装与功能详解:适用于API测试与HTTP请求
- Dart打造简易Web服务器教程:simple-server-dart
- FFmpeg 4.4 快速搭建与环境变量配置教程
- 牛顿井在围棋中的应用:利用牛顿多项式求根技术
- SpringBoot结合MySQL实现MQTT消息持久化教程
- C语言实现水仙花数输出方法详解
- Avatar_Utils库1.0.10版本发布,Python开发者必备工具
- Python爬虫实现漫画榜单数据处理与可视化分析
- 解压缩教材程序文件的正确方法
- 快速搭建Spring Boot Web项目实战指南
- Avatar Utils 1.8.1 工具包的安装与使用指南
- GatewayWorker扩展包压缩文件的下载与使用指南
- 实现饮食目标的开源Visual Basic编码程序
- 打造个性化O'RLY动物封面生成器
- Avatar_Utils库打包文件安装与使用指南
- Python端口扫描工具的设计与实现要点解析