静态】【Java基础】java静态变量的特点

2020-12-19 15:47发布

15条回答
等等同学
2楼 · 2020-12-19 15:59

静态变量特点:
所有对象共享
在类被载入时创建,只要类存在,static变量就存在
两种方式访问:
直接访问:类名.属性;
实例化后访问:对象名.属性;

天天
3楼 · 2020-12-19 16:11

1、静态成员随着类的加载而加载;

2、静态成员优先于对象存在;

3、静态成员被所有对象所共享;

4、静态成员多了一个中调用方式,可以被类名直接调用。


水默
4楼 · 2020-12-19 16:15

静态变量

可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。

静态变量有两种情况:

静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用

静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。


小王霸
5楼 · 2020-12-19 18:07

static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量 静态属性,就是在类被装入虚拟机就初始化的一些属性,这些属性不需要实例化类就可以通过类名直接使用。

请叫我雷锋叔叔啊
6楼 · 2020-12-19 22:18

静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。 

静态变量有两种情况: 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用 静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。

studentaaa
7楼 · 2020-12-19 22:45
  1. 属于类级别的,不需要创建对象就可以直接使用.

  2. 全局唯一,内存中唯一,静态变量可以唯一标识某些状态.

  3. 在类加载时候初始化,常驻在内存中,调用快捷方便.

应用场景:
1. 静态方法最适合工具类中方法的定义;比如文件操作,日期处理方法等.
2. 静态方法适合入口方法的定义;如单例模式,因为从外部拿不到构造函数,所有定义一个静态的方法获取对象非常有必要.
3. 静态变量适合全局变量的定义.(如布尔型静态成员变量做控制符


帅帅马
8楼 · 2020-12-20 19:19

静态变量

可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。

静态变量有两种情况:

静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用

静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。


无需指教
9楼 · 2020-12-21 08:50

很多的地方建议把一个一个不变的变量使用static表明,然后所有的变量字母都是用大写来表示。

这样的优点

  1.     是在读代码的时候我们知道这个字母代表什么,

  2.     当这个字母变化的时候,我们只需要修改一个地方就可以修改所有地方了


public static String GENDER_MAN = "M".if (GENDER_MAN.equals(gender)){...}


大量的这种变量存在于代码里面,我们看到其实也是符合代码规范的。但是有一次写代码的时候就是觉得这样的代码不“美”。但是也不知道什么原因。而且不愿意写出大量的static代码。

(有的人可以用枚举来代替,个人觉得用枚举是比静态变量更好,但是实质上并没有改变,也已经进步不小了。)

后来自己思索以后进行了如下的重构。

public boolean isGenderMan(gender){return "M".equals(gender)}

然后进行code review的时候大家开始表示,你这怎么行。M出现在代码里面的,hard code啊。好吧,我们来看看到底哪种写法更好。更加符合之前说的设计模式原则。

使用static 的好处有两个。上面已经说了。那么我们来看一下,这样写代码是不是已经有原来的优点了。


  1. 通过方法名字,我们可以看出M代表男性。而且M不对外开放。别的地方不能使用M。

  2. 如果以后M变成其他的字母的话,也只需要修改一个地方。 

那么我们看看这么写还有没有其他的好处,如果以后m也代表男性。之前的代码怎么办。我们需要在代码的每一处做出如下修改。


public static String GENDER_MAN = "M".public static String GENDER_MAN1 = "m".if (GENDER_MAN.equals(gender) || GENDER_MAN1 .equals(gender)){...}

那么第二种方式,只需要修改一个地方就可以了。这样其实更负责“开闭原则”。但是“守旧的人还是会指责你,M m是硬编码。”


public boolean isGenderMan(gender){return "M".equals(gender) || "m".equals(gender)}

还有没有其他的优点,就是我觉得这样的代码更“美”。为什么美,我也说不出来。我就是觉得这样漂亮,比代码里面一堆常常的静态变量好看的多。

有的人说了,我们系统就是不会变,我们的性别只需要使用M,你这是在强词夺理。我觉得吧,对修改开发是一个大的原则,我们在code的时候需要考虑进去。但是需要做个平衡,也不是一味的说所有都要去修改,需要看代价。代价大了就没有必要了。如果只是把静态变量修改成方法的话,其实这样修改代码量不大。而且更负责“开闭原则”。

静态变量应该使用在什么地方呢?更加推荐表示一些真正不变的东西,比如说π,空字符串我觉得也可以使用(当然代码里面出现“”完全没有问题。)。或者使用jdk里面的一些东西。

其实写代码并没有什么大的规则,遵循你的“道”就是好的。对于前人的经验理解后再去使用。


相关问题推荐

    没有解决我的问题,去提问