non static error ? co to oznacza

Odpowiedz Nowy wątek
2006-12-15 14:55
Paweł R.
0

Wyskakuje mi taki bład kompilacji

non-static method metodaNieStatyczna(java.lang.String,java.lang.String) cannot be referenced from a static context

co to oznacza , kod mam taki


public static void main(String[] args) {
        String tekst = metodaStatyczna(plik.txt);
        String tabela = metodaNieStatyczna( tekst, "KARLOS SZATAN666");

}

O co chodzi, to dość częste, poprostu zmieniam metode na statyczna ale nie sadze zeby bylo to rozwiazaniem problemu, prosze o pomoc [???]

Pozostało 580 znaków

2006-12-15 17:45
0

Z metod statycznych można sie odwoływać tylko do statycznych metod lub statycznych składowych.
Do zrozumienia tego faktu potrzebna jest wiedza czym jest statyczna, nie statyczna metoda badz składowa.
Metody nie statyczne wiąża sie zawsze z istnieniem jakiegoś obiektu(pola - odpowiadają elementom obiektu, metody muszą być wywoływane na rzecz obiektu, są komunikatami do obiektu).
Metody statyczne to metody, ktore nie operuja na obiektach, a wiec do ich urzycia nie potrzebny jest obiekt. Urzywamy ich kiedy nie potrzebujemy dostępu do obiektu, ponieważ wszystkie potrzebne jej parametry sa dostarczone jawnie lub gdy metoda potrzebuje dostepu do statycznych zmiennych klasy.
Java zaraz po uruchomieniu wyszukuje wszystkie takie zmienne statyczne i jesli nie sa zainicjalizowane, inicjalizuje je wartosciami domyslnymi. Zauważ ze metoda main tez jest statyczna, poniewaz nie operuje na obiektach, wiąze sie to ze przed wywołaniem jej nie istnieje jeszcze zaden obiekt, to w niej sa tworzone obiekty potrzebne programowi.
Pokaże ciekawy programik który pokazuje o co chodzi.

public class StaticTest{
    static int i;
    static String txt;
    static boolean test;
    public static void main(String[] args){

        System.out.println("witaj swiecie z main");
    }

    static {
        System.out.println("witaj swiecie z bloku statycznego");
        System.out.println(i);
        System.out.println(txt);
        System.out.println(test);
        System.exit(0);
    }

}

Program odszukuje zmienne statyczne i inicjalizuje je sam(wartości zostana pokazane chociaż zmienne nie zostały zainicjalizowanem, co w normalnych warunkach dało by bład kompilacji mowiacy ze zmienna moglaniebyc nie zaincjalizowana).
poznije jest odnajdywany blok statyczny(bloki to swietne miejscie i sposob na nadawianie wartosci domyslnych elementom obiektu), jeszcze przed wywołaniem metody main co nam pokazuje konsola po wywołaniu progamu
console
witaj swiecie z bloku statycznego
0
null
flase
end console
i co ciekawe tu program sie przerywa dzieki instukcji System.exit(0); i z metody main nie jest wyswietlana informacja
witaj swiecie z main
spostrzegawczej osobie powininna juz zapalic sie lampka a co jesli wywalic main z programu, czy pojdzie, otoz tak zkompiluje sie odpali i nie wyzuci bledu
Exception in thread "main" java.lang.NoSuchMethodError: main
poniewaz instrukcja System.exit(0); go wyprzedzi i wyjedzie z progamu zanim program sie zorientuje ze nie ma maina
Napiszmy teraz to wszytko jeszcze raz ale w skruconej wersji,
static opisuje zmienne i funkcje, ktore naleza do klasy, a nie do konkretnego obiektu tej klasy.
To powinno niezle zobrazowac czym jest słowo static w javie :)

Pozdrawim BookaYashee

Pozostało 580 znaków

2006-12-19 18:41
Paweł R
0

Teraz już rozumien zdaje mi się, w takim tazie aby ten błąd sie nie pojawiał musze stworzyć obiekt zawierajaćy funkcje zanim przekarze tą funkcje do metody statycznej. Chyba rozumiem ;-P

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0