java 里的成员和静态概念

很多帖子对成员和静态概念表述各有出入,有些文章甚至将成员属性和静态属性在一个维度上相提并论,而实际上成员和静态是两个维度的概念。

结合着java源码,我这样理解。

java.lang.reflect 包下有一个 Member接口,如图所示:

 

1. java里的Field和Method都实现了Member接口,成员属性和成员方法的表述是没有问题的。

2. static关键字修饰的属性和方法,用静态成员属性和静态成员方法来表述,或者类成员属性和类成员方法表述都可以。

3. 没有static修饰的成员(属性和方法),应表述为实例成员。

4. 一些标题为《静态属性和成员属性的区别》的帖子可能想表达的是《静态成员和实例成员的区别》。

 

### Java静态成员静态代码块的概念及用法 #### 静态成员Java 中,`static` 关键字用于声明属于类而不是特定对象成员。这意味着这些成员可以不依赖于任何实例而存在,并且对于该类的所有实例来说是共享的。 - **静态字段**:当一个变量被 `static` 修饰时称为静态变量或类变量。它们在整个应用程序生命周期内保持不变并由所有实例共享同一份副本。 - **静态方法**:带有 `static` 的方法可以直接通过类名调用而不必创建对象实例。这类方法通常用来处理不需要访问具体实例数据的操作。 ```java public class Example { // 定义了一个名为 count 的静态变量 public static int count = 0; // 这是一个静态方法 public static void incrementCount() { count++; } } ``` #### 静态代码块 静态代码块是指使用 `{}` 包围起来的一段程序逻辑前加上关键字 `static` 。这段代码会在 JVM 加载这个类到内存中的时候自动执行一次,并且仅此一次,即使之后多次创建此类的对象也不会再次触发其内的语句[^1]。 ```java class MyClass { static { System.out.println("Static block executed"); } // 构造器其他非静态部分... } ``` #### 使用说明与区别 - **初始化资源**:由于静态代码块只会在首次加载类时运行,因此非常适合用来做一次性设置工作,比如读取配置文件、建立数据库连接等操作。 - **作用范围不同**:静态成员存在于整个应用期间,而非静态成员则依附于具体的对象实例上;同样地,静态代码块也只针对第一次加载的情况生效,而非静态代码块每次新建对象都会重新执行。 - **访问权限差异**:静态上下文中无法直接引用非静态属性或行为,因为后者需要关联至某个实际存在的实体之上才能有意义。 综上所述,在设计阶段应当谨慎考虑哪些组件应该标记为 `static` ,以确保合理利用有限的系统资源同时维持良好的面向对象特性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值