1 class Car 2 { 3 String color; 4 int number; 5 6 void run() 7 { 8 System.out.println(color+"::"+number); 9 } 10 } 11 12 class CarDemo 13 { 14 public static void main(String[] agrs) 15 { 16 Car c = new Car();//c是类类型的变量。 17 //c.color = "blue"; 18 //c.number = 4; 19 c.run(); 20 } 21 } 22 23 /* 24 类与对象的关系: 25 类:对事物的描述。需要体现属性和行为。 26 对象:该类事物创建的示例(实体),通过该对象调用具有的属性和行为。 27 28 成员变量和局部变量的区别: 29 区别一:定义的位置不同。 30 (1)成员变量定义在类中。 31 (2)局部变量定义在方法中。 32 33 区别二:在内存中的位置不同。 34 (1)成员变量存储在堆内存的对象中。 35 (2)局部变量存储在栈内存的方法中。 36 37 区别三:声明周期不同: 38 (1)成员变量随着对象的出现而出现,随着对象的消失而消失。 39 40 对区别三第(1)条的解释说明: 41 class Car 42 { 43 //事物的属性: 44 String color; 45 int number; 46 47 //事物行为: 48 void run() 49 { 50 System.out.println(color+"::"+number); 51 } 52 53 /* 54 说明:这个run方法运行的时候,调用的不是Car这个类里面定义的那个 55 color和number,而是内存中的堆内存中的对象的color和number。 56 */ 57 } 58 class CarDemo 59 { 60 public static void main(String[] agrs) 61 { 62 Car c = new Car(); 63 c.color = "red"; 64 c.number = 4; 65 c.run(); 66 } 67 } 68 (2)局部变量是随着方法的运行而出现,随着方法的弹栈而消失。 69 70 区别四:初始化不同: 71 (1)成员变量因为在堆内存中,所以有默认的初始化值。 72 (2)局部变量没有默认初始化值,必须初始化后才可以使用。 73 /* 74 有一个问题是:Java为什么不把局部变量也初始化呢? 75 原因是一旦Java把局部变量也初始化了,此时局部变量 76 就在内存中占据空间了。Java的机制是什么时候用到了 77 局部变量,什么时候再在内存中为局部变量开辟空间。 78 79 //如果写成如下:则当run方法进栈后,会在内存中为局部变量 80 //x开辟空间。 81 void show() 82 { 83 int x = 4; 84 } 85 86 //如果写成如下:则当run方法进栈后,不会在内存中为局部变量 87 //x开辟空间。 88 void show() 89 { 90 int x; 91 } 92 */ 93 94 */