static修饰符可以用来修饰类的成员变量、成员方法和代码块。
用static修饰的成员变量表示静态变量,可以直接通过类名来访问;
用static修饰的成员方法表示静态方法,可以直接通过类名来访问;
用static修饰的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。
static变量
(1)静态变量与实例变量的区别:
静态变量在内存中只有一个拷贝,运行时Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态类变量的内存分配。可以直接通过类名访问静态变量;
对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
(2)static变量,提供了全局变量的功能:
能被类的所有实例共享,可作为实例之间进行交流的共享数据;
如果类的所有实例都包含一个相同的常量属性,可以把这个属性定义为静态常量类型,从而节省内存空间。
static方法
(1)静态方法可访问的内容
静态方法不需要实例化就可以被调用,因此在静态方法中不能使用this, super关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。
(2)实例方法可访问的内容
在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。
(3)静态方法必须被实现
(4)作为程序入口的main()方法是静态方法
main()方法必须用static修饰,这是因为把main()定义为静态方法,可以使得Java虚拟机只要加载了main()方法所属的类,就能执行main()方法,而无须先创建这个类的实例。
在main()静态方法也是不能直接访问实例变量和实例方法的。
(5)方法的字节码都位于方法区
不管实例方法,还是静态方法,它们的字节码都位于方法区内。
static代码块
类中可以包含静态代码块,它不存在任何方法体中。在Java虚拟机加载类时会执行这些静态代码块,每个静态代码块只会被执行一次。
Tips:
Java虚拟机加载静态代码块后,再执行main()方法;
类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类,给类的静态变量赋初始化值。
静态代码块与静态方法一样,也不能直接访问类的实例变量和实例方法,而必须通过实例的引用来访问它们。
posted on 2006-11-29 00:44
EricWong 阅读(258)
评论(0) 编辑 收藏 所属分类:
Java