### Java面试题——基础篇60题解析 #### 1. 作用域 public,private,protected 以及不写时的区别 在Java中,类成员(如变量、方法等)的作用域可以通过不同的修饰符来控制。具体如下: - **public**:公开的,表示无论在哪个类或包中都可以访问该成员。 - **private**:私有的,表示只有当前类能够访问该成员。 - **protected**:受保护的,表示除了当前类之外,同一个包中的其他类或者不同包中的子类也能访问。 - **默认(不写修饰符)**:也被称为包级私有,默认情况下只有在同一包内的其他类可以访问。 下表总结了四种访问修饰符的作用范围: | 修饰符 | 当前类 | 同一包 | 子孙类 | 其他包 | |----------|--------|--------|--------|--------| | public | √ | √ | √ | √ | | private | √ | × | × | × | | protected| √ | × | √ | × | | 默认 | √ | √ | × | × | #### 2. Anonymous Inner Class (匿名内部类) 是否可以 extends 其他类,是否可以 implements 接口 - **匿名内部类**:是没有名字的内部类,可以直接在代码中创建并使用,无需定义类名。它主要用于简化代码。 - **能否继承其他类**:匿名内部类不能直接继承其他类,但可以在创建时指定一个已存在的接口或者抽象类作为父类。 - **能否实现接口**:匿名内部类可以实现接口。例如,在 Swing GUI 编程中,经常使用匿名内部类来实现事件监听器接口。 #### 3. Static Nested Class 和 Inner Class 的不同 - **Static Nested Class**:静态嵌套类,它不依赖于外部类的实例。这意味着你可以直接通过外部类的名称来访问静态嵌套类。 - **Inner Class**:内部类,它依赖于外部类的实例。你需要有一个外部类的实例才能创建内部类的实例。 - **主要区别**: - 静态嵌套类不需要外部类的实例就可以创建,而普通内部类需要。 - 静态嵌套类无法直接访问外部类的非静态成员,而普通内部类可以直接访问外部类的所有成员。 - 静态嵌套类更像是一个独立的类,而普通内部类与外部类的关系更紧密。 #### 4. & 和 && 的区别 - **&**:位运算符,用于按位与运算。 - **&&**:逻辑运算符,用于逻辑与运算。`&&` 运算符具有短路特性,即如果左侧的操作数为 false,则右侧的操作数不会被计算。 #### 5. Collection 和 Collections 的区别 - **Collection**:是一个接口,它是所有集合类的根接口。包括 List、Set 等集合类都是它的子类。 - **Collections**:是一个工具类,提供了大量静态方法来操作 Collection 类型的集合。例如,对集合进行排序、查找、填充等操作。 #### 6. 什么时候用 assert - **assert**:是 Java 提供的一种调试工具,用于确保程序的基本正确性。assert 语句通常用来验证假设条件,比如函数的前置条件或后置条件。在开发阶段,可以通过启用断言来检测错误情况。 - **使用场景**:当某个条件应该总是为真时,可以使用 assert 来检查。例如,在函数调用之前,可以使用 assert 来确认传入的参数符合预期。 #### 7. Strings=new String("xyz"); 创建了几个 String Object? - **创建过程**:这里创建了两个对象,一个是字符串对象 `"xyz"`,另一个是 `Strings` 对象引用。 - **解释**:`new String("xyz")` 会先在字符串常量池中查找是否存在 `"xyz"` 字符串,若不存在则将其添加到池中,然后创建一个新的 `String` 对象,并不是引用常量池中的 `"xyz"`。 #### 8. Math.round(11.5) 等于多少? Math.round(-11.5) 等于多少? - **Math.round 方法**:用于四舍五入取整。对于正数,若小数部分大于等于 0.5,则向上取整;对于负数,若小数部分小于 -0.5,则向下取整。 - **结果**: - `Math.round(11.5)` 结果为 12。 - `Math.round(-11.5)` 结果为 -11。 #### 9. shorts1=1; s1=s1+1; 有什么错? shorts1=1; s1+=1; 有什么错? - **问题所在**:`s1=s1+1` 错误在于 `s1+1` 的结果是一个 `int` 类型的值,需要显式转换为 `short` 类型。 - **解决方法**:可以使用 `s1=(short)(s1+1)` 或者使用 `+=` 操作符,后者会自动进行类型转换。 #### 10. Java 有没有 goto? - **Java 中的 goto**:Java 语言规范中保留了 `goto` 关键字,但实际上并未使用。`goto` 在 Java 中不可用。 #### 11. 数组有没有 length() 这个方法?String 有没有 length() 这个方法? - **数组**:没有 `length()` 方法,但是有 `length` 属性来获取数组长度。 - **String**:有 `length()` 方法,用于获取字符串的长度。 #### 12. Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型? - **Overload**:方法重载,允许在一个类中定义多个同名方法,只要它们的参数列表不同即可。可以改变返回值类型。 - **Override**:方法重写,子类可以重写父类的方法。重写的方法必须与父类的方法具有相同的方法签名(名称、参数列表、返回类型),并且不能比父类的方法更严格的访问级别。 #### 13. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()?它们有何区别? - **判断重复**:`Set` 通过 `equals()` 方法来判断元素是否重复。如果两个对象的 `equals()` 方法返回 `true`,则认为这两个元素是重复的。 - **equals() 与 ==**: - `==`:比较的是两个对象的引用是否指向同一个内存地址。 - `equals()`:比较的是两个对象的内容是否相等。通常需要在类中重写此方法。 #### 14. 写出一个你最常见到的 RuntimeException - **常见 RuntimeException**:常见的运行时异常包括但不限于: - `ArithmeticException`:算术异常,例如除以零。 - `NullPointerException`:空指针异常。 - `ArrayIndexOutOfBoundsException`:数组索引越界异常。 - `ClassCastException`:类转换异常。 - `IllegalArgumentException`:非法参数异常。 - `SecurityException`:安全异常。 这些知识点涵盖了 Java 基础面试题的多个方面,从基本概念到高级特性均有涉及,对于准备 Java 面试的开发者来说非常实用。
- 粉丝: 605
- 资源: 18
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip