被static修饰的成员变量可以被修改吗
2017-11-23 20:01
309 查看
被static修饰的变量、常量、方法被称作静态变量、静态常量以及静态方法。
那么被static修饰的成员变量可以被修改吗?可以。只要是变量就可以被修改。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被
加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
所以一般在需要实现以下两个功能时使用静态变量:
1.在对象之间共享值时
2.方便访问变量时
static final修饰的成员变量可理解为“全局常量”,常量的值才是不能更改的,才是不可修改的!
那么被static修饰的成员变量可以被修改吗?可以。只要是变量就可以被修改。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被
加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
所以一般在需要实现以下两个功能时使用静态变量:
1.在对象之间共享值时
2.方便访问变量时
static final修饰的成员变量可理解为“全局常量”,常量的值才是不能更改的,才是不可修改的!
静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。 说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用的时候,如果我们给静态变量赋予某个值的话, 下次函数调用时,这个值保持不变。
相关文章推荐
- JavaSE8基础 final修饰类的成员变量,其只可以被访问,不能被修改
- Java反射机制可以动态修改实例中final修饰的成员变量吗?
- 通过反射修改 被 private final static修饰的成员
- 为什么Java接口里使用public static final修饰成员变量
- 类的成员变量修饰 const 和static
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)
- ReadOnly关键字修饰的变量可以修改,只是不能重新分配
- null对象可以访问它所属类的类成员(即static修饰的成员),但是null对象访问实例成员将会引发错误。
- java中成员变量被static所修饰
- 修改static中成员变量的值
- static 修饰的成员变量
- [C#基础知识] ReadOnly关键字修饰的变量可以修改,只是不能重新分配
- [C#基础知识] ReadOnly关键字修饰的变量可以修改,只是不能重新分配
- JAVA中static修饰成员变量时 和 不修饰成员变量时的区别 如下面的两个例子 的区别 为什么下面的是错误的
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)
- 用transient修饰的成员变量不能序列化,为什么ArrayList集合可以实现序列化
- [C#基础知识] ReadOnly关键字修饰的变量可以修改,只是不能重新分配
- C++ Protected 成员变量 也可以被外部修改
- 为什么java接口中的成员变量必须被static关键字和final关键字修饰
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)