1.‘’修饰符

static修饰的变量,常量和方法被称为静态变量,静态常量和静态方法。存放在内存的“静态区”中。在整个程序运行结束后释放。

用静态修饰的代码的生命周期,是整个程序的生命周期。


静态区:内存公共区。内存中静态区的变量可以被本类共享,其他类调用本类静态变量和静态方法时,无需实例化就可以使用。


使用非静态方法,创建类,再使用。


共享的变量用static修饰,该变量就是静态变量。


public class Pool {
  static public int water=0;
  public void outlet(){
   if (water>=2){
   water=water-2;
   }else{
    water=0;
   }
  }
  public void inlet(){
   water=water+3;
  }
  
  public static void main(String[] args) {
   Pool out=new Pool();//创建出水对象
   Pool in =new Pool();
   System.out.println("水池中的水量"+Pool.water);//水池的静态变量
   
   System.out.println("向水池里注水2次");
   in.inlet();
   in.inlet();
   System.out.println("水池中的水量"+Pool.water);
   
   System.out.println("水池放水1次");
   out.outlet();
   System.out.println("水池中的水量"+Pool.water);
   
  }
 }//

水池类创建了2个对象,这两个对象不管是放水还是进水,改变的都是同一个变量,类的静态变量可以被类的所有对象共享。


2.静态变量:同一个类的不同实例对象,共用同一静态变量,如果一个对象更改,另一个也改。

public class StaticVariable {
   static int x;
   int y; //非静态
  
  public StaticVariable(int x,int y){//在构造函数里面赋值
   this.x=x;
   this.y=y;
  }
  
  public static void main(String[] args) {
   StaticVariable a =new StaticVariable(1,2);   //StaticVariable这个类的对象a
   StaticVariable b =new StaticVariable(13,17);
   System.out.println("a.x的值是=" + a.x);
   System.out.println("a.y得值是=" + a.y);
   
   System.out.println("b.x的值是=" + b.x);
   System.out.println("b.y得值是=" + b.y);
  }
  
 }

a.x的值是=13
a.y得值是=2
b.x的值是=13
b.y得值是=17                    a.x ,b.x是静态变量,两个类的x指向同一个位置。b对该区域重新赋值


3.静态常量:final static 修饰一个成员变量,会变成静态常量。共享常量。必须大写。

public class Graphical {
  final static double PI = 3.1415926;
  public static void main(String[] args) {
   Circular c = new Circular(3.0);
   Spherical s = new Spherical(3.0); }
 }
  class Circular{
   double radius;
   double area;
   public Circular(double radius){ //构造方法
    this.radius =radius;
    area=Graphical.PI*radius*radius;
    System.out.println("圆的半径="  + radius);
    System.out.println("圆的面积="  + area);
   }
  }
  
  class Spherical{
   double radius;
   double volume;
   
   public Spherical(double radius){
    this.radius=radius;
    volume =4/3*Graphical.PI*radius*radius*radius;
    
    System.out.println("求的半径="  + radius);
    System.out.println("求的体积="  + volume);
   }
   
  }


4.静态方法:调用类的静态方法,无需创建类的对象。

public class StaticMethod {
 static public void show(){
   System.out.println("我是静态的方法");
  }
  public static void main(String[] args) {
   StaticMethod.show();
  }
 }

System.out.println就是典型的静态方法。没有创建System的对象,Main方法也是。


5.静态代码块:


public class StaticTest { 
 
  static{        //代码块区域 
 
 
 
   { 
 
   System.out.println("这里是非静态代码块"); 
 
  } 
 
   
 
  static{        //代码块区域 
 
   System.out.println("这里是静态代码块");                         静态代码块在非静态代码块之前运行 
 
    
 
  } 
 
   
 
  public StaticTest(){ 
 
   System.out.println("这里是构造方法");                             //构造方法在new的时候就会运行 
 
  } 
 
   
 
  public void method(){ 
 
   System.out.println("这里是成员方法");                              成员方法只有在调用的时候才会用 
 
  } 
 
   
 
 public static void main(String[] args) { 
 
  StaticTest test=new StaticTest(); 
 
  test.method(); 
 
 } 
 
 }



输出是:JAVA代码中各个区域运行的顺序


这里是静态代码块
这里是非静态代码块
这里是构造方法
这里是成员方法