此段代码的作用是什么,求教

初心不负111 2016-07-22


class Apple {

private static long counter=0;//会被赋值为0
private final long id=counter++;//
public long id(){
return id;
}


}
u010372981 2016-07-22
/**
 * Created by csucoderlee on 16/7/22.
 */
public class Apple {

    private static long counter=0;//会被赋值为0
    private  final long id=counter++;//
    public long id(){
        return id;
    }

    public static void main(String[] args) {

        Apple apple1 = new Apple();
        Apple apple2 = new Apple();

        //用final修饰的成员变量表示常量,值一旦给定就无法改变
        System.out.println(apple1.id());
        System.out.println(apple1.id());
        System.out.println(apple1.id());
        System.out.println(apple1.id());
        System.out.println(apple1.id());

        //被static修饰的成员变量和成员方法独立于该类的任何对象
        System.out.println(apple2.id());
        System.out.println(apple2.id());
        System.out.println(apple2.id());
        System.out.println(apple2.id());
        System.out.println(apple2.id());

    }
}



count++ 在将count值为0 赋给id后,count的值就变为了1 ,对象apple1和对象apple2是共享count变量的,而final一旦被赋值就无法被改变了。

如果你对这个还是不理解或者是深入想了解,建议去看看java的内存机制,堆和栈都是用来存何种变量的。
初心不负111 2016-07-22
是不是可以这样理解(每创建一个对象count的值都会加1   而count值是 静态的存储时只有一份,是这个类所共享的类变量,,final的意思是相同的对象是无法改变id值的,因为final一旦被赋值就无法再改变,除非它又指向了另一个对象,这保证了相同对象不被重复计数)[/size][color=blue][/color]
Global site tag (gtag.js) - Google Analytics