如题
解决方案 »
- 定时器停止
- 如果觉得Swing 写烦了,给大家推荐一个新的GUI框架 Pivot.
- 在子panel里可不可以用类似setVisible关闭主窗体 !!panel是自定义加载到窗体上的!!
- JDK1.5升级如何升呢?
- 一个编码问题,不知道哪位兄台碰到过,急急急!!!!
- 还是import?
- 关于Java中文显示乱码问题
- 请教抽象类在实践中的应用
- 控制台怎么录入数据阿??谢谢
- 请教一个Java的Swing技术问题.
- [求助] Component类里的createImage(int w, int h) 怎么理解?
- java.net.SocketException: Connection reset错误
static final 加上静态修饰符,这个变量就属于类,而不是某个对象。
2、static final就是一次性的类变量,而不用static时是一次性的对象变量
如过是对象,那么你还是可以在引用所指的堆中改变对象的实质的。
如果你已经将一个变量声明为final的,即不可变,而且每创建一个对象多要初始化一个此变量,也没有什么实质的意义那么通常情况下还不如声明
为static final,那样,就只有一份不可变的,降低了性能的开销,优化了设计。
final修饰了只能是常量了。必须在声明时赋值,或在构造中赋值,一旦赋值就不可改变。
static final只不过是加了一个static了 在Java中是可以使用类名和对象来调用的。就是比直接final修饰多加了一个static限定。
1.final修饰的变量
2.final修饰的常量
3.static final修饰的变量以上1和2其实是同一个概念,final修饰的变量也称为有名常量(named constant),那么楼主的问题现在就变成了:final修饰的变量,和static final修饰的变量,这两者有什么区别1.static final修饰的变量
通常情况下,声明named constant域的时候,都会同时把它声明为static,因为正如11楼所说,可以降低系统开销。2.final修饰的变量
但是在某些特殊情况下,我们只能用final而不能用static修饰,例如一个Employee类,里面有一个name域,表示雇员姓名,雇员姓名一旦在构造函数中被设置,以后就不能更改,所以name应该声明为final。但是name是属于每个雇员的(也就是Employee类的每个实例对象),而不是属于整个Employee类的,所以这时候,就不可声明为static。
static final只能用来修饰类的域(Field)
final既可以用来修饰域(此时通常同时也声明为static),也可以修饰方法中的局部变量
其值可以改变,在内存中有多个拷贝,每个对象一份
2 final修饰的变量
其值不能改变,在内存中有多个拷贝,每个对象一份
3 static final修饰的变量
其值不能改变,在内存中只有一个拷贝(节约了内存),
在程序启动时自动加载到内存(提高了程序的执行的可靠性)。
用Final修饰的常量要访问时,需要创建一个对象, 而用static Final修饰的常量要访问时不需要创建对象,直接用类名.+常量。深层原因:当类被类装载器装到内存时,static Final常量首先被初始化,并且被所有对象共享,这样就大大减少了空间和时间。 而Final常量只有创建对象时才能访问,而且每创建一个对象,就会为这个Final常量分配一个空间。另外,Final 和 static Final 各有长处,要根据需要选择哪种方式。