JavaSE—7.static关键字

static关键字

  • 在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。
  • 用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员,
    • 静态方法不再是针对某个对象调用,所以不能访问非静态成员。
  • 可以通过对象引用或类名(不需要实例化)访问静态成员。
  • 静态变量存放在内存中的数据区(data seg)中,
public class Cat {
    private static int sid = 0;
    private String name;
    int id;
    Cat(String name){
        this.name = name;
        id = sid++;
    }
    public void info(){
        System.out.println("My name is " + name + "No." + id);
    }
    public static void main(String[] args) {
        Cat.sid = 100;
        Cat mimi = new Cat("mimi");
        Cat pipi = new Cat("pipi");
        mimi.info();
        pipi.info();
    }
}

​ 执行Cat.sid = 100;时,在data seg中分配一个空间给sid并赋值为100,然后执行Cat mimi = new Cat("mimi");,先在栈内存中为mimi分配一个空间,new出来的cat对象在堆内存中,其有两个成员变量name和id,传的参数是字符串类型的”mimi“,”mimi“是一个String类型的对象,存放在内存中的data seg中,name应指向这块内存,然后准备调用cat的构造方法,构造方法有一个形参name,先在栈内存中为其分配一个空间,开始执行构造方法,this.name = name;,将data seg中的name(”mimi“)赋给mimi这个对象中的name,所以mimi这个对象中的name应指向data seg中的name,所以mimi对象中的name变量的值应该为“mimi”,然后执行id = sid++;,sid的初始值为100,先将100赋给id然后加1变成101存在data seg中,所以mimi对象id为100。

Cat pipi = new Cat("pipi");执行时同上。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_32661327/article/details/83218625