Java static修饰符对于属性和方法的含义

127 阅读2分钟

属性:全局变量,成员变量 ,field

划分纬度:是否添加static

  1. 非static 实例变量(实例成员变量 非静态变量 对象级别(私有效果,对象独有,互不影响)

调用:对象名.属性

  1. static 类变量(类成员变量 静态变量 类级别(公共享有,不属于某个对象,各个对象都可以用,属于类级别)

调用:类名.属性 对象.属性(不推荐)

方法:成员方法 method

划分纬度:是否添加static

1.非static 非静态方法 实例方法(实例成员方法 对象级别(私有效果,对象独有,互不影响)

调用:对象名.方法 (有时 this super代表某个对象)

2.static 静态方法 类方法(类成员方法)

调用:类名.方法 对象.方法(不推荐)

方法调用:

1.同级别的方法(加或者不加static) 在当前类中可以直接调用 即类名可以省略,在不同类中类名不能省略

2.不同级别的方法(一个加,一个不加static)

如果不同级别的方法,非静态的方法(对象级别可以调用静态的方法即属于类级别的方法)-》静态

如果不同级别的方法,静态的方法不能直接调用,可以间接调用非静态的方法(通过创建对象 对象.方法)

在不同类中:

1.非static 对象.方法

2.static 类名.方法 (对象.方法)不推荐

业务场景:

侧重业务处理不侧重归属对象一般添加为static 例如:Arrays.toString() 工具类(共通类

大部分业务侧重对象级别


public class Dog {
    private int id;// 对象级别   实例变量
    private String name;// 对象级别 实例变量
    private static int foodCount;// 类级别 类变量

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.id = 101;
        dog.name = "旺财";
        dog.foodCount = 5;

        Dog dog2 = new Dog();
        dog2.id = 102;
        dog2.name = "糖豆";
        dog2.foodCount = 6;

        System.out.println(dog.name);
        System.out.println(dog2.name);
        System.out.println(dog.foodCount);// 不推荐
        System.out.println(Dog.foodCount);// 标准方式  类名.属性 (static级别
        Dog dog3 = new Dog();
        dog3.eat();



    }

    /*
    * 对象级别的方法(非静态方法
    *
    * */
    public void eat(){
        System.out.println("狗吃狗粮");
        //changeFood();

    }

    public static void changeFood(){
        System.out.println("更改食物数量");
        Dog dog = new Dog();
        dog.eat();

    }

}