1. 由static修饰的方法叫做类方法或静态方法。
2. 由static修饰的变量叫静态变量,也叫类变量。
3. 静态变量定义的位置是在方法之外。普通的各种变量都是属于某个对象,静态变量则是整个类只有一个变量,他跟对象是没有关系的,跟他相关联的是类而不是对象。
例:
package com.dzh.mystatic;
public class StaticDemo01 {
/**
* 静态变量
*
* @param args
*/
int comm = 0; // 声明普通变量
static int staticint = 0; // 声明静态变量
// 类的构造方法
StaticDemo01(int x) {
comm = x;
}
public static void main(String[] args) {
// 创建两个对象
StaticDemo01 s1 = new StaticDemo01(1);
StaticDemo01 s2 = new StaticDemo01(2);
System.out.println("s1.comm = " + s1.comm);
System.out.println("s2.comm = " + s2.comm);
System.out.println("s1.staticint = " + s1.staticint);// 不规范的访问静态变量的方式,这里是为了体现静态变量与普通变量的区别
System.out.println("s2.staticint = " + s2.staticint);
System.out.println("静态变量staticint = " + StaticDemo01.staticint);// 规范的访问静态变量的方式
s1.comm++;// 通过对象s1改变普通变量的值
s1.staticint++;// 通过对象s1改变静态变量的值
System.out.println("改变后的值: ");
System.out.println("s1.comm = " + s1.comm);// 值改变
System.out.println("s2.comm = " + s2.comm);// 值不变
System.out.println("s1.staticint = " + s1.staticint);
System.out.println("s2.staticint = " + s2.staticint);
System.out.println("静态变量staticint = " + StaticDemo01.staticint);
// 通过一个对象改变静态变量的值,两个对象的值都改变了。静态变量作为类变量,所有的对象只是共有一个值。
}
}
4. 静态变量与静态方法都是在类从磁盘加载至内存后被创建的,与类同时存在,同时消亡。
5. 静态变量又称类的成员变量,在类中是全局变量,可以被类中的所有方法调用。
6. 静态变量的值由JVM自动初始化。
7. 通过一个对象改变静态变量的值,所有对象的访问的都是改变之后的值。通过“类名.变量名”来访问静态变量,“类名.方法名”来访问静态方法。
8. 使用静态方法注意:静态方法不能直接访问非静态变量;非静态方法可以直接访问静态变量。
9. 静态常量的定义:public static final double X = 3.1415926;
静态常量用来存储一些在程序中不会改变的信息。
10. 静态变量、静态常量的初始化是调用构造函数之前完成的。可以把静态变量的初始化放在静态语句块中提前完成初始化,因为静态语句块的执行实际上是在类加载的时候执行,在程序执行之前加载工作已经完成了。
package com.dzh.mystatic;
/**
* 在静态语句块中完成对静态变量的初始化
*
* @author Daisy
*
*/
public class StaticDemo04 {
public static final double PI = 3.1415926;//静态常量
static int x = 0;
static {
x = 100; //初始化静态变量x的值
}
public static void main(String[] args) {
//创建一个对象,创建对象之前会先执行static代码块
StaticDemo04 s = new StaticDemo04();
System.out.print(StaticDemo04.x);
}
}