A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁春龙 黑马帝   /  2011-7-19 11:00  /  2564 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问我应该什么时候用static final,什么时候用final,什么时候用static也就是它们用途的区别?
[ 本帖最后由 袁春龙 于 2011-07-19  11:03 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1 加分了,知识就是要一个个扣

查看全部评分

3 个回复

倒序浏览
黑马网友  发表于 2011-7-19 11:36:10
沙发
首先,static是静态的、全局的。被static修饰的任何东西,都是隶属于类的。简单的说就是可以通过类名来引用的。
先看看如下代码:[code=java]package org.cxy.test;

public class Demo {
        private static final int NUMBER;
        private final int number;
        static{
                NUMBER = 5;
        }
        {
                this.number = 6;
        }
        public static void main(String[] args){
                System.out.println("NUMBER = "+Demo.NUMBER);
                System.out.println("number = "+new Demo().number);
        }
}[/code]语句“private static final int NUMBER;”
|-  含义为:定义一个“类常量”,它的值不可以更改,同时可以通过[color=Red]类名[/color]来引用。
语句“private final int number;”
|-  含义为:定义一个“常量”,它的值不可以更改,同时可以通过[color=Red]对象名[/color]来引用。

但是,不论是“类常量”还是“实例常量”亦或是“局部(方法内的)常量”,在使用这个常量之前都必须为其初始化(这好像是废话)。
“类常量”初始化方法:
|-  定义的同时为其指定值。
|-  在static块中为其赋值。
“实例常量”初始化方法:
|-  定义的同时为其指定值。
|-  在实例块中为其赋值。
|-  在构造器中为其赋值。
“局部常量”初始化的方法:
|-  和局部变量一样,在使用之前,为其赋值即可。
|-  但是“类常量”和“实例常量”即使您的程序中没有使用到它,也必须为其初始化。

至此,答案很显然了,若您需要使用“静态”的方式定义常量,那么使用static final就是了。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 cxy_zy回答总是有理有据,恭喜25分了

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:01:00
藤椅
在java中利用关键字final声明常量,关键字final表示这个变量只能赋值一次,一旦赋值后,就不能再改变了。当一个变量希望被一个类中的多个方法使用,那么可以用ststic 修饰,定义为全局变量。而且在程序运行是只被加载一次。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 积极参与,加分了

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:11:31
板凳
final可以用在类、方法、变量上。
     1、final用在类上,表明当前类它不能被继承,没有子类。
     2、final用在方法上,表明当前方法不能被override,不能被重写。
     3、final用在变量上,表明当前变量是一个终态的变量,是一个常量,这个变量的值一但被赋值后就不能被改变了。
     对于final(非static)类型的成员变量的初始化方式:
          1、声明变量时直接赋值
     2、在构造方法中完成赋值,如果一个类有多个构造方法,就要保证在每个构造方法中都要完成对该final类型变量的初始化工作。
     对于final static类型的成员变量的初始化方式:    必须在变量声明时直接赋值
     总之,对于final的成员变量,其值在初始化后是不可以再改变的:
     当其为原生类型时,这里的“不可变”指的是其值不可变;
     当其为引用类型时,这里的“不可变”指的是一经初始化就不能指向其它对象,引用不可变;即指向的存储地址不可修改,但指向的对象本身是可以修改的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 有理,加分

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马