vivinamie 2010-04-03 15:01
浏览 216
已采纳

java中的final修饰符怎么用?

public class TestAccount{
public static void main(String[] args){
Account c1=new Account();
Account c2=new Account();
System.out.println(c1.id);
System.out.println(c2.id);
}
}
class Account{
static long sid=100000L;
final long id;

public Account(){
    sid++;
    id=sid;
}

}

请问:final修饰的id不是不能改变值吗?为什么可以在account中改变?
id是全局变量吗?出现在account中的应该是局部变量吧

  • 写回答

6条回答 默认 最新

  • iteye_2672 2010-04-08 14:17
    关注

    static和final并不是一定要一起用的,static修饰成员变量是指只在类加载的时候编译一次,将其存放在静态区域,在以后的调用中不用再重新加载,
    eg:
    public class A {

        public static int x = 5;
    
        public void add() {
          x ++;
        }
    public static void main(String[] args) {
        A a = new A();
        a.add();
        System.out.println(a.x);
        A b = new A();
        System.out.println(b.x);
    }
    

    }
    6
    6

    而final就是一个编译期常量,他只能要求一次复制,不允许二次赋值,这就在一定程度上保证了程序的安全性;

    还有一个需要说明的是,构造方法虽然没有声明,但他默认的是static方法,故也只在类加载的时候加载一次,因此你的这个类
    class Account{
    static long sid=100000L;
    final long id;

    public Account(){
    sid++;
    id=sid;
    }
    }
    在类加载的时候只是加载了
    static long sid=100000L; 和构造方法,由于是静态的,所以每次new Account的时候,sid的值改变同时id的值也改变,若修改为
    class Account{
    static long sid=100000L;
    final long id;

    [color=red]public void Account(){
    sid++;
    id=sid;
    } [/color]
    }
    则会报错。

    以上是我个人的理解,希望和大家一起进步

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条