面试 Java 基础八股文十问十答第十期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)&和&&的区别

&&& 都是用于逻辑与操作的运算符,但有一些关键的区别:

  • & 是按位与运算符,用于对两个整数的每一位执行与操作。
  • && 是逻辑与运算符,用于在布尔表达式中执行逻辑与操作。

在使用逻辑与操作时,主要区别在于短路行为:

  • & 执行完整的位与操作,不论第一个操作数的值如何,都会对第二个操作数进行求值。
  • && 会执行短路求值,即如果第一个操作数为 false,则不会对第二个操作数进行求值,因为整个表达式已经确定为 false。

2)Java 有没有 goto

在 Java 中,goto 是一个保留字,但实际上并没有被使用。Java 编程语言不支持使用 goto 语句,这是为了防止代码出现难以理解和维护的结构。

Java 使用结构化编程的原则,通过循环、条件语句和方法调用来控制程序流程,而不是使用 goto 语句。这样做有助于提高代码的可读性和可维护性,避免了由于使用 goto 而引起的复杂的控制流问题。

3)final 有什么用?

在 Java 中,final 关键字有多种用途:

  • 不可变变量: 当应用于变量时,final 使该变量成为常量,一旦被赋值后就不能再修改。这有助于提高代码的可读性和安全性。

    final int x = 10;
    
  • 不可继承类: 当应用于类时,final 表示该类不能被继承,即该类是最终的,不能有子类。

    final class MyClass {
        // 类的定义
    }
    
  • 不可覆盖方法: 当应用于方法时,final 表示该方法不能被子类覆盖(重写)。

    class Parent {
        final void myMethod() {
            // 方法的定义
        }
    }
    
    class Child extends Parent {
        // 编译错误,无法覆盖 final 方法
        // void myMethod() { }
    }
    

final 的使用有助于提高代码的稳定性、可读性和安全性。

4)final finally finalize 区别

  • final: 是 Java 关键字,用于声明一个常量、不可继承的类或者不可覆盖的方法。
  • finally: 是 Java 中的异常处理关键字,用于在 try-catch 结构中执行一段代码块,无论是否发生异常都会执行,通常用于释放资源或清理操作。
  • finalize: 是 Java 中的 Object 类的一个方法,用于在垃圾回收器将对象从内存中清理之前执行一些清理操作,但是不建议过度依赖它,因为无法保证何时会执行。

5)this 关键字的用法

this 是一个关键字,它表示对当前对象的引用。在 Java 中,this 可以用于以下几个方面:

  • 引用当前对象的成员变量: 当成员变量与局部变量同名时,可以使用 this 关键字来引用当前对象的成员变量。

    class MyClass {
        int x;
    
        void setX(int x) {
            this.x = x; // 使用 this 引用成员变量 x
        }
    }
    
  • 调用当前对象的其他方法: 可以使用 this 关键字来调用当前对象的其他方法。

    class MyClass {
        void method1() {
            // 调用 method2 方法
            this.method2();
        }
    
        void method2() {
            // 方法的定义
        }
    }
    
  • 在构造函数中调用另一个构造函数: 可以使用 this 关键字来调用同一个类中的其他构造函数。

    class MyClass {
        int x;
    
        MyClass() {
            this(0); // 调用带参数的构造函数
        }
    
        MyClass(int x) {
            this.x = x;
        }
    }
    

6)super 关键字的用法

super 是一个关键字,它表示对父类的引用。在 Java 中,super 可以用于以下几个方面:

  • 调用父类的构造函数: 在子类的构造函数中可以使用 super 关键字来调用父类的构造函数。

    class Parent {
        Parent(int x) {
            // 父类构造函数的定义
        }
    }
    
    class Child extends Parent {
        Child(int x) {
            super(x); // 调用父类的构造函数
        }
    }
    
  • 访问父类的成员变量或方法: 在子类中可以使用 super 关键字来访问父类中的成员变量或方法。

    class Parent {
        int x;
    
        void display() {
            // 方法的定义
        }
    }
    
    class Child extends Parent {
        void display() {
            super.display(); // 调用父类的 display 方法
            System.out.println("Value of x: " + super.x); // 访问父类的成员变量 x
        }
    }
    

super 关键字主要用于处理继承关系中的一些场景,如调用父类的构造函数或访问父类的成员变量和方法。

7)this 与 super 的区别

  • this

    • this
      

      是一个引用,它指向当前对象的实例。主要用途包括:

      • 引用当前对象的成员变量或方法。
      • 在构造函数中调用同一个类中的其他构造函数。
      • 作为方法的隐式参数传递给其他方法。
  • super

    • super
      

      也是一个引用,它指向父类的实例。主要用途包括:

      • 调用父类的构造函数。
      • 访问父类的成员变量或方法。

总的来说,this 主要用于引用当前对象的成员,而 super 主要用于访问父类的成员。

8)static 存在的主要意义

static 关键字在 Java 中有几个重要的用途:

  • 共享变量: static 可以用来创建类变量,这些变量被类的所有实例共享。这意味着,无论创建了多少个类的实例,它们都共享相同的变量值。
  • 独立于对象的方法: static 还可以用来创建类方法,这些方法不需要实例化类就可以被调用。这样的方法是与类相关联的,而不是与类的实例相关联的。
  • 内部类的 static: 在内部类中,如果内部类被声明为静态的,则可以直接在外部类中使用,而不需要创建外部类的实例。
  • 静态块: 可以使用静态块来执行静态初始化,它在类加载时执行,且仅执行一次。

9)static 的独特之处

static 的独特之处在于它的作用范围和生命周期:

  • 作用范围: static 成员属于类,而不是属于类的任何特定实例。因此,它们对于类的所有实例都是相同的。
  • 生命周期: static 成员存在于整个程序的生命周期中,它们在类被加载时创建,直到程序退出时才会销毁。与之相反,非静态成员是在创建类的实例时才会分配内存,并且随着对象的销毁而销毁。

10)static 应用场景

static 的应用场景包括但不限于:

  • 常量声明: 将常量声明为 static final,以确保它们在整个程序中都是不可修改的。
  • 共享变量: 将变量声明为 static,以便它们被类的所有实例共享。
  • 工具方法: 将方法声明为 static,以便它们可以在不创建类实例的情况下直接调用。
  • 单例模式: 在单例模式中,通过将构造函数私有化,并使用静态方法返回单例实例来确保只有一个类的实例存在。
  • 静态类: 将嵌套类声明为 static,以便在不创建外部类实例的情况下直接使用。
  • 静态块: 使用静态块执行静态初始化,例如加载驱动程序或初始化静态变量。

在这些场景中,static 关键字有助于提供一种有效的机制来管理共享状态和行为,并且可以在不创建类实例的情况下访问它们。

前后端项目 Gitee & Github 累计 3000+ Star,10W+浏览量!⭐点赞⭐收藏⭐不迷路!⭐

智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend

智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend

GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐