2020-12-19 15:47发布
静态变量特点:所有对象共享在类被载入时创建,只要类存在,static变量就存在两种方式访问:直接访问:类名.属性;实例化后访问:对象名.属性;
1、静态成员随着类的加载而加载;
2、静态成员优先于对象存在;
3、静态成员被所有对象所共享;
4、静态成员多了一个中调用方式,可以被类名直接调用。
静态变量
可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。
静态变量有两种情况:
静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用
静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量 静态属性,就是在类被装入虚拟机就初始化的一些属性,这些属性不需要实例化类就可以通过类名直接使用。
静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。
静态变量有两种情况: 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用 静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
属于类级别的,不需要创建对象就可以直接使用.
全局唯一,内存中唯一,静态变量可以唯一标识某些状态.
在类加载时候初始化,常驻在内存中,调用快捷方便.
应用场景:1. 静态方法最适合工具类中方法的定义;比如文件操作,日期处理方法等.2. 静态方法适合入口方法的定义;如单例模式,因为从外部拿不到构造函数,所有定义一个静态的方法获取对象非常有必要.3. 静态变量适合全局变量的定义.(如布尔型静态成员变量做控制符
很多的地方建议把一个一个不变的变量使用static表明,然后所有的变量字母都是用大写来表示。
这样的优点
是在读代码的时候我们知道这个字母代表什么,
当这个字母变化的时候,我们只需要修改一个地方就可以修改所有地方了
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 的好处有两个。上面已经说了。那么我们来看一下,这样写代码是不是已经有原来的优点了。
通过方法名字,我们可以看出M代表男性。而且M不对外开放。别的地方不能使用M。
如果以后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里面的一些东西。
其实写代码并没有什么大的规则,遵循你的“道”就是好的。对于前人的经验理解后再去使用。
最多设置5个标签!
静态变量特点:
所有对象共享
在类被载入时创建,只要类存在,static变量就存在
两种方式访问:
直接访问:类名.属性;
实例化后访问:对象名.属性;
1、静态成员随着类的加载而加载;
2、静态成员优先于对象存在;
3、静态成员被所有对象所共享;
4、静态成员多了一个中调用方式,可以被类名直接调用。
静态变量
可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。
静态变量有两种情况:
静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用
静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量 静态属性,就是在类被装入虚拟机就初始化的一些属性,这些属性不需要实例化类就可以通过类名直接使用。
静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。
静态变量有两种情况: 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用 静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
属于类级别的,不需要创建对象就可以直接使用.
全局唯一,内存中唯一,静态变量可以唯一标识某些状态.
在类加载时候初始化,常驻在内存中,调用快捷方便.
应用场景:
1. 静态方法最适合工具类中方法的定义;比如文件操作,日期处理方法等.
2. 静态方法适合入口方法的定义;如单例模式,因为从外部拿不到构造函数,所有定义一个静态的方法获取对象非常有必要.
3. 静态变量适合全局变量的定义.(如布尔型静态成员变量做控制符
静态变量
可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。
静态变量有两种情况:
静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用
静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
很多的地方建议把一个一个不变的变量使用static表明,然后所有的变量字母都是用大写来表示。
这样的优点
是在读代码的时候我们知道这个字母代表什么,
当这个字母变化的时候,我们只需要修改一个地方就可以修改所有地方了
大量的这种变量存在于代码里面,我们看到其实也是符合代码规范的。但是有一次写代码的时候就是觉得这样的代码不“美”。但是也不知道什么原因。而且不愿意写出大量的static代码。
(有的人可以用枚举来代替,个人觉得用枚举是比静态变量更好,但是实质上并没有改变,也已经进步不小了。)
后来自己思索以后进行了如下的重构。
然后进行code review的时候大家开始表示,你这怎么行。M出现在代码里面的,hard code啊。好吧,我们来看看到底哪种写法更好。更加符合之前说的设计模式原则。
使用static 的好处有两个。上面已经说了。那么我们来看一下,这样写代码是不是已经有原来的优点了。
通过方法名字,我们可以看出M代表男性。而且M不对外开放。别的地方不能使用M。
如果以后M变成其他的字母的话,也只需要修改一个地方。
那么我们看看这么写还有没有其他的好处,如果以后m也代表男性。之前的代码怎么办。我们需要在代码的每一处做出如下修改。
那么第二种方式,只需要修改一个地方就可以了。这样其实更负责“开闭原则”。但是“守旧的人还是会指责你,M m是硬编码。”
还有没有其他的优点,就是我觉得这样的代码更“美”。为什么美,我也说不出来。我就是觉得这样漂亮,比代码里面一堆常常的静态变量好看的多。
有的人说了,我们系统就是不会变,我们的性别只需要使用M,你这是在强词夺理。我觉得吧,对修改开发是一个大的原则,我们在code的时候需要考虑进去。但是需要做个平衡,也不是一味的说所有都要去修改,需要看代价。代价大了就没有必要了。如果只是把静态变量修改成方法的话,其实这样修改代码量不大。而且更负责“开闭原则”。
静态变量应该使用在什么地方呢?更加推荐表示一些真正不变的东西,比如说π,空字符串我觉得也可以使用(当然代码里面出现“”完全没有问题。)。或者使用jdk里面的一些东西。
其实写代码并没有什么大的规则,遵循你的“道”就是好的。对于前人的经验理解后再去使用。
相关问题推荐