Возникли небольшие проблемы с этим кодом Java. Новичок, вероятно, смешивает некоторые вещи с C # - PullRequest
1 голос
/ 11 мая 2010
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(){

    }

}

Итак, я просто тестирую некоторые вещи, но получаю сообщение об ошибке, утверждающее, что я пытаюсь запустить ejemplosBoolean () в статическом контексте, когда это не статический метод.

Мой вопрос заключается в том, должны ли методы в Java иметь статический тип, чтобы использовать их, даже если они находятся в одном классе?

Ответы [ 7 ]

2 голосов
/ 11 мая 2010

Серхио, вы используете нестатический метод внутри статического метода, если вы хотите, чтобы ejemplosBoolean () сделал его общедоступным static void ejemplosBoolean (). ура Saludos desde Mexico

0 голосов
/ 11 мая 2010

Поведение, которое вы видите, соответствует C #. main - это статический метод, который означает, что вы можете вызывать другие статические функции только из него, если у вас нет ссылки на объект.

Если вы хотите вызвать ejemplosBoolean, вам необходимо также пометить его как static или инициализировать новый экземпляр класса Main и вызвать его в этом экземпляре.

0 голосов
/ 11 мая 2010

Если вы не хотите делать методы статичными, но по-прежнему хотите вызывать их из вашего public static void main, вам придется создать экземпляр для их вызова:

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

и т. Д. (Затем вы можете использовать это значение m для других методов, которые вы можете захотеть вызвать, поскольку у него нет состояния, по крайней мере, с кодом, который вы показали ;-) Это не будет отличаться в C# хотя!

0 голосов
/ 11 мая 2010

Проблема в том, что код вашего основного приложения находится в статическом методе (main), и поэтому, когда код выполняется там, отсутствует экземпляр класса Main, который можно использовать для выполнения ejemplosBoolean ().

Это похоже на то, что вы имели бы в C #:

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() {
    }
}

Похожая ошибка произойдет, нет экземпляра класса Program для вызова ejemplosBoolean ().

0 голосов
/ 11 мая 2010

Вы должны создать экземпляр класса Main для вызова метода ejemplosBoolean. Вы пытаетесь вызвать его из основного метода. Попробуйте что-то вроде этого.

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
    Main m = new Main();

    m.ejemplosBoolean();
}

public void ejemplosBoolean(){

}

}

Кроме того, я бы, возможно, назвал свой класс чем-то отличным от основного, чтобы свести к минимуму путаницу.

0 голосов
/ 11 мая 2010

В своем основном, вы должны сказать что-то вроде:

Main m = new Main();
m.ejemplosBoolean()
0 голосов
/ 11 мая 2010

Ваш ejemplosBoolean () является нестатическим методом, поэтому для вызова этого метода потребуется экземпляр класса Main. Метод должен быть объявлен как статический, чтобы вызывать его из статического контекста без предварительного создания экземпляра. Это полностью соответствует C #.

...