Java--关键字--static

static

静态修饰词,修饰成员变量和成员方法

前言

        static关键字可以修饰成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象。也就是说,既然属于类,就可以不靠创建对象来调用

定义

        当static修饰成员变量时,该变量成为静态变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对该类变量进行操作

静态变量

        静态变量:使用static关键字修饰的成员变量成为静态变量

定义格式:

	static 数据类型 变量名;
	
举例:
	static int numberID;

        比如说中国人,有姓名,年龄和国籍。只要是中国人,国籍肯定是中国,不必每个对象都存储一份,只需要存储一份,大家共享这一份。

public class Chinese {
    String name;
    int age;
    static String country;
    public Chinese() {
    }
    public Chinese(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void show() {
        System.out.println(name + "," + age + "," + country);
    }
}


public class Test {
    public static void main(String[] args) {
        // 类名.静态成员变量名
        Chinese.country = "西班牙";
        System.out.println(Chinese.country);
        Chinese c1 = new Chinese("范冰冰", 20);
        c1.country = "中国";
        c1.show(); // 范冰冰, 20, 中国
        Chinese c2 = new Chinese("李冰冰", 21);
//        c2.country = "中国";
        c2.show(); // 李冰冰, 25, 中国
        Chinese c3 = new Chinese("凤姐", 25);
//        c3.country = "中国";
        c3.show(); // 凤姐, 21, 中国
        c3.country = "美国";
        c1.show();
        c2.show();
        c3.show();
    }
}

优点

        static修饰的成员变量会存储在静态区,只有一份,节省内存,可以使用类名调用

静态方法

        当static修饰成员方法时,该方法称为静态方法。静态方法在声明中有static,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。
        静态方法:使用static关键字修饰的成员方法,习惯称为静态方法。

定义格式:

	修饰符 static 返回值类型 方法名 (参数列表) {
		// 执行语句     
	}
	
举例:
	public static void showNum() {
	   System.out.println("num:" +  numberOfStudent);  
	}

注意事项:

1. 静态方法可以直接访问静态变量和静态方法
2. 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问静态变量或静态方法
3. 静态方法中,不能使用this关键字
4. 总结:静态方法只能访问静态成员

调用格式

        被static修饰的成员可以并且建议通过类名直接访问。虽然也可以通过对象名访问静态成员

定义格式:

	// 访问类变量
	类名.类变量名;
	// 调用静态方法
	类名.静态方法名(参数);
	
举例:
	public class StuDemo2 {
	    public static void main(String[] args) {     
	        // 访问类变量
	        System.out.println(Student.numberOfStudent);
	        // 调用静态方法
	        Student.showNum();
	    }
	}

图解静态原理

static修饰的内容:
        1. 是随着类的加载而加载的,且只加载一次。
        2. 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
        3. 它优先于对象存在,所以,可以被所有对象共享
如下图所示:
Java--关键字--static

静态代码块

静态代码块:定义在成员位置,使用static修饰的代码块{}
        位置:类中方法外
        执行:随着类的加载而执行,且各执行一次

定义格式:

   public class ClassName {
       static {
          // 执行语句   
       }
   }

举例:
   public class Game {
       public static int number;
       public static ArrayList<String> list;
       static {
           // 给类变量赋值
           number = 2;
           list = new ArrayList<String>();
           // 添加元素到集合中
           list.add("张三");
           list.add("李四");
       }
   }

总结

        static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况
下,去调用方法。下面将介绍两个工具类,来体现 static 方法的便利。