### Java基础面试题知识点解析 #### 一、面向对象的特征 面向对象编程(OOP)是Java编程的核心概念之一,其主要特征包括: - **封装**:将对象的状态信息(属性)隐藏在对象内部,仅对外提供有限的操作接口。封装提高了代码的安全性和可维护性。 - **继承**:允许一个类继承另一个类的特性和行为,从而实现代码复用。子类可以继承父类的所有非私有成员,并可以扩展或覆盖父类的行为。 - **多态**:同一接口使用不同的实例来实现不同的功能。多态分为编译时多态(如方法重载)和运行时多态(如方法重写)。 #### 二、访问修饰符详解 Java中的访问修饰符决定了类、变量、方法等的可见范围。具体包括: - **public**:公有,对任何类可见。 - **protected**:受保护,对同一包内的类和子类可见。 - **default(无修饰符)**:包级访问权限,仅对同一包内的类可见。 - **private**:私有,仅对当前类可见。 #### 三、String类型 - **String**不是一个基本数据类型,而是一个类。因此,它具有对象的特性,可以使用方法来操作字符串。 - 在Java中,字符串是不可变的,这意味着一旦创建了一个字符串对象,它的内容就不能改变。 #### 四、float类型的赋值 - `float f = 3.4;` 这种赋值方式是不正确的,因为默认情况下,数字常量3.4被视为`double`类型。正确的做法是显式地将其转换为`float`类型,例如:`float f = (float) 3.4;` 或者 `float f = 3.4f;`。 #### 五、short类型操作 - `short s1 = 1; s1 = s1 + 1;`这种操作会导致编译错误,因为`s1 + 1`的结果会被提升为`int`类型,而不能直接赋值给`short`类型变量。 - `short s1 = 1; s1 += 1;`这种方式是正确的,因为`+=`运算符会自动进行类型转换,将结果转换回`short`类型。 #### 六、goto关键字 - Java中没有使用`goto`关键字。尽管它是保留字,但在当前版本的Java中并未启用此关键字。 - `goto`在其他语言如C/C++中用于实现无条件跳转。 #### 七、int与Integer的区别 - **int**是一个基本数据类型,而**Integer**是`int`的包装类。 - `int`可以直接存储数值,而`Integer`需要实例化后才能使用。 - `int`默认值为0,而`Integer`默认值为`null`。 #### 八、逻辑运算符`&`与`&&`的区别 - **&**:无论左侧条件是否为真,右侧条件都会被计算。 - **&&**:如果左侧条件为假,则不会计算右侧条件,这样可以提高效率。 - 类似地,`|`与`||`也存在同样的区别。 #### 九、内存管理 - **栈**:用于存储局部变量和对象引用。每个线程都有自己的栈,不同线程之间不能共享栈中的数据。 - **堆**:所有对象都存储在这里,被所有线程共享。 - **静态区**:存储类信息和静态变量。对于整个程序来说,静态区是唯一的。 #### 十、Math.round()函数 - `Math.round(11.5)`返回12。 - `Math.round(-11.5)`返回-11。 #### 十一、switch语句 - 在Java中,`switch`可以作用于`byte`、`short`、`char`和它们对应的包装类。 - `switch`还可以接受`String`作为条件表达式,但需注意这仅限于Java 7及以上版本。 #### 十二、位运算优化 - 使用`2 << 3`来表示2乘以8,这是一种更高效的运算方式。 #### 十三、数组与String的length属性 - 数组没有`length()`方法,而是有一个`length`属性来获取数组长度。 - `String`类有一个`length()`方法来获取字符串的长度。 #### 十四、跳出多重嵌套循环 - 可以通过在外层循环前定义一个标签,然后在内层循环中使用`break`加上该标签的方式跳出。 #### 十五、构造器的重写 - 构造器不能被重写,但可以被重载。 #### 十六、equals与hashcode的一致性 - 如果两个对象满足`x.equals(y) == true`,那么它们的`hashCode`值必须相同。 #### 十七、String类的不可继承性 - `String`类是最终类(`final`),因此不能被继承。 #### 十八、对象传递 - 在Java中,传递的是对象的引用而非值。 #### 十九、String与StringBuilder/StringBuffer - `StringBuilder`和`StringBuffer`都可以高效地修改字符串,但`StringBuffer`是线程安全的。 - `StringBuilder`的速度通常比`StringBuffer`和`String`更快。 #### 二十、重载与重写的区别 - **重载**发生在同一个类中,方法名称相同但参数列表不同。 - **重写**发生在子类与父类之间,子类覆盖父类的方法。 - 方法的重载不能根据返回类型进行区分。 #### 二十一、JVM加载class文件的机制 - 加载阶段:查找并加载类文件。 - 链接阶段:验证类文件格式、准备类的静态变量区域、解析符号引用为直接引用。 - 初始化阶段:执行类的初始化过程,设置静态变量初始值,执行静态初始化块。 #### 二十二、char类型与中文字符 - `char`类型可以存储一个中文字符,因为它实际上存储的是Unicode码点。Java使用UTF-16编码,一个`char`可以存储一个或多个Unicode码点,因此一个中文字符可以用一个`char`变量来表示。
剩余18页未读,继续阅读
- 粉丝: 7
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于 Ant 的 Java 项目示例.zip
- 各种字符串相似度和距离算法的实现Levenshtein、Jaro-winkler、n-Gram、Q-Gram、Jaccard index、最长公共子序列编辑距离、余弦相似度…….zip
- 运用python生成的跳跃的爱心
- 包括用 Java 编写的程序 欢迎您在此做出贡献!.zip
- (源码)基于QT框架的学生管理系统.zip
- 功能齐全的 Java Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本 .zip
- 功能性 javascript 研讨会 无需任何库(即无需下划线),只需 ES5 .zip
- 分享Java相关的东西 - Java安全漫谈笔记相关内容.zip
- 具有适合 Java 应用程序的顺序定义的 Cloud Native Buildpack.zip
- 网络建设运维资料库职业