电脑技术学习

final和static之区别

dn001
内容: 昨天有弟兄问final和static的区别,我随便写几句.
大家继续补充,如果有不对的请纠正.
对于可以设置为final和static的类型有几种:

常量数据:这个我觉得达到的效果两者是一样的.但是可以肯定的一点是用final定义的,编译器会认为是编译期常量,从而进行编译优化..
而static只是表明"只有一个",我不能确定static定义的变量编译器是否会聪明的进行编译优化?

变量:我觉得final定义的变量和static定义的变量是有区别的.
final定义的变量是不能改变指向的句柄的.但是static是可以的,static只是表明这个变量是类变量,而不是instance变量.但是static指向的句柄应该
是可以改变的.
比如:final string fs;
初始化 fs="chris"; 那么fs永远都是指向"chris"这个对象的句柄,不可改变.
但是如果是static的变量的话,它指向的句柄应该是可以改变的.但是是一处改变,处处改变.

方法:final定义的方法不可继承,而且有时候会被编译器替换进去(这个有点象#define,但是,注意,是有时候,不是所有时候,这个和java编译器有关)
比如priviate方法其实就是final的,但不是static的.
Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd

标签: