java-final

 final int i; // 因为要在构造函数中进行初始化,所以此处便不可再给值

 final int i2 = (int) (Math.random() * 20);

 static final int i3 = (int) (Math.random() * 20);

Bat() {

        i = 100;

    }

publicstaticvoidmain(String[] args){

        Bat b = new Bat();

       // b.i=25;   syntax error  i是不可变的    

      System.out.println( "bbbb: " + "i2 = " + i2 + ", i3 = " + i3);//bbbb: i2 = 4, i3 = 6

      Bat c = new Bat();

     System.out.println( "cccc: " + "i2 = " + i2 + ", i3 = " + i3);//bbbb: i2 = 6, i3 = 6

    }

总结:在同一个对象里final是不可变的!在不同对象就不一定了!所以单纯的final修饰是只针对一个对象的

而在final前加入static后则变为修饰类了,是类变量,只会被加载一次,所以i3无论新建多少个对象都还是6!

所以:一定要区分final与static final的细微差别。

你可能感兴趣的:(java-final)