static是个修饰符
1.static修饰成员方法
static修饰的方法一般称作静态方法
静态方法没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。
静态方法中不能访问类的非静态成员变量和非静态成员方法(因为非静态成员方法/变量都必须依赖具体的对象才能够被调用,而静态方法不依附于任何对象)
当然了在非静态成员方法中是可以访问静态成员方法/变量的。
2. static修饰成员变量
static修饰的变量也称为静态变量
静态变量被所有对象共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。(因为static”独立“的特性)
非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
3. static修饰代码块
类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来依次执行每个static块,并且只会执行一次。
一些误区
1. 与C/C++中的static不同,Java中的static关键字不会影响到变量的变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected这几个关键字
2.在C/C++中static关键字是可以作用于局部变量的,但是在Java中是不允许使用static修饰局部变量的。
局部变量:就是在成员方法里面定义的变量