Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

non-static variable this cannot be referenced from a static context

mariusz2108 14 Mar 2013 17:15 2379 6
  • #1 14 Mar 2013 17:15
    mariusz2108
    Poziom 8  

    Dopiero zacząłem programować, proszę o pomoc. Gdy konwertuję klasę na static to program się kompiluje, ale źle działa. Pokazuje jakby adres pamięci a nie wartość zmiennej.

    Kod: java
    Zaloguj się, aby zobaczyć kod

    0 6
  • #2 14 Mar 2013 21:02
    krru
    Poziom 32  

    Nie bardzo wiem, o które static ci chodzi.
    Drugi parametr przekazywany do testInt jest bez znaczenia.

    0
  • #3 14 Mar 2013 23:40
    mariusz2108
    Poziom 8  

    Jak klasę NumberExample i IntegerExample zmienię na static to nie ma błędu kompilacji. Ale zmienna j która używa tej klasy jest zle wyswietlana pisze zad2integerexample@adrespamieci. Jak nie zmienię kodu to sie nie skompiluje. Chodzi o to żeby utworzyć typy kopertowe takie jak w jdk i użyć jakiejs funkcji z tamtad

    0
  • #4 15 Mar 2013 03:55
    McMonster
    Poziom 32  

    Kod jest trochę zamieszany. Nie umieszczaj wszystkiego w klasie zad2, twórz osobne klasy w osobnych plikach. W ogóle na chwilę obecną nie widzę w kodzie opisanego problemu, więc zacznij od poprzenoszenia klas do osobnych plików. Jeśli nie będzie działać, to pokaż cały kod wraz z dokładną treścią błędu i linią, na którą wskazuje.

    Z pomniejszych rad, nie musisz pisać "extends java.lang.Object", to jest zupełnie zbędne, o ile nie napiszesz inaczej, to klasa zawsze rozszerza java.lang.Object.

    0
  • #5 15 Mar 2013 22:37
    Oberon
    Poziom 15  

    mariusz2108 napisał:
    Jak klasę NumberExample i IntegerExample zmienię na static to nie ma błędu kompilacji. Ale zmienna j która używa tej klasy jest zle wyswietlana pisze zad2integerexample@adrespamieci. Jak nie zmienię kodu to sie nie skompiluje. Chodzi o to żeby utworzyć typy kopertowe takie jak w jdk i użyć jakiejs funkcji z tamtad


    Poza tym, że to jest nieczytelne i ciężko się w tym połapać....

    Generalnie pierwszy błąd jest taki, że wyświetlenie system.out(j) powoduje wywołanie metody toString a w tym wypadku jest to hash Code (a nie adress w pamięci). Tak więc po pierwsze zmień na prawidłowe wywołanie na podstawie obiektu j wyswietl wartość (czyli jeśli dobrze widzę metodę getIntValue() )

    Po drugie primo :D

    Tu masz wyjaśnioną różnicę, którą wprowadza static dla twojej klasy

    Sam komunikat mówi pewnie o tym, że odwołujesz się z metody statycznej do instancyjnych zmiennych prawdopodobnie :idea:

    0
  • #6 17 Mar 2013 13:11
    mariusz2108
    Poziom 8  

    Przerobiłem program na 3 pliki zad2, IntegerExample, NumberExample i LongExample.

    w zad2 mam

    Kod: java
    Zaloguj się, aby zobaczyć kod


    po dopisaniu
    Kod: java
    Zaloguj się, aby zobaczyć kod

    do IntegerExample program działa właściwie.

    Czy ktoś mógłby mi wyjaśnić kiedy wywołuje się metoda toString bo w programie nigdy nie jest wywoływana bezpośrednio.

    0
  • #7 17 Mar 2013 18:23
    McMonster
    Poziom 32  

    Metoda toString() jest wywoływana zawsze niejawnie przez println() lub wszędzie tam, gdzie programista potrzebuje reprezentacji tekstowej. Jest to jedna z zestawu umownych metod do realizacji podstawowywch operacji na obiektach. Jeśli jej nie zdefiniujesz, to domyślne implementacje są brane z klas nadrzędnych aż do java.lang.Object.

    Wykorzystuje ją też Eclipse przy wyświetlaniu podglądu zmiennych w debuggerze.

    0