Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 - Fatal编程技术网

无法在java中调用函数

无法在java中调用函数,java,Java,当我试图在这段代码中调用歌词函数时,会出现“无效的方法声明;需要返回类型”。 我正在学习java,对它非常陌生。我不知道如何定义函数并调用函数以便代码可以运行 public class Main { public static void main(String[] args) { } public void lyrics() { System.out.println("some lyrics here"); } lyrics(); } 您

当我试图在这段代码中调用歌词函数时,会出现“无效的方法声明;需要返回类型”。 我正在学习java,对它非常陌生。我不知道如何定义函数并调用函数以便代码可以运行

public class Main {
    public static void main(String[] args) {
    }
    public void lyrics() {
        System.out.println("some lyrics here");
    }
    lyrics();
}

您需要将对
lyris()
的调用移动到实际执行代码的
main
方法中。现在,编译器希望有一个新的方法定义

public class Main {
    public static void main(String[] args) {
        // execution begins here.
        new Main().lyrics();
    }
    public void lyrics() {
        System.out.println("some lyrics here");
    }
}

编辑:创建新类
Main
class以避免错误。

该方法应声明为静态,函数调用应在Main方法内。正确的代码应如下所示:

public class Main {
    public static void main(String[] args) 
    {
        lyrics();
    }
    public static void lyrics() 
    {
        System.out.println("some lyrics here");
    }

}

通常,不能在代码体中随机调用方法。但是,有一种称为初始化块的东西(它在对象的构造函数体中运行)。我想举个例子可以说明这一点。像

public class Main {
    public static void main(String[] args) {
        new Main(); // <-- instantiate an instance of Main
    }
    public void lyrics() {
        System.out.println("some lyrics here");
    }
    { // <-- this is an initialization block
        lyrics();
    }
}
注意输出是如何变化的

它们也可以是静态的(并且在类第一次被引用时运行)。像


你的代码几乎是正确的。如果您想在main方法内调用它,您的
lyris()
方法必须是静态的,因为
main
方法是静态的。不能从静态方法访问非静态成员(不创建实例来调用它)

公共类主{
公共静态void main(字符串[]args){
歌词();
}
公共静态无效歌词(){
System.out.println(“这里有些歌词”);
}
}
您可以通过在主方法中创建包含非静态方法的类的实例,从静态方法调用非静态方法,如Elliott Frisch的注释中所述

newmain();

既然您正在学习Java,您必须记住,从静态方法调用非静态方法的唯一方法是使用包含非静态方法的类的实例

或者,您可以简单地将函数设置为静态。此外,还需要在主块内调用函数

public class Main {
    public static void main(String[] args) 
    {
        lyrics();
    }
    public static void lyrics() 
    {
        System.out.println("some lyrics here");
    }
}

快乐编码

这将导致错误,因为您试图从静态区域调用非静态方法。哦,很抱歉造成混淆,该方法应该是静态的。直接不!除非您有一个包含非静态成员的类实例。根据定义,静态方法在类级别上工作。@PiyushPatel,当您编写语句时,您的答案部分正确,就像Java有static关键字一样,它只允许调用静态方法。请更正声明,你就可以走了。@VishwaRatna我明白你的意思。这会让人困惑。不能从静态方法访问非静态成员(如果不创建实例来调用它),您需要这个括号,因为否则意味着模式
Multiton
Singleton
不可能实现。各种创建模式还利用了从
静态
上下文创建实例的优势。不要忘记初始化块。这是唯一的选择。并不是说它们必须在任何地方使用。但是知道如何
private int myField=0会有帮助设置为零。当然,我忘了提它,因为我自己几乎不使用它们!谢谢你提醒我。我在向udacity学习。为什么老师不使用它参考4分钟的视频:我在向udacity学习。他们的视频不使用“静态”。有什么问题吗?将
歌词()
调用移动到
main()
,在
void
歌词之间添加
static
public class Main {
    public static void main(String[] args) {
    }
    public static void lyrics() {
        System.out.println("some lyrics here");
    }
    static {
        lyrics();
    }
}
public class Main {
    public static void main(String[] args) 
    {
        lyrics();
    }
    public static void lyrics() 
    {
        System.out.println("some lyrics here");
    }
}