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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题