静态修饰

Posted gl0102

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态修饰相关的知识,希望对你有一定的参考价值。

package cn.gl.ObjectLearn;

/**
 * 静态修饰符: 
 * 由static修饰的变量、常量和方法被称作静态变量、静态常量和静态方法, 他们都存放在内存的“静态区”中,
 * 这些变量和方法有独立的生存周期。
 * 内存中的静态区在整个程序运行结束之后才会释放,所以用静态修饰的代码的生命周期,是整个程序的生命周期。 
 * 静态区:
 * 内存中静态区的变量可以被本类共享,其他类调用本类静态变量和静态方法时,无需实例化就可以调用。
 * 静态变量:
 * 同一个类的不同实例对象,共用同一静态变量,如果一个对象将其 更改,另一个对象的静态变量也会更改。
 * 静态常量:
 * 用final static 修饰一个成员变量,这个成员变量就会变成一个静态常量。
 * 静态方法:
 * 想使用类中的成员方法,需要先将类实例化,但不想或无法创建对象时,我们可以使用静态方法。
 * 调用静态方法无需创建类的对象。
 * 说明:
 * 其实我们一直用的System.out.println()方法就是一个典型的静态方法,
 * 我们没有创建System的对象,就实现了输出功能。类中的Main方法同样也是静态方法。
 * 静态代码块:
 * 在类成员方法之外,用static修饰代码区域就是静态代码块。
 * 定义一块静态代码块,可以完成初始化操作,在类申明时就会运行。
 * @author 冷夜雨花未眠 E-mail:787831425@qq.com
 * @version 创建时间:2019年11月9日
 */
public class ObDemo6 {
    public static void main(String[] args) {
        Pool out =new Pool();
        Pool in=new Pool();
        System.out.println("水池中的水量"+Pool.water);
        System.out.println("向水池里注水两次");
        in.inlet();
        in.inlet();
        System.out.println("水池中的水量"+Pool.water);
        out.outlet();
        System.out.println("水池中的水量"+Pool.water);
        
        StaticVariable a=new StaticVariable(1,2);
        StaticVariable b=new StaticVariable(13,17);
        System.out.println("a.x的值是="+a.x);
        System.out.println("a.y的值是="+a.y);
        //StaticVariable b=new StaticVariable(13,17);
        System.out.println("b.x的值是="+b.x);
        System.out.println("b.y的值是="+b.y);
        
        Circular c=new Circular(3.0);
        Spherical s=new Spherical(3.0);
        //Graphical.PI=1.1;  报错静态常量不能被修改
        
        StaticMethod.show();//没有创建类的对象,直接调用
        
        StaticTest test=new StaticTest();
        test.method();//如果注释这句话,就只会输出3句话
    }
}

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;
    }
    
}
class StaticVariable{
    static int x;//静态变量
    int y;
    public StaticVariable(int x,int y){
        this.y=y;
        this.x=x;
    }
}
class Graphical{//图形类
    final static double PI=3.1415926;//静态常量尽量要大写
}
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);    
    }
}
class StaticMethod{
    static public void show(){
        System.out.println("我是静态的方法");
    }
}
class StaticTest{//测试代码执行顺序
    public StaticTest(){
        System.out.println("这里是构造方法");
    }
    {
        System.out.println("这里是非静态代码块");
    }
    
    public void method(){
        System.out.println("这里是成员方法");
    }
    static{
        System.out.println("这里是静态代码块");
    }
}

输出结果:

水池中的水量0
向水池里注水两次
水池中的水量6
水池中的水量4
a.x的值是=13
a.y的值是=2
b.x的值是=13
b.y的值是=17
圆的半径=3.0
圆的面积=28.274333400000003
球的半径=3.0
球的体积=84.82300020000001
我是静态的方法
这里是静态代码块
这里是非静态代码块
这里是构造方法
这里是成员方法

以上是关于静态修饰的主要内容,如果未能解决你的问题,请参考以下文章

继承,修饰符

支持动态或静态片段的不同屏幕尺寸?

静态修饰

Java 核心基础之static静态代码块和静态方法

Java面向对象(OOP)--static修饰符(static变量static方法代码块和静态代码块创建和初始化对象的过程静态导入)

3分钟弄明白JAVA三大修饰符