在1个类中,static成员只会被加载一次吗?

时间:2021-04-25 00:41:10
以前学习java的时候认为一个类中的static成员只会在这个类第一次使用的时候被加载。但昨天在网上看到一篇文章说只有static final成员变量才能保证只被加载一次。是这样吗?

9 个解决方案

#1


用static来修饰一段代码(称为静态代码块) 
静态的代码块只在类被加裁时执行一次,只后不会再被执行。

你说的static成员加载是什么意思啊?初始化的意思?
static final确实只初始化一次

#2


“只有static final成员变量才能保证只被加载一次”,这种说法有道理,但容易造成误解,关键在于楼主是怎么理解“加载”这个概念的。

我想说这话的人是考虑,非final的成员是可以被更改的,所以:


class Foo {
  static Object o = new Object();
  static {
    o = new Object();
  }
  static final Object of = new Object();
}


这里的o就被初始化了两次,而of就不存在这种情况。

但确切的说,“初始化”和“加载”的含义是不同的。个人认为,属性的“加载”应该是指构造变量表,那么,这种加载只执行一次。后期对变量进行的更改不应算“加载”期间的工作。

#3


同意楼上所说的

#4


static表示该域只能初始化一次
final定义的变量可以看做一个常量,不能被改变; 
           final定义的方法不能被覆盖; (即不允许修改,还是不能改变的)
           final定义的类不能被继承。 (也是不能改变)
所以两个一起就表示这个成员只能被初始化一次,定义的变量相当于常量,定义的方法不能被覆盖

通俗点说,只能初始化一次是static的属性,加载一次是final的属性

#5


static 只表示这个变量是在各个类之间共享的,只有一份。 没有任何其他意思。

OVER!

#6


static final型就当成常量好了,这样便于理解- -

#7


在类被加载的时候有且只有一次分配静态存储空间
但域值可以改变 不像final

#8


我总觉得"加载"这个词有问题,具体是什么问题迷茫中~

#9


 java2000_net
老紫竹 
等 级:
 发表于:2008-02-13 19:21:425楼 得分:0 
static   只表示这个变量是在各个类之间共享的,只有一份。   没有任何其他意思。 

OVER! 

同意java2000_net说的,static 目的就是共享,再加上final 就是不能被更改的共享。
 

#1


用static来修饰一段代码(称为静态代码块) 
静态的代码块只在类被加裁时执行一次,只后不会再被执行。

你说的static成员加载是什么意思啊?初始化的意思?
static final确实只初始化一次

#2


“只有static final成员变量才能保证只被加载一次”,这种说法有道理,但容易造成误解,关键在于楼主是怎么理解“加载”这个概念的。

我想说这话的人是考虑,非final的成员是可以被更改的,所以:


class Foo {
  static Object o = new Object();
  static {
    o = new Object();
  }
  static final Object of = new Object();
}


这里的o就被初始化了两次,而of就不存在这种情况。

但确切的说,“初始化”和“加载”的含义是不同的。个人认为,属性的“加载”应该是指构造变量表,那么,这种加载只执行一次。后期对变量进行的更改不应算“加载”期间的工作。

#3


同意楼上所说的

#4


static表示该域只能初始化一次
final定义的变量可以看做一个常量,不能被改变; 
           final定义的方法不能被覆盖; (即不允许修改,还是不能改变的)
           final定义的类不能被继承。 (也是不能改变)
所以两个一起就表示这个成员只能被初始化一次,定义的变量相当于常量,定义的方法不能被覆盖

通俗点说,只能初始化一次是static的属性,加载一次是final的属性

#5


static 只表示这个变量是在各个类之间共享的,只有一份。 没有任何其他意思。

OVER!

#6


static final型就当成常量好了,这样便于理解- -

#7


在类被加载的时候有且只有一次分配静态存储空间
但域值可以改变 不像final

#8


我总觉得"加载"这个词有问题,具体是什么问题迷茫中~

#9


 java2000_net
老紫竹 
等 级:
 发表于:2008-02-13 19:21:425楼 得分:0 
static   只表示这个变量是在各个类之间共享的,只有一份。   没有任何其他意思。 

OVER! 

同意java2000_net说的,static 目的就是共享,再加上final 就是不能被更改的共享。