前言
本博客文章已收录至专栏Java SE,阅读其他有关博客笔记请转至该专栏下查阅
传送门 -->程序员雨空集_Java SE专栏
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的成员变量,叫做静态变量
被static修饰的成员方法,叫做静态方法
静态变量
特点:
- 被该类所有对象共享,不用进行多次赋值,只需要在类的定义中进行一次赋值即可
- 不属于对象,属于类
- 随着类的加载而加载,优于对象存在
调用方式:
静态变量可以通过类名直接调用,也可以通过对象名调用
- 类名调用(推荐):
public class MyClass {
public static int count;
public static void main(String[] args) {
MyClass.count = 10; // 通过类名直接调用静态变量
System.out.println(MyClass.count); // 输出结果为 10
}
}
- 对象名调用:
public class MyClass {
public static int count;
public static void main(String[] args) {
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
obj1.count = 10; // 通过对象名调用静态变量
System.out.println(obj2.count); // 输出结果为 10,因为静态变量被所有对象共享
}
}
无论是通过类名调用还是通过对象名调用,静态变量都是被该类的所有对象共享的,它们的值是相同的。因此,通常推荐使用类名调用静态变量,以强调静态变量属于类而不是对象实例
静态方法
特点:
- 多用在测试类和工具类中
- Javabean类中很少会用
调用方式:
静态方法可以通过类名直接调用,也可以通过对象名调用
- 类型调用(推荐):
public class MyClass {
public static void printMessage() {
System.out.println("This is a static method.");
}
public static void main(String[] args) {
MyClass.printMessage(); // 通过类名直接调用静态方法
}
}
- 对象名调用:
public class MyClass {
public static void printMessage() {
System.out.println("This is a static method.");
}
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.printMessage(); // 通过对象名调用静态方法
}
}
无论是通过类名调用还是通过对象名调用,静态方法都是属于类的方法,它们的行为是相同的。通常推荐使用类名调用静态方法,以强调静态方法属于类而不是对象实例
注意事项
- 静态方法只能访问静态变量和静态方法:
静态方法是属于类的,而不是属于类的实例。因此,静态方法只能访问类的静态变量和静态方法。这是因为静态变量和静态方法在类加载时就已经存在于内存中,可以直接通过类名来访问。 - 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法:
非静态方法是属于类的实例的,它可以访问类的静态变量和静态方法,因为它们在类加载时就已经存在于内存中。同时,非静态方法也可以访问类的非静态成员变量和非静态成员方法,因为它们是通过实例来访问的。 - 静态方法中是没有this关键字:
this关键字表示当前对象的引用,它只能在非静态方法中使用。因为静态方法是属于类的,而不是属于类的实例,所以在静态方法中无法使用this关键字来引用当前对象。如果需要在静态方法中访问当前对象,可以通过参数传递对象的引用来实现。