public class PublicStaticFinalTest {
public static final String str = "abc";
}
问题:为什么对于一个public类型的终态的成员变量,一般都要声明为static的?
解答:节省内存。分析:final是终态的,既然是终态的我们可以把它当作常量,一但赋值,它的值就不能去做任何的改变,是一个常量。既然是一个常量我们可以认为定义的这个常量的值只能读不能写。既然对于不能改变的量,那么举例说这个类有10对象,既然每个对象都有一个不能改变的常量,相当于这个常量有10份拷贝,分别在10个对象里面。如果加上static有什么好处呢?我们知道static是静态的,就是说不管这个类的对象有多少个,它的static的变量始终就只有那么一个,那么所有的都想都引用这同一个静态变量。某一个对象对它改变后会反应到其他对象里面去。将当前变量定义为static的,那么这个变量在内存里面就只有一份。它既然是只读的,那么在内存里面只有一份,所有对象都用这一份,如果不定义为static的,那么如果一个类有100个对象或者更多,那么在内存里面就有100份甚至更多的拷贝。加上static,在内存里面就只有一份拷贝,一份跟100份相比必然是节省内存了。所以对于一个public类型的终态的成员变量,一般都要声明为static的,如果不定义为static的编译不会错运行也不会错,但是会浪费内存。。
分享到:
- 2009-02-28 01:27
- 浏览 1280
- 评论(0)
- 论坛回复 / 浏览 (0 / 1374)
- 查看更多
相关推荐
`static`关键字可以用来修饰成员变量、方法、代码块以及内部类,每种情况都有其特定的含义和用途。 首先,我们来看`static`修饰成员变量的情况。成员变量是属于类的,每个对象都有自己的副本。但当成员变量前加上`...
1. **成员变量覆盖:** 在子类中声明与父类同名的成员变量称为覆盖,但这种覆盖不会影响到父类的成员变量。 2. **静态绑定:** 成员变量的绑定是在编译时期确定的,因此成员变量总是按照其在类中的声明进行访问。 3....
Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。理解这些变量之间的区别是学习Java基础的重要部分,这对于编写高效、可维护的代码至关重要。 1. 成员变量...
### C++静态成员变量与静态成员函数详解 #### 静态成员变量 在C++中,静态成员变量是类的一个特殊成员,它被所有该类的对象所共享。这意味着无论创建多少个对象,静态成员变量都只有一个副本存在于内存中。 **...
在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...
- **不变的全局设置**: 当某个变量的值在整个程序运行期间都不发生变化时,适合将其声明为 `static`。 - **计数器**: 例如,记录创建了多少个对象的计数器。 - **配置参数**: 例如,数据库连接字符串等需要全局访问...
实例变量是在类中声明的,没有static关键字。它们是每个对象独有的,也就是说,每创建一个新的类实例,都会为这些实例变量分配新的内存空间。这些变量的生命周期与对象相同,当对象被创建时初始化,当对象被垃圾回收...
5. **默认值**:静态变量与实例变量(非静态变量)有相同的默认值:数值类型默认为0,布尔类型为false,引用类型为null。 6. **访问方式**:静态变量可以通过类名直接访问,无需创建类的实例。例如,`ClassName....
const 成员要在构造函数初始化,而 static 成员在需要在类体外初始化,那么 static const 和 const static 成员应该在哪里进行初始化呢?这两个写法又会有什么不一样吗? 经过查阅相关资料和做了相关实验后,我们...
它们在声明时通常会被设置为public,以便在类的外部可以轻松访问,但也可以根据需要设置为private。常量的命名规范是全部字母大写,并使用下划线分隔单词,如`DEPARTMENT`。 例如,下面的`Employee`类展示了如何...
- **定义**: 在类定义中,可以在变量前加上`static`关键字来声明一个静态成员变量。 - **声明**: 静态成员变量必须在类外部进行声明,以分配实际的存储空间。 ```cpp class MyClass { public: static int count;...
- **成员变量**:在类中定义的变量称为成员变量,它可以存储特定类型的值。如上面例子中的`String name`。 - **成员方法**:用于操作成员变量的方法称为成员方法,例如`getName()`和`setName()`。 ### 2. 继承的...
它们可以访问static 成员变量,但不能访问一般的成员变量。static 成员函数可以被类名调用,也可以被对象调用(但需要满足访问权限)。 在代码中,我们可以看到一个示例: ```cpp class Testclass { public: ...
在Java编程语言中,`static`关键字扮演着极其重要的角色,它主要用于声明类的成员变量、方法以及代码块为静态。本文将深入探讨`static`在变量、方法和代码块中的应用,通过示例和解释帮助读者更深刻地理解其功能与...
静态成员变量是类体中的数据成员,声明前加上static关键字,该数据成员就成了该类的静态数据成员。静态数据成员遵守public/protected/private访问规则,并具有以下特点: 1. 静态数据成员的定义:静态数据成员主要...
Java 反射机制修改私有成员变量实例 Java 反射机制是 Java 语言中一个强大的工具,它允许程序在运行时检查和修改类的结构和行为。在本例中,我们将使用 Java 反射机制来修改私有成员变量的值。 什么是 Java 反射...
在C#等静态类型语言中,public、private和static是访问修饰符,用于控制类成员的可见性和作用域。而在JavaScript中,由于其原型继承的特性,我们通常使用函数作用域和闭包来模拟这些行为。 下面我们将基于提供的...
静态成员变量在类的所有实例间共享,无论创建了多少实例,它们都只有一个副本。静态成员函数可以直接通过类名调用,无需实例化对象。这使得它们在全局访问方面非常方便。例如: ```cpp // Public.h class CPublic {...