2016-11-08 80 views
-1

我已经阅读过某个地方,该对象不能调用静态方法...但根据以下代码mm对象正在调用public static void main1(String args[]){}静态方法并显示输出..有人可以解释它为什么?按对象调用静态方法...!

public class Mainmultiple{ 
    public static void main(String args[]) 
    { 
     System.out.println("hello"); 
     Mainmultiple mm = new Mainmultiple(); 
     mm.main1(args);//here object mm is calling static main1 method..?? 
    } 
    public static void main1(String args[]){ 

     System.out.println("Bye"); 
    } 
} 

当我运行执行上面的代码,我只是得到一个警告消息,要么改变classname.staticMethod();静态方法的访问或从main1() 删除static修改但仍然需要输出仍然得到displayed..so请解释这种方法的工作

+0

虽然我可以采取一种狂妄的语言,这是什么编程语言(最有可能的Java),这不是将它作为标签添加的关键信息吗? – Xorifelse

+0

@ Xorifelse是它的Java ...抱歉没有添加和谢谢你指出.. –

+0

你已经读过这个废话在哪里? – EJP

回答

0

我们可以使用该类的类名和该类的任何地方的对象来访问静态方法。 因为当我们为创建对象创建一个类的对象(它想要调用的静态方法)时,第一个ClassLoader会将.class文件加载到Method区域的JVM内存中(在jvm内存中它会创建一个Class对象并存储它)。所以在创建对象之前,它对于你的类是有效的。当你创建一个与该内存相关的对象被创建时。所以你可以使用该对象轻松访问静态方法。 你有没有注意到类的参考o/p ....?

For ex A is a class 
class A{ 
....... 
....... 
} 
A a1=new A(); 
s.o.p(a1); 

的O/P是一样的东西这 - 甲@ 12f2312 在该哈希码两个部分在那里(A,12f2321)一个代表类等代表的对象。所以我们可以使用对象访问静态方法

+0

请您详细说明课堂参考的O/P? –

+0

[here](http://www.javatpoint.com/static-keyword-in-java)。是主要方法为什么是静态的问题。并通过阅读问题我怀疑,如何jvm将先创建对象,然后调用main();方法最终会导致额外的内存分配。 –

+0

@shashimishra这是关于三个额外的问题,但“main()”是静态的这一事实消除了JVM首先创建对象的需要。 – EJP