static
1、static要解决什么?
即使没有创建对象,也能使用属性和调用方法。
2、特点
- 在类被加载的时候,就会去加载被static修饰的部分。
- 当一个类加载完毕之后,即便没有创建对象,也可以去访问。
3、static可以修饰本地变量吗
不能,static只能修饰成员变量!
4、静态变量
静态变量属于类本身,不属于类对象。
实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。
静态变量:静态变量由于不属于任何实例对象,是属于类的,所以在内存中只会有一份,在类的加载过程中,JVM为静态变量分配一次内存空间。
5、静态方法
对于静态方法来说是不属于任何实例对象的,也就是说在静态方法内部是不能使用this。
6、静态方法会被子类继承吗?
会被子类继承,但不能被重写(也就是不能用override注解该方法)。然而子类可以覆盖父类的该static方法(也就是不使用override注解该方法)。
7、静态内部类
静态变量和静态方法会出现这个语法错误:static methods can only be declared in a static or top level type。其意思是static方法只能在静态或者顶级类型(顶级类型应该就是外部类中)中声明。原因在于静态变量和静态方法都只需要通过类名就能访问,不必通过任何实例化对象;而普通内部类的初始化要利用外部类的实例化对象,这明显违背了static的设计初衷。
因此普通内部类里面不能定义各种静态的成员(包括静态变量、静态方法、静态代码块和静态内部类),而静态内部类中则可以。