static 是静态修饰关键字,可以修饰变量和程序块以及类方法: |
当定义一个 static 的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存; |
当修饰一个程序块的时候(也就是直接将代码写在 static {...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化; |
当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。 |
final 可以修饰变量、方法及类: |
当定义一个 final 变量时,jvm会将其分配到常量池中,程序不可改变其值; |
当修饰一个方法时,该方法在子类中将不能被重写; |
当修饰一个类时,该类不能被继承。 |
|
static 变量 |
按照是否静态的对类成员变量进行分类可分两种:一种是被 static 修饰的变量,叫静态变量或类变量;另一种是没有被 static 修饰的变量,叫实例变量。两者的区别是: |
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 |
2 . static 方法 |
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用 this 和 super 关键字,不能直接访问所属类的实例变量和实例方法(就是不带 static 的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为 static 方法独立于任何实例,因此 static 方法必须被实现,而不能是抽象的 abstract 。 |