一、概述
static表示“静态”的意思,可以用来修饰成员变量和成员方法。
static的主要作用在于创建独立于具体对象的域变量或者方法
简单理解:
- 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
- 并且不会因为对象的多次创建 而在内存中建立多份数据
二、分析
一般来说,当我们在创建类的时候,就是在描述那个类的对象的外观与一些行为;一般需要用new创建那个类的对象,否则,实际上并没有获得任何对象。当我们执行new来创建对象时,数据空间才能被分配,起内部的方法才能被外部调用!
为了更方便理解,我们画图来说emmmmmmm
class Person{
String name;
static string region;
}
Person p = new Person();
当我们创建一个class Person{}的时候它是保存在方法区里面的,当new Person();我们就在堆内存中开辟了一个新的内存空间!而对象p是保存在栈内存中的,用来保存在堆内存中创建的空间地址。这时候如果class里面创建了一个静态属性,我们接着画图!!
class Person{
String name;
static string region;
}
Person p1 = new Person();
Person p2 = new Person();
可以看到静态修饰的属性在方法区中(理解:非静态方法创建的属性可以理解为对象的属性,静态方法创建的属性为类的属性)static属性是共用的。
总结
当声明一个事物是static时,就意味着这个与或方法不会与包含它的那个类的任何对象实例关联在一起。所以即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。通常,你必须创建一个对象,并用它来访问数据或方法。因为非static域和方法必须知道他们一起运作的特定对象!!!
重点:
- 静态成员 在类加载时加载并初始化。
- 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份(可以理解为所有对象公用)
- 在访问时: 静态不能访问非静态 , 非静态可以访问静态 !