CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

将final数值声明为static和声明为non-static有什么不同呢?

楼主mimi_eleven(合子,我就是喜欢你。)2003-11-01 18:15:37 在 Java / J2SE / 基础类 提问

下面的是编译期不能确定其值。  
  final   int   i1   =   (int)(Math.random()   *   20);  
  static   final   int   i2   =   (int)(Math.random()   *   20);  
  这个是在编译期可以确定其值:  
  final   int   i3   =   9;  
  static   final   int   VAL_TWO   =   99;  
   
  请问在这两种情况下,将final数值声明为static和声明为non-static有什么不同呢? 问题点数:20、回复次数:9Top

1 楼haoqingshi(飞翔)回复于 2003-11-01 18:25:56 得分 0

static   是静态变量,可以由类直接访问的。而non-static是需要由对象来访问的Top

2 楼phantomhu(风水)回复于 2003-11-01 18:45:07 得分 0

static  
  在类没有实例化就可以调用Top

3 楼zhangjiangbochina()回复于 2003-12-03 15:16:29 得分 2

final  
  意味着无法改变,其用途是限定某一个元素为常量.  
  即不能指向其它的对象:  
  例:  
  void   simeMethod(final   myclass   c,final   int   a[])  
  {  
      c.field=7;  
      a[0]=7;  
      c=new   myclass();//error  
      a=new   int[13];     //error  
  }Top

4 楼Shrewdcat(丧邦&灵猫&潇)回复于 2003-12-03 15:30:54 得分 2

Static   型类变量是在第一次载入该类是分配内存空间的,而且是分配一次,对应的内存地址是一直不变的,但内存中存放的值可以改变,在添加final   声明,意味者以后该object   Reference   对应的内存中值也不能再发生变化了。  
   
    简单说就是内存只有一份,且不能在改变其值。  
   
  你的问题应该说是static下,有无final的同还是不同。Top

5 楼clare0peng(克雷尔)回复于 2003-12-03 15:31:12 得分 4

static是静态的,它属于整个类,直接用类名可以调用  
  如果没有标明为static则属于对象,必须把类实例化,产生的对象去调用Top

6 楼Shrewdcat(丧邦&灵猫&潇)回复于 2003-12-03 17:12:14 得分 4

//   The   effect   of   final   on   fields.  
   
  class   Value   {  
      int   i   =   1;  
  }  
   
  public   class   FinalData   {  
      //   Can   be   compile-time   constants  
      final   int   i1   =   9;  
      static   final   int   VAL_TWO   =   99;  
      //   Typical   public   constant:  
      public   static   final   int   VAL_THREE   =   39;  
      //   Cannot   be   compile-time   constants:  
      final   int   i4   =   (int)(Math.random()*20);  
      static   final   int   i5   =   (int)(Math.random()*20);  
       
      Value   v1   =   new   Value();  
      final   Value   v2   =   new   Value();  
      static   final   Value   v3   =   new   Value();  
      //   Arrays:  
      final   int[]   a   =   {   1,   2,   3,   4,   5,   6   };  
   
      public   void   print(String   id)   {  
          System.out.println(  
              id   +   ":   "   +   "i4   =   "   +   i4   +    
              ",   i5   =   "   +   i5);  
      }  
      public   static   void   main(String[]   args)   {  
          FinalData   fd1   =   new   FinalData();  
          //!   fd1.i1++;   //   Error:   can't   change   value  
          fd1.v2.i++;   //   Object   isn't   constant!  
          fd1.v1   =   new   Value();   //   OK   --   not   final  
          for(int   i   =   0;   i   <   fd1.a.length;   i++)  
              fd1.a[i]++;   //   Object   isn't   constant!  
          //!   fd1.v2   =   new   Value();   //   Error:   Can't    
          //!   fd1.v3   =   new   Value();   //   change   reference  
          //!   fd1.a   =   new   int[3];  
   
          fd1.print("fd1");  
          System.out.println("Creating   new   FinalData");  
          FinalData   fd2   =   new   FinalData();  
          fd1.print("fd1");  
          fd2.print("fd2");  
      }  
  }   ///:~Top

7 楼rainboy20024(笨猪)回复于 2003-12-04 11:30:52 得分 4

class   St{  
  int   i=0;  
  void   add(){  
      System.out.println(i++);  
  }  
  public   static   void   main(String   args[]){  
      for(int   i=0;i<100;i++){  
  St   s=new   St();  
  s.add();  
  }  
  }//end   of   main  
   
  }//打印出0  
  class   St{  
                  static   int   i=0;  
  void   add(){  
      System.out.println(i++);  
  }  
  public   static   void   main(String   args[]){  
      for(int   i=0;i<100;i++){  
  St   s=new   St();  
  s.add();  
  }  
  }//end   of   main  
   
  }//打印0   to   99Top

8 楼rainboy20024(笨猪)回复于 2003-12-04 11:31:58 得分 0

class   St{  
  static   final   int   i=0;  
  void   add(){  
     
      System.out.println(i++); //!错误  
  }  
  public   static   void   main(String   args[]){  
      for(int   i=0;i<100;i++){  
  St   s=new   St();  
  s.add();  
  }  
  }//end   of   main  
   
  }Top

9 楼hymarx(哇噻)回复于 2003-12-04 12:02:34 得分 4

下面的是编译期不能确定其值。  
  final   int   i1   =   (int)(Math.random()   *   20);//有对象才存在,没个对象创建后保持常量,再创建新对象,就是另外一个值了,在某个特定对象内部有效  
  static   final   int   i2   =   (int)(Math.random()   *   20);//全局有效果,不以来对象,整个类加载器上都是常量  
  这个是在编译期可以确定其值:  
  final   int   i3   =   9;  
  static   final   int   VAL_TWO   =   99;  
   
  Top

相关问题

  • 不同数值查询
  • 请教不同form之间传递数值的问题
  • 不同数值范围查询怎么做?
  • 用opensheetwithparm不能打开两个一样的窗口(传输参数值不同)
  • 弱弱地问,关于往DataTable的不同行里添加数值
  • 能用一个查询语句查询不同数值范围的变量吗?
  • 再 vb.net 不同的窗体中 如何进行数值的传递?
  • DataGrid里边如何根据绑定数值的不同显示不同的内容
  • 数值转换
  • 数值转换

关键词

  • 内存
  • final
  • finaldata
  • 声明
  • static
  • non
  • 类
  • constant
  • 对象
  • 不同

得分解答快速导航

  • 帖主:mimi_eleven
  • zhangjiangbochina
  • Shrewdcat
  • clare0peng
  • Shrewdcat
  • rainboy20024
  • hymarx

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo