JAVA static笔记

在Java中,static关键字用于定义类级别的成员,这意味着这些成员属于类本身,而不是类的任何特定实例。以下是关于Java中static关键字的一些详细介绍:

1. static变量(类变量)
  • 定义:当你在类中声明一个变量时,如果使用static关键字,那么这个变量称为类变量。

  • 共享性:类变量是所有对象实例共享的,也就是说,所有实例都会看到相同的值,并且对它的修改会影响到所有实例。

  • 内存分配:类变量在类加载时被分配内存,并且在程序运行期间一直存在,直到程序终止。

  • 访问方式:可以直接通过类名访问,无需创建类的实例。

public class MyClass {
    static int count = 0; // static variable
    public MyClass() {
        count++; // Each time a new instance is created, count is incremented
    }
}
2. static方法(类方法)
  • 定义:类中的方法也可以被声明为static,这样的方法称为类方法。

  • 访问限制:静态方法只能直接调用其他静态方法或访问静态数据。它们不能直接访问非静态成员,因为非静态成员必须通过对象实例来访问

  • 调用方式:静态方法可以通过类名直接调用,无需创建类的实例。

public class MyClass {
    static void myStaticMethod() {
        // static method logic
    }
}
// 调用静态方法
MyClass.myStaticMethod();
3. static块(静态初始化块)
  • 定义static块用于静态变量的初始化。

  • 执行时机:静态块在类加载时执行,而且只执行一次,用于初始化静态变量。

  • 作用:当你需要执行一些复杂的静态初始化操作时,静态块非常有用。

public class MyClass {
    static int num;
    static String str;
    static {
        num = 47;
        str = "Some text";
    }
}
4. static内部类(嵌套静态类)
  • 定义:静态内部类是嵌套在类内部的静态类。

  • 特点:静态内部类不需要对外部类对象的引用,它可以像其他顶级类一样独立存在。

  • 访问方式:静态内部类可以直接通过外部类名来访问。

public class OuterClass {
    static class InnerStaticClass {
        // static nested class code
    }
}
OuterClass.InnerStaticClass innerObj = new OuterClass.InnerStaticClass();
注意事项:
  • 静态成员不应该依赖于非静态成员,因为非静态成员需要通过对象实例来访问。

  • 静态方法不能被覆盖(overridden),因为方法覆盖是基于对象的多态性,而静态方法是属于类的。

  • 在静态方法内部不能直接使用thissuper关键字,因为它们是指向当前对象或父类对象的引用,而静态方法是属于类的,不依赖于任何对象实例。 正确使用static关键字可以提高代码的清晰度和效率,但过度使用可能会导致代码难以测试和维护,因为它可能引入全局状态。因此,在设计类和接口时,应当谨慎使用静态成员。

相关问题:

为什么叫做静态变量

“静态”(static)这个词在编程语言中用于描述那些在内存中具有固定位置,并且在程序执行期间不会改变的变量或方法。以下是一些关于为什么这些变量被称为“静态”的原因:

  1. 内存位置固定:静态变量在程序运行期间存储在固定的内存位置,它们的位置在程序的生命周期内不会改变。这与非静态变量(实例变量)不同,实例变量每次创建对象时都会分配新的内存位置。

  2. 程序生命周期:静态变量的生命周期与整个程序的生命周期相同,它们在程序启动时被创建,在程序结束时销毁。这意味着它们是“静止”的,不会因为对象的创建和销毁而变化。

  3. 不依赖于实例:静态变量属于类本身,而不是类的任何实例。因此,它们不依赖于任何特定的对象实例。你可以认为它们是类的一部分,是“静止”在类中的,而不是随着对象的创建而“动态”变化。

  4. 共享状态:静态变量在所有实例之间共享。这意味着,无论你创建了多少个类的实例,静态变量都只有一个副本,这个副本被所有实例共享。因此,它们的状态是“静止”的,对所有实例都是一致的。

  5. 初始化和访问:静态变量通常在类加载时进行初始化,并且可以通过类名直接访问,不需要创建类的实例。这种“静态”的初始化和访问方式强调了它们与类的直接关联。

总的来说,“静态”这个词强调了这些变量与类的直接关系,它们的固定性和共享性,以及它们在整个程序执行期间保持不变的性质。这个术语在不同的编程语言中具有相似的含义,尽管具体的语法和用法可能有所不同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值