Java(十六)static关键字

124 阅读4分钟

static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。

总结一句话就是:

方便在没有创建对象的情况下来进行调用(方法/变量)。

 

Static关键字特点:

1.被static所修饰的成员是随着字节码文件对象的加载而加载,所以是优先于对象存在于内存中(也就是说,类被加载了,就可以调用类中的静态方法)

2.被static所修饰的成员被该类下所有的对象所共享

3.被static所修饰的成员可以通过类名.直接调用

 

Static关键字注意事项:

1:静态方法中不能有this关键字

2:静态方法中可以调用静态成员变量和静态成员方法,但是不可以调用非静态的成员变量和调用方法。

非静态方法中可以调用静态的成员变量和成员方法,也可以调用非静态的成员变量和成员方法。

3:静态方法和非静态方法是不可以重名的。

4:静态成员变量也是可以通过this来调用的,但是会报警告:The static field person.age should be accessed in a static way

 

下面我们在代码中测试一下:

首先我们定义一个person类:

class person{
    static int age;
    static int weight;
    static int height;
    static String name;
    /**
     * 构造方法
     */
    public person(int a,int w,int h,String n)
    {
        // 静态成员变量也是可以通过this来调用的,但是会报警告:The static field person.age should be accessed in a static way
        this.age = a;
        // 正常调用
        weight = w;
        height = h;
        name = n;
    }
    /**
     * 自我介绍
     */
    public void introduce()
    {
        System.out.println("我是非静态方法");
        System.out.println("我叫:"+name);
        System.out.println("我的身高:" + height);
        System.out.println("我的体重:" + weight);
        System.out.println("我的年龄:" + age);
    }
    /**
     * 自我介绍
     */
    public static void introduceStatic()
    {
        System.out.println("我是静态方法");
        System.out.println("我叫:" + name);
        System.out.println("我的身高:" + height);
        System.out.println("我的体重:" + weight);
        System.out.println("我的年龄:" + age);
    }
}

类中有四个静态的成员变量,age,name,hight,weight。

有构造方法,有一个非静态方法introduce,静态方法introduceStatic。

下面我们先来调用静态成员变量及静态方法

public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
    }

输出:

我是静态方法

我叫:null

我的身高:0

我的体重:0

我的年龄:0

 

因为我们没有给person类的静态成员变量赋值,因此我们的静态方法输出的都是0

接下来,我们给静态变量赋值,再次调用静态方法

    public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
        // 2:给person类静态成员变量赋值,再调用静态方法
        person.age = 18;
        person.weight = 100;
        person.height = 180;
        person.name = "玛丽亚";
        person.introduceS();
    }

输出:

我是静态方法

我叫:玛丽亚

我的身高:180

我的体重:100

我的年龄:18

 

下面我们再实例化一下person类,调用一下非静态方法:

    public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
        // 2:给person类静态成员变量赋值,再调用静态方法
        person.age = 18;
        person.weight = 100;
        person.height = 180;
        person.name = "玛丽亚";
        person.introduceS();
        // 3:调用非静态方法
        person per = new person(28108168"格洛瑞亚");
        per.introduce();
    }

输出:

我叫:格洛瑞亚

我的身高:168

我的体重:108

我的年龄:28

 

最后,我们玩点不一样的,我们在实例化person类之后,再次给类的静态成员变量赋值,看我们再调用非静态方法的时候是什么结果:

    public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
        // 2:给person类静态成员变量赋值,再调用静态方法
        person.age = 18;
        person.weight = 100;
        person.height = 180;
        person.name = "玛丽亚";
        person.introduceS();
        // 3:调用非静态方法
        person per = new person(28108168"格洛瑞亚");
        person.age = 20;
        person.weight = 120;
        person.height = 188;
        person.name = "福特儿";
        per.introduce();
    }

输出:

我是非静态方法

我叫:福特儿

我的身高:188

我的体重:120

我的年龄:20

 

输出的结果是我们赋值之后的值。

 

以上大概就是java中static的基本使用。

 

有好的建议,请在下方输入你的评论。