static、const、final

本文深入探讨了Java中的静态方法、静态变量和静态代码块的使用方式及特性,包括它们的区别、作用域和注意事项。通过具体示例,帮助开发者更好地理解和运用这些概念,提高代码质量和效率。
static关键字:可以用来修饰类中的成员变量,成员方法,除此以外还可以修饰程序的代码块,称为静态代码块。
1、用static修饰的方法称为静态方法。
特点:
(1)静态方法不需要通过类的实例化就可以直接使用。
(2)静态方法不依赖对象而存在,依赖于类而存在。
(3)特别需要注意的是静态方法不能用abstract修饰,因为静态方法必须在本类中提供实现,而abstract方法是在子类中实现,二者互相矛盾。
2、用static修饰的变量称为静态变量
特点:
(1)在类加载的过程中完成静态变量的内存分配,可以直接通过类名加变量名直接访问该变量。
(2)静态变量还是变量,可以进行赋值,不是final修饰的常量
3、用static修饰的代码块称为静态代码块。静态代码块在类加载的时候只执行一次,如果把构造方法看成对象的初始化,则可以把静态代码块看成类的初始化,在代码块中可以初始化类中的静态变量


C#中用const修饰的变量就为常量值,无法改变。
C++和Java中,`const``static`关键字的组合用于声明**常量静态变量**,即在整个程序运行期间保持不变且属于类本身的变量。它们的使用方法和语义在两种语言中有所不同,特别是在内存管理、作用域和初始化方式上。 ### C++中的`const static``static const` 在C++中,类内部的常量静态成员通常使用`static const`或`const static`来声明。虽然两者在语法上都可以使用,但更推荐使用`static const`,因为它强调了该变量是静态的,并且其值不可更改。例如: ```cpp class MyClass { private: static const int MAX_SIZE = 100; }; ``` 对于整型或枚举类型的`const static`成员,可以在类内直接初始化。对于其他类型(如`double`、`std::string`等),则必须在类外进行定义并初始化: ```cpp class MyClass { private: static const double PI; }; // 类外定义 const double MyClass::PI = 3.14159; ``` `static const`成员属于类,而不是类的任何特定实例。因此,所有对象共享同一个值。这种设计有助于节省内存并确保一致性[^2]。 ### Java中的`static final` 在Java中,常量静态变量通过`static final`关键字组合实现。`final`关键字等价于C++中的`const`,表示变量一旦赋值后不能更改。例如: ```java public class MyClass { public static final int MAX_SIZE = 100; } ``` Java中`static final`变量通常全大写,以表明其为常量。C++类似,这些常量属于类本身,而不是类的实例,并且通常在声明时直接初始化。若初始化过程复杂,也可以在静态代码块中完成: ```java public class MyClass { public static final String VERSION; static { VERSION = "v1.0"; } } ``` Java编译器会在编译时优化常量传播,即将`static final`常量的值直接嵌入到引用它们的代码中。因此,如果常量值发生更改,所有引用该常量的代码都必须重新编译[^3]。 ### 区别总结 | 特性 | C++ | Java | |---------------------|----------------------------------|----------------------------------| | 常量关键字 | `const` | `final` | | 静态关键字 | `static` | `static` | | 常量静态声明顺序 | 推荐使用`static const` | 使用`static final` | | 类内初始化支持 | 仅限整型/枚举类型 | 所有类型均可直接初始化 | | 编译时常量传播 | 否 | 是(编译时内联) | | 修改常量影响 | 若类外定义需重新链接 | 所有引用该常量的代码需重新编译 | | 内存分配 | 存储于只读数据段(某些编译器) | 普通静态变量存储,但不可修改 | ### 常见使用场景 - **配置常量**:如最大值、最小值、版本号、数学常数等。 - **状态码定义**:如错误码、操作结果码等。 - **共享资源标识**:如文件路径、网络端口号等。 合理使用常量静态变量可以提高代码的可读性、可维护性,并减少硬编码带来的潜在错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值