Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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代码有点小问题。初学者可能会将一些东西与C混合在一起#_Java_Static Methods - Fatal编程技术网

这段Java代码有点小问题。初学者可能会将一些东西与C混合在一起#

这段Java代码有点小问题。初学者可能会将一些东西与C混合在一起#,java,static-methods,Java,Static Methods,所以,我只是测试了一些东西,但是我得到了一个错误,声称我试图在静态上下文中运行eEmplosBoolean(),而它不是静态方法 我的问题是,在Java中,即使在同一个类中,方法也必须具有静态才能使用它们吗?您的ejbemposboolean()是一个非静态方法,因此需要类Main的实例来调用该方法。该方法必须声明为static,才能从静态上下文调用它,而无需先创建实例。这与C#完全一致。Sergio,您正在静态方法中运行一个非静态方法,如果您希望eEmplosBoolean()将其公开为sta

所以,我只是测试了一些东西,但是我得到了一个错误,声称我试图在静态上下文中运行eEmplosBoolean(),而它不是静态方法


我的问题是,在Java中,即使在同一个类中,方法也必须具有静态才能使用它们吗?

您的ejbemposboolean()是一个非静态方法,因此需要类Main的实例来调用该方法。该方法必须声明为static,才能从静态上下文调用它,而无需先创建实例。这与C#完全一致。

Sergio,您正在静态方法中运行一个非静态方法,如果您希望eEmplosBoolean()将其公开为static void eEmplosBoolean()。 干杯
墨西哥萨卢多斯

在你的主要演讲中,你需要说:

package practico1;
/**
 * Programador: Sergio Tapia Gutierrez
 * Fecha:       Lunes 10, Mayo - 2010
 * Practico:    1
 */
public class Main {    
    public static void main(String[] args) {
        System.out.println("Esta es una pequena aplicacion para mostrar los");
        System.out.println("distintos tipos de datos que existen en Java 6.");

        //boolean, char, byte, short, int, long, float, double, String

        ejemplosBoolean();
    }

    public void ejemplosBoolean(){

    }

}

您必须创建Main类的实例才能调用eJomposBoolean方法。您正在尝试从main方法调用它。试试这样的

Main m = new Main();
m.ejemplosBoolean()
}


此外,我可能会将我的类命名为main以外的名称,以尽量减少混淆。

问题是,您的主应用程序代码位于静态方法(main)中,因此当代码执行时,没有要在其上执行eEmplosBoolean()的main类实例

这与C#中的内容类似:


类似的错误也会发生,没有要调用EJMPOSBOOLINE()的程序类实例。

如果您不想使方法成为静态的,但仍然想从您的
public static void main
调用它们,您必须创建一个实例来调用它们:

public class Program {
    public static void Main() {
        Console.WriteLine("Esta es una pequena aplicacion para mostrar los");
        Console.WriteLine("distintos tipos de datos que existen en Java 6.");

        ejemplosBoolean();
    }
    public void ejemplosBoolean() {
    }
}

依此类推(然后您可以将该
m
重新用于您可能想要调用的其他方法,因为它没有状态,至少对于您显示的代码是如此;-)。不过在
C#
中也不会有什么不同

你看到的行为与C#一致
main
是一个静态方法,这意味着您只能从其中调用其他静态函数,除非您有一个对象引用


如果您希望调用
eEmplosBoolean
,则还需要将其标记为
static
,或者初始化
Main
类的新实例并在该实例上调用它。

C位错误。如果他们在同一个班级,你可以在班级的任何地方调用它。@Sergio:你错了。在静态函数中,除非有对象引用,否则只能调用该类中的其他静态函数;我说的是一个好的ol public void方法,你不需要创建parents类的实例来调用该方法,只要在同一个类中调用它即可。@Sergio:你完全错了;你所描述的根本没有意义。如果这是可能的,那么这个“良好的ol public void方法”将在类的哪个实例上运行?这是一个实例方法,所以它必须与一个实例相关联!哇,说说工程吧D@Sergio:这不是过度工程化,这是按照定义调用函数的唯一方法。C#也是如此。在C#中,您可以调用公共方法,而不需要静态位。你的类中的任何方法都是可访问的,所以我不知道你在说什么。@Sergio:没有对象引用就不能访问。如果您在实例方法中,那么是的,您可以这样做,因为您有一个对象引用(
this
)。你不能做你在C#中描述的事情,就像你在Java中一样。您问题中的代码是完全有效的C#代码(除了
System.out.println
不是有效的函数以及您在没有对象引用的静态方法中调用实例方法之外)。试着把这个类粘贴到一个C#项目中,看看你得到了什么。根据这个孩子得到的建议,他的程序将是一个全局“main”中的一组静态方法
public class Program {
    public static void Main() {
        Console.WriteLine("Esta es una pequena aplicacion para mostrar los");
        Console.WriteLine("distintos tipos de datos que existen en Java 6.");

        ejemplosBoolean();
    }
    public void ejemplosBoolean() {
    }
}
Main m = new Main();
m.ejemplosBoolean();