[类中定义的变量是成员变量,也称为实例(对象)变量。如果该变量被static修饰,称静态变量,也称为类变量。]
1,它是一个修饰符,用于修饰成员(成员变量和成员函数)
2,被静态修饰后的成员变量,可以被对象共享。
3,静态优先于对象存在。
4,对于静态成员,除了对象可以访问之外,还可以被类名直接访问。
类名.静态成员
5, 静态随着类的加载而加载,随着类的消失而消失。
6, 对象特有的数据存储到对象的堆内存中。
7, 对象的共享数据存储在方法区的静态区中。
特点:(栈内存只是方法的运行区,而方法真正是存在于方法区中或叫数据共享区中的,随着类的一加载方法就已经进了方法区。方法区中有个静态区,用来存放静态属性和静态方法既能被对象调用也可被类名调用,如果没有创建对象就只能被类名调用。所以静态属性和方法是优先于对象存在的)(非静态方法只能被对象调用)
静态什么时候用?
1,静态变量。
当对象中的数据都相同时。就将该数据定义成静态的。
被所有对象共享即可。没有必要每一个对象都存储一份,那样只是浪费空间。
2,静态函数。
如果函数中没有访问到对象中的特有数据。
那么该函数需要被静态修饰。不需要创建对象,就可以通过类名 访问该函数了。
静态代码块:(随着了类的加载而执行,且只执行一次,用于给类进行初始化,可以通过静态代码块来验证类是否被加载)
静态代码块 static
{
System.out.println("B");
}
【构造代码块用于给所有对象进行初始化】
成员变量和静态变量的区别:
1,在内存空间存储的位置。
成员变量存储于对象所在堆内存中。
静态变量存储方法区的静态区中。
2,生命周期。
成员变量随着所属对象的建立而出现,随着所属对象变成垃圾被 回收而消失。静态变量随着所属的类加载而出现,随着类的消失而消失 。
3,调用方式。
成员变量只能被对象调用。
静态变量既可以被对象调用,也可以被类名调用。
4,数据体现。
成员变量的值称为对象中的特有数据。
静态变量的值称为对象中的共享数据。
静态使用的注意事项:
1,静态方法只能访问静态成员(所以静态虽然多了一种用类名调用 的方式,但是也出现了访问的局限性)。
非静态方法既可以访问静态又可以访问非静态。
因为非静态们,都所属于对象。
2,静态方法中不可以出现this,super关键字。
因为this代表对象,static方法存在时还没有对象呢.
3,主函数是静态的。
|