Java中static修饰成员变量

/*
* static修饰成员方法
*
* 格式:
*   权限修饰符 static 返回值类型 方法名(形式参数列表){
*       // 方法体;
*   }
*
* 【重点】
*   用static修饰的成员方法,称之为【静态成员方法】,这个【静态成员方法】是早于对象的创建而【加载】
*   对象销毁之后仍然存在
*
*   所以说:【静态成员方法】和对象“无关”
*
*   如果采用类对象调用【静态成员方法】会报警告
*   应该直接使用静态的方式来调用
*
* 【注意事项】
*   1. 在静态方法中不能用this关键字
*       推论:
*           因为【静态成员方法】可以通过类名来调用,用雷鸣调用的情况下,是不存在对象的,而this关键字
*           是用来表示调用该方法的对象关键字,这里不存在对象,所以不能用。
*       【没有对象】
*
*   2. 在static修饰的【静态成员方法】中,不能使用【非静态成员变量】,因为【非静态成员变量】是保存在类对象
*   的【堆区】内存中,和类对象共存,而在【静态成员方法】的调用过程中是没有对象的,所以不能使用【非静态成员变量】
*
*   3. 想在【静态成员方法】中使用非静态成员变量
*       在当前【静态成员方法】中使用new关键字,调用构造方法,创建一个对象,使用该对象,
*        案例:
*           单例设计模式
* 【总结】
*   静态对静态,非静态对非静态
*
* 【静态成员方法用途】
*   1. 调用方便
*   2. 用来完成一些【工具类】
*   
* */

class Dog{
    // 成员变量
    private String name;
    // 静态成员变量
    static String country = "JP";

    // 构造方法
    public Dog(){}
    public Dog(String name){
        this.name = name;   // JSP
    }
    // setter 和 getter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 成员方法
    public void run(){
        this.name = "110";  // 使用this关键字调用非静态成员变量
        name = "112";   // 非静态成员变量
        country = "Janp"; // 静态成员变量

        System.out.println("跑来跑去");
    }
    public static void sleep(){
        country = "RB";    // 静态成员变量
//        name = "003";   // 这个会报错
        System.out.println("睡大觉");
    }

    // 在静态方法中创建对象
    public static void test(){
        Dog dog = new Dog("狗子");

        System.out.println(dog.name);
    }
}

public class static修饰成员方法 {
    public static void main(String[] args) {
        Dog dog = new Dog("Bobo");

//        dog.sleep();  // 这个出现警告
        Dog.sleep();    // 推荐使用这种方式进行调用
    }
}

你可能感兴趣的:(Java中static修饰成员变量)