### 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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【中邮证券-2024研报】浙江鼎力(603338):Q3业绩高增,臂式产品有望持续放量.pdf
- 圣诞树html网页代码
- unity Shader转场效果合集
- ApiFox前置登录脚本,解决每次调接口免登录
- Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测(含完整的程序,GUI设计和代码详解)
- 【国盛证券-2024研报】博腾股份(300363):盈利能力实现改善,订单状况延续高增.pdf
- 【国盛证券-2024研报】皓元医药(688131):产能建设持续进行,业绩环比改善显著.pdf
- 【国盛证券-2024研报】一文读懂IEA《2024年东南亚能源展望.pdf
- 【国泰君安期货-2024研报】股票股指期权:下行升波,股指期权临近到期.pdf
- 【国泰君安期货-2024研报】EUDR对国内橡胶轮胎制品影响:欧盟市场不确定性增加,国内市场售价或上涨.pdf
- 【国泰君安期货-2024研报】股指期货将偏弱震荡,黄金、白银、铜、豆粕、豆油、菜籽油期货将偏弱震荡,原油、燃料油期货将偏强震荡.pdf
- 【国泰君安期货-2024研报】国泰君安期货商品期权日报.pdf
- 【国泰君安期货-2024研报】股指期货将偏弱震荡,黄金、白银、铜、原油期货将偏强震荡,碳酸锂期货将偏弱宽幅震荡,豆粕期货将偏弱震荡.pdf
- 【国泰君安期货-2024研报】股指期货将震荡整理,黄金、白银、铜、豆粕期货将偏弱震荡,碳酸锂期货将偏强震荡.pdf
- 【国泰君安期货-2024研报】南美大豆,玉米主产区天气展望.pdf
- 【国泰君安期货-2024研报】国泰君安期货商品研究晨报:黑色系列.pdf