重庆公司注册网站,红灰搭配网站模板,专业做全景图的网站平台,网页建站怎么设置前言#xff1a;上一篇中我们介绍了new关键字 点击打开链接#xff0c;new一个类#xff0c;实际上就是调用该类的构造函数#xff0c;返回该类的对象。如a new Animal();返回的对象赋给变量a。我们来分析一下内存分配的步骤#xff0c;new一个类#xff0c;实际上就创造…前言上一篇中我们介绍了new关键字 点击打开链接new一个类实际上就是调用该类的构造函数返回该类的对象。如a new Animal();返回的对象赋给变量a。我们来分析一下内存分配的步骤new一个类实际上就创造了一个对象就要为这个对象分配内存来存储成员变量放在哪里放在了堆内存中。那么把这个对象赋给a需要再开辟一块儿堆内存然后复制成员变量么答案是否定的。实际上a是一个引用变量它只存储内存的地址系统会让这个引用变量指向对象的内存而不会重新开辟。所以如果希望垃圾回收机制回收某个对象那么只需要切断该对象所有引用变量和该对象(该内存空间)的关系即anull;内存将会自动被回收。那么a存放在哪里a存放在栈中。thisthis关键字引用(指向)调用该方法的对象。但倘若this出现在构造器中则是引用该构造器正在初始化的对象。那么this到底有什么用我们会遇到这种情况一个方法中需要调用另一个方法由于调用任何方法都需要对象那么如果调用的是本方法对象中的另一个方法则用this关键字来表示这个对象。当然不用this关键字同一个对象中的方法可以相互调用但是其本质还是隐式的调用了this方法。那么问题就来了1static修饰的方法中是否可以调用非static修饰的成员方法答案否因为调用方法实际上隐式的调用了this来告知对象是谁但是static修饰的方法是属于类的而不是属于对象的。所以无法找到对应该方法的对象。也就是不能使用this也就无法调用其他方法了。那么问题就来了2static修饰的方法中是否可以调用static修饰的成员方法答案是因为调用static修饰的方法实际上默认调用了该类(见点击打开链接)而不是this又static修饰的方法可以找到该类所以static调用static是可行的。如果实在是必须在静态方法中调用非静态变量或方法怎么办那就只能在调用的时候重新申请对象比如System.out.println(new Animal().foot);那么问题又来了既然static这么不好使为什么还要设置static这么个关键字其实其区别就在于使用static修饰的方法无论对象是谁调用的结果都一样。但是非使用static修饰的方法不同的对象调用就会不同。比如static修饰了一个变量x则无论创建多少实例其调用的都是这个x。但是如果调用普通变量b那么每次创建实例都要重新给b赋值。因为static变量是属于类的其生存周期和类相同但是普通变量是属于对象的其生存周期与变量是相同的对象不存在了该变量就不存在了。成员变量(无论是类变量还是对象变量)都存放在堆中但是局部变量则存放于栈中由于局部变量不需要系统垃圾回收随着代码块儿或者方法的运行结束而结束所以所占内存比较小。