关键字static具有计数的功能,static 变量放在内存data segment区,若没有static 定义的变量则成为成员变量作为new出来的对象的参数,下面分别将给出两个程序以示区别以及执行的内存分析图如下:
程序一(有static):
- public class Cat{
- private static int sid = 0;
- String name;
- int id;
- Cat(String name) {
- id = sid++;
- this.name = name;
- }
- void info(){
- System.out.println("My name is" + " " + name + " " + "id=" + id);
- }
- public static void main(String[] args) {
- Cat.sid = 100;
- Cat mimi = new Cat("mimi");
- mimi.sid = 200;
- Cat pipi = new Cat("pipi");
- mimi.info();
- pipi.info();
- }
- }
内存分配图如下:
程序二(无static):
- public class Cat{
- private int sid = 0;
- String name;
- int id;
- Cat(String name) {
- id = sid++;
- this.name = name;
- }
- void info(){
- System.out.println("My name is" + " " + name + " " + "id=" + id + " " +"sid=" + sid);
- }
- public static void main(String[] args) {
- //Cat.sid = 100;
- Cat mimi = new Cat("mimi");
- mimi.sid = 200;
- Cat pipi = new Cat("pipi");
- mimi.info();
- pipi.info();
- }
- }
内存分配图如下: