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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯国强 中级黑马   /  2013-12-14 17:58  /  1242 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

final修饰的变量是只能赋值一次,是在声明时给定初值,还是可以先声明,后赋值呢 ?

评分

参与人数 1黑马币 +5 收起 理由
乔兵 + 5

查看全部评分

7 个回复

倒序浏览
final修饰的变量既是常量了,是在声明时就给初值。常量到从一开始就是一个确定了的值,是不允许改变的。
回复 使用道具 举报
楼上的回答明显是有问题的。final修饰的变量是可以先声明,后赋值。但是只能给其赋值一次!thanks!
回复 使用道具 举报
final修饰的变量可以先申明后调用,而且final修饰的变量是一个常量,只能被赋值一次,不能修改。如果你要在后面调用一个final修饰的常量,你就必须要在调用这个常量之前给这个常量赋值,否在会报错。
回复 使用道具 举报
final修饰的变量,就是说声明后,只允许赋值一次,再次赋值就会报错.
还有个关于赋值的个小问题,很容易让人忽略.就是给变量赋值的位置.你可以先声明变量,然后再赋值.只要在你代码中用到之前声明的那个变量之前给他赋值就都是ok的.如果那个变量是final修饰的,那就只能赋值一次,如果不是final修饰的,就可以多次赋值.
  1. /*
  2. final:修饰变量的问题.
  3. */
  4. class Demo
  5. {        
  6.         public static void main(String[] args)
  7.         {
  8.                 final int a;
  9.                 a=100;//如果将这条赋值语句放到System.out.println(a);后,就会报错
  10.                 System.out.println(a);
  11.                 //a=100;
  12.         }        
  13. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
个人理解的:成员变量没有赋值的话会按变量类型赋于不同的默认值,局部变量使用前必须先赋值.
回复 使用道具 举报
本帖最后由 笑脸不在 于 2013-12-14 21:02 编辑

被final修饰的变量的赋值原则:只能赋值一次。                                                      赋值方式(两种):
赋值方式1:声明时赋值  final int x=3;
赋值方式2:声明后赋值,得区分2种情况
                    a、被final修饰的变量是局部变量:即在类内的函数内部声明的变量,那么在内部赋值一次就可以:final int x;x=3;
                    b、被final修饰的变量是成员变量时:一般建议使用赋值方式1,若使用声明后赋值的话必须得使用static修饰,而且赋值语句必须在静态代码块内(原因:若是成员变量被final修饰,而且没有初始化:那么赋值语句在类内部放置位置有3个:静态代码块、构造代码块、方法体内:若是在构造代码块和方法体内放置赋值语句,那么就不能保证这个赋值语句执行的唯一性(当定义多个对象或多次执行方法时:赋值语句会执行多次,违背赋值原则,所以赋值语句就只能放置在静态代码块内,所以这个被final修饰的成员变量一定是静态的),这种方式在开发时基本不会用~~~
示例:
class FinalTest
{        
        public static void main(String[] args)
        {
                final int a;//final修饰局部变量
                a=1;//可以在类内部赋值,但赋值语句一定要放置在使用这个变量的语句之前!
                System.out.println(a);
                System.out.println(new num().b);               
        }
}
class num
{
        static final int b;//final修饰成员变量
        static {b=4;}//静态代码块内给a赋值
}
补充:其实被final修饰的变量可以不赋值,但这个变量一定不能是成员变量(原因在赋值方式2的b条中已经说明)
也就是说局部变量可以被final修饰而不赋值,但在这个局部范围内不能使用这个局部变量了,也就是说这个声明时无意义的了.


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以修饰局部变量
当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字方便与阅读
而这个值不需要改变,所以加上final修饰,
内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

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