赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2007.12.12 05:18     来源:赛迪网    作者:执木

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


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



如果属性被修饰为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);



结果是3个0


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


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


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


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



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



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



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



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


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



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



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



public class Test{
public final int a;
static{
a=0;
}
}



5.分析第三第四原因:


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


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

    (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 关于提高自己JAVA水平的十大技术讨论 (12-11) · Java基础知识:你是否了解KVM的常量池 (12-11)
· 基础:深入解析Java的新特性assertion (12-11) · 编程基础:深入分析Java中的数据结构 (12-11)
· Adapter 模式在 J2SE 事件处理中的应用 (12-11) · 不要重新分配被锁定对象的对象引用 (12-11)
· JAVA基础:Java编程中怎样实现中文排序 (12-11) · JDK Observer设计模式之深入研究 (12-11)
· 基于Java的代理设计模式 (12-11) · 在 Ajax 应用程序中实现数据之间交换 (12-11)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 推动产业升级 沪年内首推电子商务地方法规
· 中国域名成为全球顶级域名 促进社会信息化
· 签合同前的四问 谈八大厂商“云计算”理念
· 亚略特烟草解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统