java 为什么非静态类是 对象名.方法(),而静态类是 类名.方法(),求本质或者原理机制
5个回答
展开全部
java的静态变量也叫做类变量,它开始于类的创建,结束于类的消亡。非静态变量叫做实例变量,它开始于类的实例的创建,结束语类的实例的消亡。
java类在加载时,程序首先会把该类的静态变量加载进内存中,也就是在堆空间中开辟一个区域专门存放。以后不管你new多少个类的对象,该静态变量永远都是在那里的。也就是说,静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。这个静态变量属于这个类,因此用类名.属性或方法。
而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向它。而非静态的属性或方法也在这个时候才被创建。这时的非静态属性或方法是属于这个对象的,而不是属于这个类。因此用对象名.属性或方法。
java类在加载时,程序首先会把该类的静态变量加载进内存中,也就是在堆空间中开辟一个区域专门存放。以后不管你new多少个类的对象,该静态变量永远都是在那里的。也就是说,静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。这个静态变量属于这个类,因此用类名.属性或方法。
而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向它。而非静态的属性或方法也在这个时候才被创建。这时的非静态属性或方法是属于这个对象的,而不是属于这个类。因此用对象名.属性或方法。
展开全部
方法如果
是静态的那么调用的时候可以用对象名.方法(),或者类名.方法()
不是静态的,那么必须用对象名.方法(),因为只有对象存在了,方法才存在。静态方法是所有类实例共享的。
是静态的那么调用的时候可以用对象名.方法(),或者类名.方法()
不是静态的,那么必须用对象名.方法(),因为只有对象存在了,方法才存在。静态方法是所有类实例共享的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就得说到内存,非静态类是引用型,将会生成在堆内存中,而静态类由于加了static关键字,这就会使JVM在初始化时,先初始化静态内容,然后将其放在内存的静态块中,因为静态类在JVM已经初始化,所以直接类名.方法名就可以拿到,而非静态用的时候还没有被初始化,所以需要自己先初始化,完成后再方法名才可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵!描述的话有点多。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态方法是所有类实例共享的。 这句话很好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询