static关键字修饰属性

static 静态的,可以修饰属性,方法,代码块(或初始化块) , 内部内

非static修饰的属性(实例变量):各个对象各自拥有一套各自的副本

static修饰属性(l类变量):

                1.由类创建的所有的对象,都共用一个属性

                2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。

                3.类变量随着类的加载而加载的。而且独一份

                4.静态的变量可以直接通过 “类.类变量” 的形式来调用

                5. 类变量的加载要早于对象,所以当有对象以后, 可以 "对象.类变量"  的使用,但是 "类.实例变量" 是不行的

                6.类变量存在于静态域

 

static修饰方法(类方法):

                 1.随着类的加载而加载,在内存中也是独一份

                 2. 可以直接通过  "类.类方法" 的方式来调用

                 3.内部可以调用静态的属性或者静态的方法,而不能调用非静态的,反之非静态的是可以调用静态的

                 4.静态的方法内不能有 this 或者 super 关键字

注意:静态的结构(static的属性,方法,代码块,内部类)的生命周期要早于非静态的结构,同时回收也要晚于非静态的结构。生命周期比较长

 

TestSportsMan:

package com.aff.wrapper;

public class TestSportsMan {
    public static void main(String[] args) {
        SportsMan s1 = new SportsMan("苗苗", 25);
        SportsMan s2 = new SportsMan("芳芳", 26);
        s1.name = "文静";
        s1.nation = "China";
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(SportsMan.nation);// 类变量随着类的加载而加载的。而且独一份
        // SportsMan.show1();//无法直接调用
        SportsMan.show2();
    }
}

class SportsMan {
    // 实例变量
    String name;
    int age;
    // 类变量
    static String nation;

    public SportsMan(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "SportsMan [name=" + name + ", age=" + age + ", nation=" + nation + "]";
    }

    public void show1() {
        System.out.println("我喜欢芳芳");
    }

    public static void show2() {
        System.out.println("我喜欢苗苗");
    }
}

输出结果:

SportsMan [name=文静, age=25, nation=China]
SportsMan [name=芳芳, age=26, nation=China]
China
我喜欢苗苗

 

 

posted @ 2020-03-19 12:53  林淼零  阅读(507)  评论(0编辑  收藏  举报