【问题标题】:Calling static method by object...!通过对象调用静态方法...!
【发布时间】:2016-11-08 06:38:01
【问题描述】:

我在某处读到对象不能调用静态方法...但根据下面的代码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 修饰符 但仍然需要输出仍然显示..所以请解释这种方法的工作原理

【问题讨论】:

  • 虽然我可以粗略看看这是什么编程语言(很可能是 java),但将其添加为标签不是至关重要的信息吗?
  • @Xorifelse 是的,它的 java...很抱歉没有添加并感谢您指出...
  • 你在哪里看过这个废话?
  • 反之亦然 - 不能在静态方法中调用非静态方法。

标签: java static static-methods


【解决方案1】:

我们可以在任何地方使用该类的类名和该类的对象访问静态方法。 因为当我们创建一个类的对象(你想调用它的静态方法)来创建对象时,首先 ClassLoader 将 .class 文件加载到方法区域的 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),一个代表类,另一个代表对象。所以我们可以使用对象访问静态方法

【讨论】:

  • 你能详细说明类的引用O/p吗?
  • here。是一个问题,为什么主要方法是静态的。?通过阅读问题,我怀疑 jvm 将如何首先创建对象然后调用 main();最终会导致额外内存分配的方法。
  • @shashimishra 这大约是三个额外的问题,但是main() 是静态的这一事实消除了 JVM 首先创建对象的需要。
  • 调用 main() 我们不需要对象。因为它是一个静态方法。我们可以在没有类的对象的情况下调用静态方法。
  • 但是 jvm 能够调用 main 方法,因为当 jvm 指示类加载器将类加载到 jvm 内存时,第一个 jvm 创建一个 Class 类型的类对象并使用该对象 jvm 调用 main() 一个线程不是函数。
猜你喜欢
  • 1970-01-01
  • 2011-12-14
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2016-09-13
  • 2010-11-26
  • 2014-03-09
相关资源
最近更新 更多