Java中static和final的作⽤
java中的两个关键字:static和final是⾮访问的修饰符,⽤法⼤致相似,但也有⼀些不同,现在我们来讨论⼀下。
static:
1、static修饰符代表静态,Java中的变量或⽅法都只会有两种状态,静态或者动态,静态的变量或⽅法是定义类的时候,直接写进了⽅法区⾥,也就是直接写在了内存中,即使不赋值也会有⾃⼰的默认值。⽽动态的变量和⽅法顾名思义,是要先在内存中开辟⼀⽚空间,然后才开始给内存⾥写东西。类似于new关键字这样,先开辟空间。定义的时候内存中是没有的。要⾃⼰动态创建。
静态变量:static修饰的成员变量独⽴于该类的任何对象,就是该类的所有对象共享的。⽆论定义多少个对象,静态变量只有⼀份。只要加载这个类,在⽅法区⾥就会给静态变量开辟空间。注意:局域变量不能被声明为静态的。因为局域变量是动态创建的,内存中没有。
静态⽅法:在Java中动态⽅法中可以调⽤静态⽅法,因为静态⽅法确确实实存在,⽽静态⽅法不能调⽤动态⽅法,因为要动态创建。可以创建个对象之后,⽤对象在静态⽅法中调⽤动态⽅法。因为此时在内存中已经为对象开辟了⼀⽚内存。所以可以调⽤。举个例⼦:
运⾏结果为:
static修饰的变量由于静态⽅法是所有对象所共享的,所以在静态⽅法中不能使⽤this,super等关键字。⽽且只能访问类中静态的成员变量或成员⽅法。
静态代码块:⽤static独⽴于成员的语句块,当类加载时,JVM会执⾏这些代码块。和构造⽅法不同当加载类后就会执⾏。并且只会执⾏⼀次。
static和final:⽤static和final修饰的变量不能被修改,⽗类⽤static和final修饰的成员⽅法⼦类不能重写。
final:
fina修饰变量:final能修饰成员变量、静态变量和局部变量。这些变量的初始化时要么定义时初始化,要么在构造⽅法中初始化。final变量在定义时可以先声明⽽不赋值,成为final空⽩,⽆论什么时候编译器要确保final空⽩在调⽤时必须要初始化。(⼀般你直接写上会⽐较好,还⽅便)
final修饰⽅法:如果⼀个类不允许⼦类覆盖某个⽅法,就把这个⽅法声明为final⽅法。
final修饰类:⽤final修饰的类不能被继承,即为最终类。在设计类时,如果不希望被继承就定义为final。其中的成员⽅法都默认是final 的。
其实吧,就可以把final理解成为⼀个锁,这个锁锁住的东西是不能被改变的。final在内存空间中不像static⼀样,可以开辟内存空间,因为final可以声明局部变量,所以两者还是有区别的。static开辟空间让所有对象共享这⼀⽚数据,⽽final则是个锁,锁住这⽚数据你想看、想调⽤可以,想改变就不⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。