网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > oop面向对象 > Static和Final修饰类属性变量及初始化  

Static和Final修饰类属性变量及初始化

2007-05-30  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.


public class Test{
       public static int a;
       private Test(){
       a=0;
      }
      } 网管联盟bitsCN_com 

如果属性被修饰为static静态类资源,那么这个字段永远只有一个,也就是说不管你new test()多少个类的对象,操作的永远都只是属于类的那一块内存资源.例如:

Test t1=new Test();
     t1.a=10;
     Test t2=new Test();
     System.out.println(t1.a);
     System.out.println(t2.a);
           System.out.println(Test.a); 网管论坛bbs_bitsCN_com 

结果是3个0

2.final 用于声明属性,方法和类,分别表示属性一旦被分配内存空间就必须初始化并且以后不可变,方法一旦定义必须有实现代码并且子类里不可被覆盖,类一旦定义不能被定义为抽象类或是接口,因为不可被继承。

而你的代码里对final修饰的属性进行了修改,所以错误.

3. 被final修饰而没有被static修饰的类的属性变量只能在两种情况下初始化:

a.在它被定义的时候,例:

public class Test{
         public final int a=0;
         private Test(){
         }
            } 中国网管论坛bbs.bitsCN.com 

b.在构造函数里初始化,例:

public class Test{
         public final int a;
         private Test(){
             a=0;
         }
            } 网管bitscn_com 

4.同时被final和static修饰的类的属性变量只能在两种情况下初始化:

a.在它被定义的时候,例:

public class Test{
         public final int a=0;
         private Test(){
         }
            } 

网管u家u.bitsCN.com

b.在类的静态块里初始化,例:

public class Test{
         public final int a;
         static{
             a=0;
         }
            } 中国网管联盟bitsCN.com 

5.分析第三第四原因:

第三条:当这个属性被修饰为final,而非static的时候,它属于类的实例对象的资源,当类被加载进内存的时候这个属性并没有给其分配内存空间,而只是定义了一个变量a,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化,以后不再改变的条件.

第四条:当类的属性被同时被修饰为static和final的时候,他属于类的资源,那么就是类在被加载进内存的时候(也就是应用程序启动的时候)就要已经为此属性分配了内存,所以此时属性已经存在,它又被final修饰,所以必须在属性定义了以后就给其初始化值.而构造函数是在当类被实例化的时候才会执行,所以用构造函数,这时候这个属性没有被初始化.程序就会报错.而static块是类被加载的时候执行,且只执行这一次,所以在static块中可以被初始化. 网管bitscn_com


TAGs
 上一篇:讲述java中内部类的研究   下一篇:为什么说Java中继承是有害的
Static和Final修饰类属性变量及初始化 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: