LotusLoveNature

日常工作,生活小记

Java 类属性静态与非静态的区别

       以前经常不会谨慎使用静态属性,非静态属性,还有类静态块。今天发现这会引起的问题时很大的。比如我手机存储卡有一个文件夹,我在类属性用静态初始化。初始化的时候判断如果该目录不存在就创建。这时,第一次启动的时候我将此目录删除,我本以为下次启动的时候会自动创建它。当下次启动的时候,我发现该文件夹并没有被创建。我在类头部加入静态块,里面打了log。发现只有第一次才会执行静态块,第二次并不会执行。我想静态属性应该是同一个道理。这时,我将静态属性改成非静态。测试发现,该属性的赋值方法每次都会执行。

      所以,静态属性,静态块因为作用域是整个应用程序生命周期,故只在第一次启动时初始化。当然这里的初始化是指在类属性中。而非静态属性作用域是该类,所以类每次被加载时都会初始化,而且上次看到过一篇文章,这个初始化应该是在父类构造方法之后。

评论
©LotusLoveNature | Powered by LOFTER