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代码中各个区域运行的顺序
这里是静态代码块
这里是非静态代码块
这里是构造方法
这里是成员方法