在已经建立对象的情况下,能否调用静态方法能调用对象方法输出name

调用静态方法能调用对象方法和創建对象来调用方法的速度比较

比比两者执行速度,为什么

------解决方案--------------------无论是静态方法能调用对象方法还是实例方法都是通过类型方法表来查找,然后再去执行的每次调用都会创建新的临时堆栈,只要调用代码相同怎么可能有效率高低之分?

------解决方案--------------------如果把对象实例囮时间强加在调用方法之上有什么意义?

只要设置一个全局实例,那每次调用就不会有多出来的时间了.

------解决方案--------------------在性能上,静态方法能调用对象方法确实要比非静态方法能调用对象方法快一些,但不明显,并且我们使用静态方法能调用对象方法的原因也不是因为它快.我个人认为静态方法能调用对象方法与实例方法的使用只是为了区分语义.因为有些操作是与类相关而不是与这个类的实例相关的,此时可以考虑使用静态方法能调用对象方法.比如一个会员类可以有一个公共静态的Delete(int ID)方法,这个方法用于删除任一指定的会员,但这个会员类的实例却不应该提供这样的方法.

关于静态方法能调用对象方法与非静态方法能调用对象方法的性能:CLR通常在编译我们的代码时会对我们的代码进行安全检查并生成一些额外的代码.在调用静态方法能调用对象方法时,CLR在找到类型后可以直接调用.但在调用非静态方法能调用对象方法时,CLR先要判断该实例是否为NULL,如果為NULL则会引发异常,如果不为NULL,则根据实例推导出实例的类型,最后实现调用.也就是调用所经过的步骤数量是不一样,从而造成非静态方法能调用对潒方法要比静态方法能调用对象方法慢,但这种差异在运行时应该是很细微的.

在实例对象(new)之前类中的变量,方法并没有在内存中开辟空间通俗的说只是注册或声明下有这个类,有这些方法变量。而静态方法能调用对象方法或变量已经在靜态池中开辟了空间那在没有new之前肯定是不能调用。而new之后类中所有的变量方法在内存中开辟了空间,所以就能调用了

你对这个回答的评价是?

我要回帖

更多关于 静态方法能调用对象方法 的文章

 

随机推荐