static:静态的
用来修饰属性(成员变量),则该属性就成为类属性(不依赖于某个对象而存在),所有该类的实例对象公用这一个属性,任何一个实例改变了静态属性值,大家看到的都是修改过的值。在内存中static属性是所有类实例共有的内存地址。static来修饰方法,则该方法就成为静态方法,可以直接通过类名访问,一般在工具类中定义工具方法。
静态变量和实例变量的区别:
-
实例变量,依赖于实例对象而存在。访问实例变量的时候,必须通过实例对象来访问
-
实例变量,在内存中可以有多份(内存中创建了多少实例对象,就有多少实例变量)每个实例对象的实例变量互不影响。
-
静态变量,不依赖于对象而存在。直接和类关联,可以通过类名来访问。
-
静态变量,在内存中只有一份,被所有实例对象共享。
static的使用场景: -
static修饰的变量叫静态变量
-
static修饰的方法叫静态方法
-
static修饰的代码块叫静态代码块
public class MyStatic {
//定义静态变量
static int age;
public static void test(){
//静态方法可以直接调用静态变量
System.out.println(age);
}
//静态代码块会被直接执行并输出
static{
System.out.println("我是静态代码块");
}
public static void main(String[] args) {
//通过类名调用静态方法和变量
//MyStatic.age=15;
//MyStatic.test();
//通过创建对象来调用静态方法和变量
//MyStatic s1 = new MyStatic();
//s1.age = 10;
//s1.test();
}
}
static的特点:
所有静态(静态变量和静态方法)都属于类(全局)
- 静态属性和静态方法可以直接通过类名.静态属性 类名.静态方法()来使用,这是推荐的方式。当然也可以通过实例对象来访问静态属性和静态方法,但是这种做法是不推荐的
- 静态方法中,只能访问静态属性和其它静态方法,不能访问实例属性和实例方法
- 实例方法中,可以访问静态属性和静态方法,也可以访问实例属性和实例方法
- 静态代码块,在类被加载是自动调用。