java的访问修饰符和static
时间: 2025-01-06 14:35:14 浏览: 7
### Java 中访问修饰符与 `static` 关键字
#### 访问修饰符概述
在Java编程语言中,访问控制关键字用于定义类、方法、变量等成员的可见性和访问权限,以确保类的封装性和数据的安全性。Java 的访问控制关键字主要有四种:`public`、`protected`、`private` 以及默认(default),每种访问控制关键字的作用范围和应用场景各不相同[^1]。
#### 静态关键字 (`static`)
`static` 是一种非访问修饰符,在Java中主要用于创建独立于任何对象实例的方法或变量。当声明为静态时,该成员属于整个类而不是某个特定的对象实例。这意味着所有此类的实例共享同一个静态成员副本。通常情况下,静态方法可以直接通过类名调用而无需创建对象实例;同样地,静态字段也能够在未实例化的情况下被访问。
#### 使用场景对比
| 特征/修饰符 | private | default (package-private) | protected | public |
| -- | --- | --- | --- | --- |
| **同一类内** | 可见并可访问 | 可见并可访问 | 可见并可访问 | 可见并可访问 |
| **同一包内的其他类** | 不可见也不可访问 | 可见并可访问 | 可见并可访问 | 可见并可访问 |
| **不同包子类** | 不可见也不可访问 | 不可见不可访问 | 可见并可访问 | 可见并可访问 |
| **任意位置的所有类** | 不可见也不可访问 | 不可见不可访问 | 不可见不可访问 | 可见并可访问 |
表中展示了各种访问级别下成员对于不同类型代码单元的可见度情况[^4]。
#### 区别说明
- **作用域差异**
- 对于访问修饰符而言,主要影响的是程序结构内部元素之间相互作用的方式——即哪些部分能够看到并操作另一些部分的数据或行为。
- **生命周期关联**
- 被标记为 `static` 的组件存在于单个内存空间里,并且在整个应用程序运行期间保持存在直到JVM终止为止;
- 非静态成员则依赖具体的对象实例存活周期,每当新建立一个对象就会分配相应的新资源给这些成员。
- **初始化时机**
- 类加载阶段完成之后即可立即使用静态成员;
- 实例化的时刻才会触发非静态成员的确立过程。
```java
class Example {
// Private member can only be accessed within this class.
private int secretNumber;
// Default access modifier means it's accessible by classes in the same package but not outside of it.
String message = "Hello from default";
// Protected members are visible to subclasses even across packages and also any other class inside its own package.
protected double salary;
// Public fields or methods have no restrictions on who can see them; they're available everywhere without limitation.
public final String APP_NAME = "My Application";
}
```
阅读全文