static修饰的属性和方法和没有修饰的使用方法有什么区别
时间: 2023-12-02 17:05:55 浏览: 20
静态属性和方法是属于类的,而不是属于类的每个实例。因此,它们可以被直接访问,而不需要先创建类的实例。另外,静态属性和方法可以在没有类实例的情况下使用,但非静态属性和方法需要先创建类实例才能使用。
举个例子,假设我们有一个名为Person的类,其中有一个静态属性count和一个非静态属性name:
```java
public class Person {
public static int count = 0; // 静态属性
public String name; // 非静态属性
public Person(String name) {
this.name = name;
count++;
}
public static void printCount() { // 静态方法
System.out.println("Total number of persons: " + count);
}
public void sayHello() { // 非静态方法
System.out.println("Hello, my name is " + name);
}
}
```
现在我们可以这样使用这个类:
```java
Person.printCount(); // 直接调用静态方法
Person p1 = new Person("Alice"); // 创建实例
p1.sayHello(); // 调用非静态方法
Person.printCount(); // 直接调用静态方法
Person p2 = new Person("Bob"); // 创建另一个实例
p2.sayHello(); // 调用非静态方法
Person.printCount(); // 直接调用静态方法
```
输出:
```
Total number of persons: 0
Hello, my name is Alice
Total number of persons: 1
Hello, my name is Bob
Total number of persons: 2
```
注意,静态属性count在每次创建实例时都会增加,而非静态属性name是每个实例独有的。静态方法printCount可以在没有实例的情况下直接调用,而非静态方法sayHello需要先创建实例才能调用。