我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,有时候,我们希望该类的所有成员共享一个成员。这时可以用static来修饰。
Java中static作为修饰符,可以用来修饰变量、方法、代码块。
1、静态方法
被static修饰的变量成为静态变量,又可以成为静态成员或类成员。它属于整个类所有,而不是某个对象所有,被类的所有对象共享。类变量在类加载的时候初始化分配空间,而且只被初始化一次,直到该类被卸载时才将资源回收。
静态成员可以使用类名直接访问,也可以使用对象进行访问。在程序中任何对象对静态变量做修改,其它对象看到的是修改后的值。
public class Test { static String play="football"; public static void main(String[] args) { System.out.println("通过类访问静态变量,"+play); Test test=new Test(); System.out.println("通过对象访问静态变量,"+test.play); test.play="basketball"; System.out.println("通过对象访问静态变量,"+test.play); } }
2、静态方法
用static修饰的方法,称为静态方法或类方法,经常用到的main方法就是静态方法。
静态方法中可以直接调用同类中的静态变量,但不能直接调用非静态变量,可以通过创建对象后访问非静态变量;静态方法中不能直接调用非静态方法,可以通过对象来访问非静态方法。
public class Test { String game="DOTA"; static String play="football"; public static void main(String[] args) { print(); } public static void print(){ System.out.println("访问静态变量,"+play); // System.out.println("访问非静态变量,"+game); //静态方法不能直接访问非静态变量 Test test=new Test(); System.out.println("访问非静态变量,"+test.game); // show();//静态方法不能直接调用非静态方法 test.show(); } //普通方法中,可以直接访问同类的非静态变量和静态变量 public void show(){ System.out.println("访问静态变量,"+play); System.out.println("访问非静态变量,"+game); print();//普通方法可以直接调用静态方法 } }
3、代码块
用static去修饰类里面的一个独立的代码块,称为静态代码块。
静态初始化块只在类加载时执行,且只会执行一次,静态代码块没有名字,不能显示调用,只能在类加载的时候调用。
静态初始化块只能给静态变量赋值,不能初始化普通成员变量。
public class Test{ String film; String game; static String play; public static void main(String[] args) { Test test=new Test(); System.out.println("film="+test.film); System.out.println("game="+test.game); System.out.println("play="+play); Test test2=new Test(); } public Test(){ film="爱奇艺"; System.out.println("通过构造方法赋值 film"); } { game="DOTA"; System.out.println("通过初始化块赋值 game"); } static { play="football"; // game="DOTA";//不能赋值 System.out.println("通过静态初始化块赋值 play"); } }
输出结果:
通过静态初始化块赋值 play
通过初始化块赋值 game
通过构造方法赋值 film
film=爱奇艺
game=DOTA
play=football
通过初始化块赋值 game
通过构造方法赋值 film
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/afei3418/article/details/48009223