尚硅谷笔记
- 和对象无关,只和类相关的称之为静态,
- 和类相关的属性称之为静态属性
- 和类相关的方法称之为静态方法
- 静态语法就是在属性和方法前增加static关键字
在考虑static的使用时,先记住 先有类,再有对象,静态方法可以不依赖于对象使用。
静态属性在元空间提前准备好,先有类(元空间),再有对象(堆)。
静态方法只能直接访问并调用其他静态方法和静态变量,不能直接访问或调用非静态方法和非静态变量。因为非静态方法和非静态变量属于对象,如果类不存在,那么非静态的对象不一定存在;但静态是与类无关的,它不依赖于类的实例化对象。
成员方法(非静态方法)可以调用静态方法,因为现有类,再有对象。有成员方法说明已经有对象,则一定有类,那么就可以调用类中的静态方法。
静态代码块:是在Java类加载时执行的一段代码块。它以关键字static
和花括号{}
包围,位于类中的其他成员之外;它会在类的首次加载时被触发,并且只会执行一次(无论调用几次静态)。
代码块:只有在构建对象时,才会执行。
同时,C++中也有static,与JAVA有一些不同。
-
静态成员的定义和初始化方式:
C++:在C++中,可以定义静态变量(static variable)、静态成员函数(static function)。静态成员变量需要在类的声明或实现中添加static关键字,并在类外初始化。
class MyClass { public: static int staticVariable; // 静态成员变量的声明 }; int MyClass::staticVariable = 0; // 静态成员变量的初始化
Java:在Java中,静态成员可以是静态变量(static variable)或静态方法(static method)。静态成员需要在类的声明或构造函数中添加static关键字,并在声明时初始化。
class MyClass { public static int staticVariable = 0; // 静态成员变量的声明和初始化 }
-
调用方式:
C++:在C++中,静态成员可以通过类名直接访问,也可以通过对象实例访问。通过类名访问时,使用作用域解析运算符::来调用静态成员。通过对象实例访问时,也可以使用成员访问运算符.来调用静态成员,但不推荐这样做。int value1 = MyClass::staticVariable; // 通过类名访问静态成员 MyClass myObj; int value2 = myObj.staticVariable; // 通过对象实例访问静态成员(不推荐)
Java:在Java中,只能通过类名访问静态成员,而不能通过对象实例访问。使用类名和.操作符来调用静态成员。
int value1 = MyClass.staticVariable; // 通过类名访问静态成员 MyClass myObj = new MyClass(); int value2 = myObj.staticVariable; // 错误!无法通过对象实例访问静态成员
-
生命周期:
C++:在C++中,静态成员的生命周期与整个程序运行时间相同。它们在程序开始时创建,在程序结束时销毁。
Java:在Java中,静态成员的生命周期与类的加载和卸载过程相关。它们在类加载时被创建,在类被卸载时被销毁。