static\final小结

来源:互联网 发布:mac os x 10.7 好用吗 编辑:程序博客网 时间:2024/06/05 18:34

static

static是静态修饰关键字可以修饰变量和程序块以及类方法:

当定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存;

当修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化;

当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。

static修饰变量

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:

对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

static修饰变量静态方法

可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

final

final可以修饰变量、方法及类:

当定义一个final变量时,java虚拟机会将其分配到常量池中,程序不可改变其值;

当修饰一个方法时,该方法在子类中将不能被重写;

当修饰一个类时,该类不能被继承.

①final static 变量

sataic表示这个变量是这个类的全体对象所共享的,一旦通过其中某个对象的引用去改变这个变量则其他对象再次引用这个变量时,得到的值也随之改变,因为所有的对象引用的其实是同一个内存地址的东西。而final则表示一旦定义了这个变量的值就不能再改变了,就是常量了。


0 0
原创粉丝点击