持续总结中!2024年面试必问 100 道 Java基础面试题(七)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(六)-CSDN博客

十三、static关键字有什么用?

以下是static关键字的几种主要用途:

  1. 创建类方法static关键字可以用来创建类方法,即不需要创建类的实例就可以调用的方法。这些方法通常用于实现与类相关但与类的任何对象无关的功能。

    public class MathUtils {
        public static int add(int a, int b) {
            return a + b;
        }
    }
    // 调用方式:MathUtils.add(5, 10);
  2. 创建类变量: 使用static关键字声明的变量是类变量,也称为静态变量。它们属于类本身,而不是类的某个特定实例。静态变量在类加载时初始化,并且所有实例共享同一个静态变量。

    public class MyClass {
        public static int staticVariable;
    }
    // 访问方式:MyClass.staticVariable = 10;
  3. 静态初始化块static关键字还可以用来创建静态初始化块,它在类加载时执行一次。这通常用于初始化静态变量。

    public class MyClass {
        static {
            // 初始化代码
        }
    }
  4. 静态嵌套类static关键字可以用于创建静态嵌套类,也称为静态内部类。与非静态内部类不同,静态嵌套类不需要外部类的实例就可以被创建。

    public class OuterClass {
        public static class StaticNestedClass {
            // 类体
        }
    }
    // 创建静态嵌套类的实例:OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
  5. 静态导入: 在Java 5及以后的版本中,可以使用static import语法导入类的静态成员,使得在使用时不必指定类名。

    import static java.lang.Math.PI;
    import static java.lang.Math.sqrt;
    public class MyClass {
        public double calculateCircleArea(double radius) {
            return PI * sqrt(radius);
        }
    }
  6. 实现单例模式static关键字在实现单例模式时非常有用,特别是懒汉式单例模式,可以通过一个静态方法来获取类的实例。

    public class Singleton {
        private static Singleton instance;
        private Singleton() {}
        public static Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
  7. 主方法: Java程序的入口点main方法也是静态的,因为它不需要创建对象即可执行。

    public class MyApp {
        public static void main(String[] args) {
            // 程序入口代码
        }
    }

static关键字是Java面向对象编程中的一个核心概念,它允许开发者定义类级别的成员,这些成员不属于任何对象实例,而是属于类本身。

十四、static变量和普通变量的区别?

以下是static变量与普通变量的主要区别:

  1. 作用范围

    • static变量(静态变量)属于类本身,而不是类的某个特定实例。这意味着静态变量的副本数量与类的对象数无关,所有对象共享同一个静态变量。
    • 普通变量(非静态变量或实例变量)属于类的具体对象,每个对象都有自己的普通变量副本。
  2. 生命周期

    • static变量在类加载到JVM时初始化(如果未显式初始化,则默认初始化),并且在程序结束或类被卸载前一直存在。
    • 普通变量的生命周期与创建它的对象的生命周期相同,当对象被垃圾回收时,该对象的非静态变量也会被回收。
  3. 访问方式

    • static变量可以通过类名直接访问,也可以通过类的任何对象访问。
    • 普通变量只能通过具体的对象实例访问。
  4. 存储位置

    • static变量存储在Java虚拟机的方法区,这是堆内存的一部分,用于存储类信息。
    • 普通变量存储在堆内存中的对象实例区域,每个实例都有自己的一份普通变量副本。
  5. 使用场景

    • static变量适用于存储那些不需要每个对象都有独立副本的数据,如配置参数、全局状态信息等。
    • 普通变量适用于存储对象特有的状态信息,如对象的属性。
  6. 与对象的关系

    • static变量不依赖于对象实例,因此它们不能直接访问非静态变量或非静态方法(除非通过对象实例)。
    • 普通变量属于对象实例,可以直接被对象的非静态方法访问。
  7. 默认值

    • static变量和普通变量如果未显式初始化,都会有默认值。对于数值类型,默认值为0;对于布尔类型,默认值为false;对于引用类型,默认值为null

示例代码

public class MyClass {
    // 静态变量
    public static int staticVariable;
    
    // 普通变量
    private int instanceVariable;
    
    public static void main(String[] args) {
        // 直接使用类名访问静态变量
        System.out.println(MyClass.staticVariable);
        
        // 创建对象后,使用对象访问普通变量
        MyClass myObject = new MyClass();
        System.out.println(myObject.instanceVariable);
    }
}

在这个示例中,staticVariable是静态变量,可以通过MyClass.staticVariable直接访问。而instanceVariable是普通变量,需要创建MyClass的对象后才能访问。

总结来说,static变量是类的一部分,与类的所有实例共享;而普通变量是对象的一部分,每个实例都有其独立的副本。正确使用这两种变量对于程序设计和内存管理都是非常重要的。

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值