Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何从另一个对象变量调用对象的函数_Java_Object - Fatal编程技术网

Java如何从另一个对象变量调用对象的函数

Java如何从另一个对象变量调用对象的函数,java,object,Java,Object,这是我的代码: public class First { public static void main(String[] args) { Object o; Second second = new Second(); o = second; o.doSomething(); } } 下一页: public class Second { public Second() { ... }

这是我的代码:

public class First {
    public static void main(String[] args) {
        Object o;
        Second second = new Second();
        o = second;
        o.doSomething();
    }
}
下一页:

public class Second {
    public Second() {
        ...
    }

    public static void doSomething() {
        ...
    }
}
然后我得到NullPointerException 我怎样才能让“o”做点什么?
非常感谢您的帮助。

您必须进行角色扮演

((Second) o).doSomething();
然后我得到NullPointerException

无法在此处获取NullPointerException,因为此代码甚至无法编译

您不能在
o
上调用
doSomething()
,它是对
对象的引用,而不是对
秒的引用。尝试将
o
转换为
Second

((Second)o).doSomething();
或者在
second
本身上调用它:-

second.doSomething();
另外,
doSomething()
是一种静态方法,您可能应该这样做

Second.doSomething();
以下是你的答案:

  • 您必须初始化对象变量,然后分配Second(Second)的实例
  • 正如上面一些人告诉您的那样,doSomething()方法是静态的,因此应该按如下方式访问它:second.doSomething()second.doSomething()(直接使用类名,无需实例化对象)
  • 为什么要将分配给o

    public class First {
    public static void main(String[] args) {
        Object o = new Object();
        Second second = new Second();
    
        o = second;
        // o.doSomething();
        second.doSomething(); // or the following 
        Second.doSomething();
    
    
    }
    
    }


  • 另外,根据下面的评论,您需要为其他类型的对象保留o的实例;当我读到这篇文章时,我想象您正在处理不同类型的类,而在运行时,您不知道将接收哪个对象作为参数。如果这是正确的,那么请回顾一下继承的概念,也许这可以帮助你完成你想要做的事情。如果没有,那么您基本上要做的就是复制工厂模式。这将允许您根据配置创建类的实例


    希望这能有所帮助。

    这里不能出现空指针异常,代码甚至无法编译?您不能在
    o
    上调用
    doSomething()。您可能需要执行
    second.doSomething()
    1。不能对
    对象
    变量调用
    doSomething
    。2.
    doSomething
    是一个静态函数,您可以直接在类上调用它:
    Second.doSomething()。我真的建议您学习一些java教程
    doSomething
    是一个静态函数,应该以静态方式访问,但仍然不能是…&它是从静态方法(main)调用的。所以它会正常工作…我试过了..@C.cena是的,它会正常工作。但是您通常不应该在对象上调用
    static
    方法。它们被称为
    static
    ,原因是:)@YuanKai帮你自己一个忙,学习java教程,例如:我想把o变成其他对象