面向对象基础篇 - static (静态)
方法区:
- 静态方法区
- 非静态方法区
输入JVM内存中的一部分(堆,栈),主要用于存放编译好的 字节码文件
静态变量 :
-
代码: 成员变量被 static 关键字修饰
//例如: class Demo{ static int a; static double b; static String c ; }
-
含义:对象之间的共有属性
//例如: //对于西安欧鹏的学员来说,属性:辅导机构都是欧鹏 //那么此时,我们就可以将这个属性定义为静态属性 class OpStudent{ static String institution ="西安欧鹏"; }
-
存储位置:
对于由static 关键字修饰的属性,我们将其理解为类所描述的所有对象的共有属性,按常理来说,我们应该将这个属性存放在对象内存中,但是因为他是共享属性,为了节省空间,我们将这一属性提取出来,放到一个专门存放静态属性的地方,让对象从这个位置来调用它,
这个位置就是-------------静态方法区
-
与普通成员变量的区别:
-
普通成员变量:
- 生命周期:对象的创建而诞生,随着对象的消亡而消亡
- 存储位置:存储在堆内存中相应对象的空间里
- 调用方式: 类的内部成员函数可以通过属性名或this.属性名直接调用,类的外部可以在创建对象之后,通过对象来调用
-
静态属性
-
生命周期:随着类的加载诞生,随着类的卸载而消亡
-
存储位置:静态方法区中,为相应类开辟的空间里
-
调用方式:类的内部静态/成员函数都可直接调用,在函数的外部,可以在创建对象后通过对象来掉用,也可以直接使用 类名.属性 来调用
-
-
静态函数:
-
代码:成员函数被static关键字修饰
//例如: public static void main(String[] args){ }
-
使用:当这个成员函数内部不会直接调用成员变量/函数时,就可以定义为静态函数
-
内存:静态方法区
静态函数内部不存在 this 指针,
静态代码块:
-
代码:在类的内部,使用static 修饰的{ }
class Demo{ static{ System.out.println("我是静态代码块!"); } }
-
作用:在对象创建之前对对象做一些初始化
静态:
静态修饰的属性和方法,是优先于对象加载的,优先于其他属性和方法被加载进内存。
并且对于多个对象来说,静态属性和方法只加载一次