本帖最后由 Rockray 于 2013-10-7 14:23 编辑
先上一张图,是毕向东老师的ppt
毕向东老师分别提到 “成员变量定义在类中,局部变量定义在局部范围内(函数内和语句内)”
“ 成员变量存在于堆内存中,局部变量存在于栈内存中”
关于这两点有个疑问,请见如下代码:- class Car {
- String color;
- int num;
- color = "red";
- num = 4;
- void show() {
- System.out.print(color+" "+num);
- }
- }
- class Demo {
- public static void main(String[] args) {
- Car c = new Car(); //创建一个Car类型的对象,存储在堆内存
- c.color = "black"; //把这个对象的color属性修改为“black”
- c.show; //使用这个对象的show()函数,函数中封装功能
- }
- }
复制代码 内存分析图:
Car 类中的变量 color 和 num 确实是成员变量,因为他们既是在类中又是在堆内存中
但 Demo 类中的 变量 c 到底是成员变量还是局部变量?
从内存位置看,变量 c 在栈内存中,应该是局部变量,
从类中位置看,变量 c 直接存在于类中,应为成员变量。
但若是因为 变量 c 在 main() 函数中而是局部变量,那以下代码中的岂不均是局部变量而没有成员变量?- //冒泡排序
- public class MaoPao {
- public static void BubbleSort(int[] a) {
- for(int x=0;x<a.length-1;x++) {
- for(int y=0;y<a.length-x-1;y++) { //-x:让每一次比较的元素数少x个。-1:防止脚标过界。
- if(a[y]>a[y+1]) {
- int t;
- t=a[y+1];
- a[y+1]=a[y];
- a[y]=t;
- }
- }
- }
- }
- public static void Print(int[] a) {
- System.out.print("[ ");
- for(int i=0;i<a.length;i++) {
- System.out.print(a[i]+" ");
- }
- System.out.println("]");
- }
- }
- public static void main(String[] args) {
- int[] a=new int[]{3,1,2,8,5,10,4,12};
- Print(a);
- BubbleSort(a);
- Print(a);
- }
- }
复制代码 还有一个疑问,除了函数内,若语句内的变量为局部变量,但是定义成员变量的也是个语句啊,这怎么解释?
|