黑马程序员——Java 基础:静态

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、概述
  在 Java 中用 static 关键字修饰的变量、方法、代码块等称为静态变量、静态方法、静态代码块等,这些内容都有其特定的应用,以及不同于非静态的内存使用方式。

二、静态的应用
(1)静态变量
  在一个类中,如果将其成员变量定义为静态变量,意味着其他类中的方法中可以直接通过“类名.变量名”的格式访问该变量,而不必在创建类的对象后通过对象访问该变量。

// 在类中定义一个静态成员变量,并在其他类中直接通过类名访问该变量
class StaticDemo1 {
    static String name = "张三";
    int age = 30;
    void show () {
        System.out.println(name);
    }
}

class Demo {
    public static void main (String[] args) {
        String name = StaticDemo1.name;
        System.out.println(name);
        int age = new StaticDemo1().age;
        System.out.println(age);
    }
}

  在上面的示例中,Demo 类中的主方法可以通过类名直接访问 StaticDemo1 类中的静态变量,而要访问非静态变量,而要创建对象,然后通过对象访问。这是因为用 static 关键字修饰的变量在创建类的实例化对象之前,就已经随着类一起进入到内存中,而非静态变量只有在创建了类的实例化对象之后才会在内存中。而且在内存中创建的对象中不包含静态变量,因此可以将类中不会改变的、所有对象之间相同的成员变量定义为静态变量。

(2)静态方法
  用 static 关键字修饰的方法是静态方法,静态方法的调用方式和内存使用方式与静态变量类似,也可以通过类名调用类中的静态方法。

// 在类中定义一个静态方法,并在其他类中直接通过类名调用该方法
class StaticDemo2 {
    static String name = "张三";
    int age = 30;
    static void show () {
        System.out.println(name);
    }
}

class Demo {
    public static void main (String[] args) {
        StaticDemo2.show();
    }
}

  需要注意的是,如果将一个方法定义为静态,那么它就只能访问静态的变量,而不能访问非静态的变量。

(3) 静态代码块

// 在类中包含一段静态代码块,并在其他类中直接通过类名调用类中的静态变量
class StaticDemo3 {
    static String name = "张三";
    static {
        System.out.println("静态代码块");
    }
}

class Demo {
    public static void main (String[] args) {
        int name = StaticDemo3.name;
    }
}

  在上面的例子中,static {…} 的部分就是静态代码块,静态代码块会随着类进入内存而执行,因此在 Demo 类的主函数中,虽然没有建立 StaticDemo3 类的对象,而只是通过类名访问了静态变量,静态代码块的中的打印语句也会执行,因为静态代码块具有这一特性,因此其可以用于类的初始化。

你可能感兴趣的:(黑马程序员——Java 基础:静态)