黑马程序员技术交流社区

标题: final的问题? [打印本页]

作者: 董志超    时间: 2012-9-30 06:27
标题: final的问题?
本帖最后由 董志超 于 2012-10-1 08:06 编辑

class Test {
    int a;
    public void show() {
        System.out.println("a= " + a);
    }
}
//输出结果为0.    



class Test1 {
    final int a;
    public void show() {
        System.out.println("a = " + a);
    }
}
//失败
//为什么成员变量用final修饰后会失败

作者: 郑世光    时间: 2012-9-30 07:10
因为final修饰的变量需要显示的初始化。
而一般的系统会进行默认的初始化。基本数据类型全部为0,引用类型为null
作者: 尤洋    时间: 2012-9-30 07:32
成员变量没有赋值的情况下 本身会进行默认初始化,
加final后会使该变量变为终态无法再进行任何初始化,所以
在加final前必须先给该变量赋值 使其在加final后成为一个常量
作者: 胡斌    时间: 2012-9-30 08:16
1.final的意义是最终的,用于修饰类,方法,和变量,其意思是不能改变。
2.用final修饰变量,声明该变量的值不能被改变,相当于一个常量。
3.常量一班必须的初始化,可以在个别局部暂时不初始化,但是随后也要进行初始化。
作者: 翁鹏    时间: 2012-9-30 08:26
final常量必须初始化后才能使用
作者: 崔朋朋    时间: 2012-9-30 10:02
final常量,用final修饰的变量不能被修改,且在声明时必须显示的初始化,否则编译不通过。
对于没用final修饰的变量,基础数据类型的初始值与数据类型有关,引用类型的初始值为null


测试代码如下:
  1. public class InitTest {
  2.         //引用数据类型
  3.         private static String str;
  4.         //基础数据类型
  5.         private static int i;
  6.         private static float f;
  7.         private static double d;
  8.         private static boolean flag;
  9.         //private static final int i1;  此处i1若不初始化,则编译不通过
  10.        
  11.         public static void main(String[] args) {
  12.                 System.out.println("str=   "+str);
  13.                
  14.                 System.out.println("i=   "+i);
  15.                 System.out.println("f=   "+f);
  16.                 System.out.println("d=   "+d);
  17.                 System.out.println("flag=   "+flag);
  18.         }

  19. }
复制代码

作者: 黑马-王燚    时间: 2012-9-30 13:22
final  int a;  代表这个变量a 已经变成常量了,常量在定义的时候就是要被初始化的,而且只能被赋值一次,
例如: final int a=10;
你不定义时赋值 也行,那你就得在构造函数中赋值(其实也叫初始化),如:
final int a;
Test1(int x)
{
    this.a=x   ;
}
其实归根到底 就是一个道理!!!!!!!常量一定要被初始化!!!!!
作者: 李铁    时间: 2012-9-30 13:58
final 用于声明属性,方法和类,变量;分别表示属性不可变,方法不可覆盖,类不可继承,变量不能被改变.
用final修饰的常量可以当作一个常量使用,必有初化,否则将编译失败;初始化后就不能被改变。

作者: 徐-星星    时间: 2012-9-30 17:29
用final修饰的变量相当于常量,常量必须显示的初始化,不然编译时不会通过。
而系统默认的情况下,变量会有默认值。




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