final作用与数据来说,是不是只要不是基本的数据类型,就可以发生改变呢?
比如:
class finalData{
  final int arr[]={1,2,3,4,5,6};
}class AccessTest{
  public static void main(String args[])
    {
      final finalData fa=new finalData();
      for (int i=0; i<fa.arr.length; i++)
        {
          fa.arr[i]++;
          System.out.print(fa.arr[i]);
        }      
    }
}这样的话,还定义数组arr为final有什么目的呢?

解决方案 »

  1.   

    定义为final类型得基本变量是不能修改数值得
    定义为final类型得对象(数组可以看作一种特殊得对象)是不能修改其地址得 
    例如你如果写 fa.arr = new int[6];就不行
      

  2.   

    final primitive variable ,不可以改变数值
    final Object              不可以改变引用,但可以改变属性
    final Method              不可以overwrite
    final Class               不可以被继承
    -----------
    请指正
      

  3.   

    是 override 不是overwrite
      

  4.   

    final int arr[]={1,2,3,4,5,6};
    这句是final的对象把?
    而不是arr的元素的值?
      

  5.   

    final的方法不可以被覆盖,可不可以被重载呢?
      

  6.   

    final int arr[]={1,2,3,4,5,6};
    表示数组arr具有final属性,即3楼提到的final Object(在java中数组是按照Object来进行处理的).
    因此,不可以改变arr的引用,如:
    arr = new int[6]; //出错, arr引用了新的数组对象
    但是,可以改变arr本身的属性,如:
    arr[2] = 10;
      

  7.   

    可以overload 但不可以override(overwrite)
    以下代码运行结果如下: 
    E:\java>java Test2
    Test.f(): 6
    Test2.f(): 10.0
    Test.f(): 6
    Test.f(): 6
    -----------------------------------
    class Test {
    final void f(int i, int j){
    System.out.println("Test.f(): " + (i+j));
      }
    }
    public class Test2 extends Test {
    final void f(double i, double j) {
    System.out.println("Test2.f(): " + (i*j));
    }
    //final void f(int i, int j){}  不可以override
    public static void main(String args[]) {
    Test2 t = new Test2();
    t.f(2,4);
    t.f(2.5,4);
    Test t2 = new Test2();
    t2.f(2,4);
    Test t3 = new Test();
    t3.f(2,4);
    }
    }
      

  8.   

    关于final,可以修饰变量,类或者方法
    如果是基本数据类型,则表示是常量
    如果是引用变量,则意味着不能让该变量指向其他的对象
    如果是类,则表示不允许任何类扩展该类,也就不能声明新的子类继承它了
    如果是方法,则该方法不允许进行覆盖,但重载是没问题的。
    这样清楚吧? :)
      

  9.   

    建议cozmic(蓝色的猪)把代码改为:
     另:方法重载应该指在同一类中定义多个同名的不同方法。
    class Test {
    final void f(int i, int j){
    System.out.println("Test.f(): " + (i+j));
      }
    }
    public class Test22 extends Test {
    final void f(double i, double j) {
        System.out.println("Test2.f(): " + (i*j));
    }//父类方法被子类覆盖
    //final void f(int i, int j){System.out.println("Test2.f(): " + (i*j));}  //不可以override
    public static void main(String args[]) {
    Test t = new Test22();
    t.f(2,4);
    Test22 t1 = new Test22();
    t1.f(2.5,4);
    Test t2 = new Test22();
    t2.f(2,4);
    Test t3 = new Test();
    t3.f(2,4);
    }
    }
      

  10.   

    数组也是引用,当final作用于对象引用时,这个引用只能指向已被初始化的对象,不能再指向另一个对象,但对象本身也可改变,你可以自己写一个类来实现你想要的。
      

  11.   

    final 基本变量 int char long 等. 其值不允许改变.
    final 引用 此引用本身不可改变.(不可引用别的对象) 但此对象的内容无影响.
    final 方法 不可以重写.
    final 类 不能继承.