Java内存思维

3/3/2017来源:C/C++教程人气:2113

1-java方法与属性调用

Java中调用属性与方法有什么规则? 不同的对象之间: 访问类的静态属性:类名.属性;对象名.属性 访问类的动态属性:对象名.属性 调用类的静态方法:类名.方法名();对象名.方法名() 调用类的动态方法:对象名.方法名() 同一个对象之间: 访问类的动态属性:对象名.属性 访问类的静态属性:类名.属性;对象名.属性 调用类的动态方法:方法名();对象名.方法名 调用类的静态方法:类名.方法名();对象名.方法名

2-内存思维 静态调用的内存理解: 这里写图片描述

这里写图片描述 动态调用的内存理解: 这里写图片描述 这里写图片描述 下面例子为什么有这样的输出结果?从内存的角度理解。 因为new出一个新的内存来存放动态属性,改变一个对象内的动态属性并不改变TestA和其他对象内的动态属性。动态属性的存放是各自独立,互不影响的。 这里写图片描述 这里写图片描述

下面例子为什么有这样的输出结果?从内存的角度理解。 因为new出来的对象是通过引用TestA来开辟内存空间的,ta1和ta2都可以直接调用静态属性和方法,所以当其中的一个对象调用后改变了静态属性和方法,其它的对象再次调用时,这个值会变成前一个对象调用后改变的值 这里写图片描述 这里写图片描述

什么时候用静态属性?什么时候用动态属性? 当属于每一个新建的类特有的属性时用动态属性;属于所有的类公用的属性时使用动态属性。 希望共享的内容设置为静态属性,不共享的内容设置为动态属性。

类内部动态方法调用动态属性/方法为什么可以不new? 因为它们在同一个类中。即它们放在同一个内存块中,可以直接调用。

TestA ta = new TestA();与TestA ta = null;的区别? 有new,内存才会对这个对象的动态属性分配内存空间。第二种分配了内存空间,但内存中不存在动态属性。