码迷,mamicode.com
首页 > 编程语言 > 详细

my java note------------final

时间:2016-05-29 22:58:27      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

java final 关键字:

1 final数据
 1.1常数常见于两种情况:
  1. 编译期间的常数  
    例如: final int i1 = 0;
  2. 运行期间初始化的一个值,但不希望它发生变化
    例如: final int i2 = (int)(Math.random()*20);

  象上面这样,对基本数据类型使用final,使得其值不变。
  但是如果对一个对象句柄使用final,含义就不一样了。final会将句柄值变成一个常数,即句柄指向的对象不能发生变化,但是对象本身的只是可变的。
  需要注意的是:声明final 句柄时必须将句柄初始化到一个对象。

   1.2 空白final
  java 允许创建空白的final,如: final int i1; 但是,i1 需要在构造器中初始化,这并不违反final 必须要有值的要求。
  要么在定义时初始化,要么在构造器中初始化。这样可以保证final 字段在使用时获得正确的初始化。而且使用构造器初始化,带来了很大的灵活性

  1.3 final 自变量
  我们可以将自变量设成 final 属性,方法是在自变量列表中对它们进行适当的声明,如: public void test (final String str)。这意味着在一个方法的内部,我们不能改变自变量句柄指向的东西。
  注意:  此时仍然能为 final 自变量分配一个 null(空)句柄。这与我们对非 final 自变量采取的操作是一样的。

package mytest;

class Value { 
    int i = 1; 
    } 

public class TestFinal {
    final int i0 = 8;
    final int i1; 
    
    Value v1 = new Value(); 
    final Value v2 = new Value(); 
    static final Value v3 = new Value(); 
    final Value v4; 
    
    final int[] a = { 1, 2, 3, 4, 5, 6 }; 
    
    public TestFinal(){
        i1 = 9;
        v4 = new Value(); 
        v4.i = 9;
    }
     
    final int i4 = (int)(Math.random()*20); 
    static final int i5 = (int)(Math.random()*20); 
    
    public void print(final String id) { 
     // id can be null
         //! id = "hello"; //Error: can‘t change handle
         System.out.println( 
           id + ": " + "i4 = " + i4 +  
           ", i5 = " + i5); 
        }  

    public static void main(String[] args) {
        TestFinal fd1 = new TestFinal(); 
        //! fd1.i0++; // Error: can‘t change value 
        //! fd1.i1++; // Error: can‘t change value
         fd1.v1 = new Value(); // OK -- not final 
         fd1.v2.i++; // Object isn‘t constant! 
         
         for(int i = 0; i < fd1.a.length; i++) 
           fd1.a[i]++; // Object isn‘t constant! 
         
         //! fd1.v2 = new Value(); // Error: Can‘t change handle
         //! fd1.v3 = new Value(); // Error: Can‘t change handle
         //! fd1.a = new int[3]; // Error: Can‘t change handle

         fd1.print("fd1"); 
         System.out.println("Creating new FinalData"); 

         TestFinal fd2 = new TestFinal(); 
         fd1.print("fd1"); 
         fd2.print("fd2");
         fd2.print(null);
    }

}
===================== OUTPUT =========================
fd1: i4 = 6, i5 = 10
Creating new FinalData
fd1: i4 = 6, i5 = 10
fd2: i4 = 15, i5 = 10
null: i4 = 15, i5 = 10

 

2. final 方法

final + 方法   一般表示方法不能被子类继承,重写

3. final  类

final + Class  表示此类不能被继承

my java note------------final

标签:

原文地址:http://www.cnblogs.com/ct-blog/p/5540657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!