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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董志超 中级黑马   /  2012-9-30 06:27  /  2162 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 董志超 于 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修饰后会失败

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
因为final修饰的变量需要显示的初始化。
而一般的系统会进行默认的初始化。基本数据类型全部为0,引用类型为null

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 很给力!

查看全部评分

回复 使用道具 举报
成员变量没有赋值的情况下 本身会进行默认初始化,
加final后会使该变量变为终态无法再进行任何初始化,所以
在加final前必须先给该变量赋值 使其在加final后成为一个常量
回复 使用道具 举报
1.final的意义是最终的,用于修饰类,方法,和变量,其意思是不能改变。
2.用final修饰变量,声明该变量的值不能被改变,相当于一个常量。
3.常量一班必须的初始化,可以在个别局部暂时不初始化,但是随后也要进行初始化。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
final常量必须初始化后才能使用
回复 使用道具 举报
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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
final  int a;  代表这个变量a 已经变成常量了,常量在定义的时候就是要被初始化的,而且只能被赋值一次,
例如: final int a=10;
你不定义时赋值 也行,那你就得在构造函数中赋值(其实也叫初始化),如:
final int a;
Test1(int x)
{
    this.a=x   ;
}
其实归根到底 就是一个道理!!!!!!!常量一定要被初始化!!!!!

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李铁 中级黑马 2012-9-30 13:58:58
8#
final 用于声明属性,方法和类,变量;分别表示属性不可变,方法不可覆盖,类不可继承,变量不能被改变.
用final修饰的常量可以当作一个常量使用,必有初化,否则将编译失败;初始化后就不能被改变。

评分

参与人数 1黑马币 +30 收起 理由
王海宇 + 30

查看全部评分

回复 使用道具 举报
用final修饰的变量相当于常量,常量必须显示的初始化,不然编译时不会通过。
而系统默认的情况下,变量会有默认值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马