freeCodeCamp/guide/chinese/java/static/index.md

132 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Static
localeTitle: 静态的
---
# 静态的
将变量或方法声明为静态时,它属于类,而不是特定实例。这意味着只有一个静态成员实例存在,即使您创建了该类的多个对象,或者您没有创建任何实例。它将由所有对象共享。
static关键字可以与变量方法代码块和嵌套类一起使用。
## 静态变量
**_例_**
```java
public class Counter {
public static int COUNT = 0;
Counter() {
COUNT++;
}
}
```
`COUNT`变量将由该类的所有对象共享。当我们在main中创建Counter类的对象时访问静态变量。
```java
public class MyClass {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.COUNT);
}
}
// Outputs "2"
```
outout是2因为`COUNT`变量是静态的并且每次创建Counter类的新对象时都会增加1。您还可以使用该类的任何对象访问静态变量例如`c1.COUNT` 。
## 静态方法
静态方法属于类而不是实例。因此,可以在不创建类实例的情况下调用它。它用于改变类的静态内容。静态方法有一些限制:
1. 静态方法不能使用类的非静态成员(变量或函数)。
2. 静态方法不能使用`this`或`super`关键字。
**_例_**
```java
public class Counter {
public static int COUNT = 0;
Counter() {
COUNT++;
}
public static void increment(){
COUNT++;
}
}
```
也可以从类的实例调用静态方法。
```java
public class MyClass {
public static void main(String[] args) {
Counter.increment();
Counter.increment();
System.out.println(Counter.COUNT);
}
}
// Outputs "2"
```
输出为2因为它通过静态方法`increament()`递增。与静态变量类似,也可以使用实例变量访问静态方法。
## 静态块
静态代码块用于初始化静态变量。声明静态变量后立即执行这些块。
**_例_**
```java
public class Saturn {
public static final int MOON_COUNT;
static {
MOON_COUNT = 62;
}
}
```
```java
public class Main {
public static void main(String[] args) {
System.out.println(Saturn.MOON_COUNT);
}
}
// Outputs "62"
```
输出为62因为变量`MOON_COUNT`在静态块中分配了该值。
## 静态嵌套类
一个类可以有静态嵌套类,可以使用外部类名访问它。
**_例_**
```java
public class Outer {
public Outer() {
}
public static class Inner {
public Inner() {
}
}
}
```
在上面的示例中, `Inner`类可以作为类`Outer`的静态成员直接访问。
```java
public class Main {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
}
}
```
[Builder中](https://en.wikipedia.org/wiki/Builder_pattern#Java)常用的静态嵌套类的一个用例java。