1.static变量      按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 
    对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。2,final变量:      当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。     当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。     另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用3.static final int 一般用于常量定义

解决方案 »

  1.   

    我想说,我做了十年java,几乎没有用过内部类。即使一个类的功能极其简单(也许只有一两行代码),也还是规规矩矩写一个类。而且再简单的类基本都用public修饰(除了在写form程序处理事件的时候)。所以我一直不知道用内部类到底能带来什么好处。
      

  2.   

    上面这句话是一楼说的,我通过测试证明这句话是错误的。请问一下到底为什么程序中红色的地方必须是final?有人回复我吗?
      

  3.   


    用final是为了让变量在内部类中可见啊,变量都要声明再使用,如果不用final,你的内部类都不知道xy变量哪来的。
      

  4.   

    方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,然而内部类的某个方法还没有执行完,这个时候他所引用的外部变量已经找不到了。如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变
      

  5.   

    刚用反编译工具查看了内部类的class 文件,上面说的作为成员变量内置在内部类中这点不对,final 修饰的局部变量,在内部类中还是作为局部变量的,只是在引用的地方都是仍然用的final 修饰的变量的值