黑马程序员技术交流社区

标题: final修饰的变量 [打印本页]

作者: 冯国强    时间: 2013-12-14 17:58
标题: final修饰的变量
final修饰的变量是只能赋值一次,是在声明时给定初值,还是可以先声明,后赋值呢 ?
作者: kun1990    时间: 2013-12-14 18:05
final修饰的变量既是常量了,是在声明时就给初值。常量到从一开始就是一个确定了的值,是不允许改变的。
作者: 肤浅    时间: 2013-12-14 19:21
楼上的回答明显是有问题的。final修饰的变量是可以先声明,后赋值。但是只能给其赋值一次!thanks!
作者: 恩恩    时间: 2013-12-14 19:37
final修饰的变量可以先申明后调用,而且final修饰的变量是一个常量,只能被赋值一次,不能修改。如果你要在后面调用一个final修饰的常量,你就必须要在调用这个常量之前给这个常量赋值,否在会报错。
作者: 高亮亮    时间: 2013-12-14 19:41
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. }
复制代码

作者: 丑男先生。    时间: 2013-12-14 19:43
个人理解的:成员变量没有赋值的话会按变量类型赋于不同的默认值,局部变量使用前必须先赋值.
作者: 笑脸不在    时间: 2013-12-14 20:58
本帖最后由 笑脸不在 于 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修饰而不赋值,但在这个局部范围内不能使用这个局部变量了,也就是说这个声明时无意义的了.



作者: 豆晨阳    时间: 2013-12-15 17:56
被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以修饰局部变量
当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字方便与阅读
而这个值不需要改变,所以加上final修饰,
内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2