java中static的用法(一)静态成员变量

来源:互联网 发布:vps进入数据库 编辑:程序博客网 时间:2024/05/01 23:12

static可以修饰成员变量、方法、游离块、内部类。

     static修饰的成员变量:static修饰的成员变量也叫类变量或全局变量,在类被加载时static修饰的成员变量被初始化,与类关联,只要类存在,static变量就存在。一个static变量单独划分一块存储空间,不与具体的对象绑定在一起,该存储空间被类的各个对象所共享。也就是说当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例对象共用同一个static变量。static修饰的成员变量能在创建任何实例对象之前被访问,而不必引用任何对象,也就是说不管创建多少对象,static修饰的变量只占有一块内存。

static修饰的成员变量的引用:

     可以通过实例对象名和类名进行引用,在同一各类中可以直接调用,而不需要对象名和类名。

看下面实例:

package com.baiye.test;

public class StaticTest {
 static int a=9;
 static String str="quan";
 public StaticTest(){
  System.out.println("static变量在类装载的时候就初始化(在实例化对象之前):a="+a);
  //a=4;
  System.out.println(a);
  System.out.println(str);
  
 }
 static void staticMethod(){
  str="baiye";
  //return str;
  System.out.println("在静态方法引用静态变量:str="+str);
 }
 void generalMethod(){
  a=6;
  System.out.println("在非静态方法中调用静态变量:a="+a);
 }
 public static void main(String[] args){
  StaticTest st1=new StaticTest();
  StaticTest st2=new StaticTest();
  StaticTest st3=new StaticTest();
  st1.a=5;
  System.out.println("st1.a="+st1.a+" st2.a="+st2.a+" st3.a="+st3.a);
  staticMethod();
  System.out.println("st1.str="+st1.str+" st2.str="+st2.str+" st3.str="+st3.str);
  StaticTest st4=new StaticTest();
  st1.generalMethod();
  System.out.println("st1.a="+st1.a+" st2.a="+st2.a+" st3.a="+st3.a);
 }

}

输出结果:

static变量在类装载的时候就初始化(在实例化对象之前):a=9
9
quan
static变量在类装载的时候就初始化(在实例化对象之前):a=9
9
quan
static变量在类装载的时候就初始化(在实例化对象之前):a=9
9
quan
st1.a=5 st2.a=5 st3.a=5
在静态方法引用静态变量:str=baiye
st1.str=baiye st2.str=baiye st3.str=baiye
static变量在类装载的时候就初始化(在实例化对象之前):a=5
5
baiye
在非静态方法中调用静态变量:a=6
st1.a=6 st2.a=6 st3.a=6

在这个结果中我们可以看出不管实例多少个对象static修饰的成员变量只占有一块