1.静态成员变量
* 在类中,用static声明的成员变量为静态成员变量,它是该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。
* 静态成员可以通过类名(不需要实例化)或类的实例去访问
* 静态成员变量,它有专属的数据区,类加载进内存的时候,静态属性也同时加载到专属的数据区
* 静态成员变量,是唯一的,它属于类的,访问方法:类名.静态属性,所以静态成员变量称为,类变量 类属性
2.静态方法
* 用static声明的方法为静态方法,该方法独立于类的实例,所以也叫类方法;无static修饰的方法是实例方法
* 静态成员方法,它有专属的方法区,类加载进内存的时候,静态方法也同时加载到专属的方法区
* 静态成员方法,是唯一的,它属于类的,访问方法:类名.静态方法,所以静态成员方法称为,类方法
* 静态方法中只能调用本类中其他的静态成员(变量和方法)
* 静态方法中不能使用this和super关键字
* 在静态方法里面无法调用非静态属性,原因:非静态属性,它属于对象,只有new 对象,给它进行赋值,这样调用时候,才具有实际意义,而,静态方法是可以通过 类名.静态方法 进行访问,即使没有new这个对象也是可以访问
* 静态方法不可访问非静态方法,但是,反过来,非静态方法可以访问静态方法
* 子类也可以继承父类的静态方法
* 子类不能重写父类的静态方法
3.静态代码块
* 在类中可以使用不包含在任何方法中的静态代码块(static block),当类被JVM载入时,静态代码块被执行,且只被执行一次
* 类加载后其他模块执行顺序:static代码块 -- > 非静态代码块 ---- > 构造函数
* 静态代码块经常用来初始化类的静态成员变量
* 静态代码块中,不能访问非静态属性,可以访问静态属性,或者静态方法
4.其他
* 静态方法和非静态方法里都不能定义静态变量???【解答】因为静态变量是类的变量,如果在方法中定义,就不算是类的变量了
**简单点记忆:static声明的东东都是属于类,不属于对象,对象如果想用,必须new一个实例,静态的东东是共有财产,公家不能使用私有财产(非static的东东),但私人可以使用公家的财产;公家财产可以遗传,但是祖宗的东西不能变**
* 使用静态static关键修饰的方法或属性或代码块都是按声明的顺序加载入内存,所以,在调用过程中一定要注意顺序。 非静态,没有这个限制
* 接口中的抽象方法需要被重写,所以不能是static的
* static 和 final 的区别:static定义后在可以修改(不在子类),final定义后不能修改
5.final的作用
1)修饰类:表示该类不能被继承
2)修饰方法:表示方法不能被重写
3)修饰变量:表示标量只能一次赋值以后不能被修改(常量)