黑马程序员技术交流社区

标题: 关键字final [打印本页]

作者: 梧桐树上的男人    时间: 2016-3-27 00:15
标题: 关键字final
final修饰成员变量有什么特点?
作者: Laopozini123    时间: 2016-3-27 08:30
很简单,final修饰的变量变为常量.
int i= 1;
final int j = 2;
i里面存储的值现在是1,但是可以通过后面的方法对i的值进行修改
但是j里面的值就变成了常量,只能调用这个值,而不能去修改j里面存贮的值

作者: lennycxy    时间: 2016-3-27 09:23
final的如果是地址可以改值的final int []arr = new int[5]
作者: 徐选伟Shirwee    时间: 2016-3-27 10:20
被修饰的成员变量变成了常量,不能被改变
作者: ipursue    时间: 2016-3-27 10:31
这个成员变量只能被赋值一次,并且赋值时机还有限制:必须在对象构造完成之前完成赋值。
作者: zhoubinjian    时间: 2016-3-27 12:56
被final修饰的变量是一个常量,只能被赋值一次,既可以修饰成员变量,也可以修饰局部变量。
作者: zxw    时间: 2016-3-27 13:37
final修饰的成员变量:
总体来说:只能被赋值一次;其次赋值时可以在声明变量时赋值,也可以在代码块中赋值,还可以在构造函数中赋值。
细分:如果该变量同时还被static修饰,则该变量只能在1、声明时赋值;2、静态代码块中赋值。
         如果该变量没有被static修饰,则该变量只能在1、声明时赋值;2、非静态代码块中赋值;3、构造函数中赋值。
作者: 向北_    时间: 2016-3-27 15:27
直接上代码.........

  1. public class TestFinal {
  2.         // 可以在构造代码块和构造器中赋值,
  3.         final int a;
  4.         static final int b;
  5.         // 定义时赋值 合法
  6.         final int c = 3;
  7.         final int d;
  8.         final char ch;

  9.         // 没有赋值 不合法
  10.         // final int d;
  11.         {
  12.                 a = 1;

  13.         }

  14.         static {
  15.                 // 只能在静态代码块
  16.                 b = 2;
  17.         }

  18.         public TestFinal() {
  19.                 // 构造代码块优先于构造器执行 之前已经被赋值 不合法
  20.                 // a = 4;
  21.                 d = 8;
  22.                 ch = 'c';
  23.         }

  24.         public void test() {
  25.                 // 普通方法不能为final修饰的成员变量赋值或初始化
  26.                 // d=6;
  27.                 // ch='a';

  28.         }

  29. }
复制代码





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