[ stevan_nk @ 17.05.2011. 20:00 ] @
Počeo sam da pišem rewrite mojih Python programčića u Javu ali sam se spetljao oko static-a i nonstatic-a.U knjizi Misliti na Javi sam čitao o značenju reči static ali mi nije baš najjasnije.
U programu sam definisao void Uvod() funkciju ali kad sam je pozvao u main metodi piše " Cannot make static reference to nonstatic method " . O čemu se ovdje radi , to sam rešio tako što sam ispred imena metode dopisao static i eclipse mi je dodao throws InterruptedException i onda radi ali... u drugoj metodi koristim Scanner i za njega nemože da se koristi static i onda mi više ništa nije jasno . Da li mi neko može pomoći da se izvučem iz ovih g***** ?
[ losm1 @ 17.05.2011. 20:38 ] @
Static -> odnosi se na klasu
Code:

Object.Uvod(); // Nema operatora new tj. kreiranja novog objekta na heap-u

Non-static -> odnosi se na instancu klase tj. objekat
Code:

Object o = new Object(); // Prvo se kreira objekat da bi se putem reference moglo pristupiti metodu
o.Uvod();


Ukratko, da bi resio ovaj konkretan problem kreiraj instancu klase pre nego sto pozoves Uvod(). (Kapiram da je u pitanju Main.class)

Code:

public class Main {

public static void main (String[] args) {

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

}


public void Uvod() {

System.out.println("Ja sam metod instance!");

}


}
[ biske86 @ 17.05.2011. 23:27 ] @
static u javi znači da to polje (ili metoda) ne pripadaju objektu već klasi. Npr. kao što reče @losm1 ne moraš da koristiš new Klasa() tj. ne moraš da praviš novi objekat.
Tipičan primer su metode klase Math. Na primer ne moraš da kreiraš objekat Math da bi izvršio kvadratni koren već možeš da radiš sa klasom. Evo konkretnog primera:
Code:

import java.lang.Math;
public Test {
    public static void main(String[] args){
        int a = 4;
        b = Math.pow(a, 2);
        
        System.out.println(b);        
    }
}

Poenta cele priče je da nisi morao da kucaš Math math = new Math(); math.pow(4,2). Znači nije ti trebao objekat već si mogao direkt na klasi da pozoveš metodu pow().

Slična stvar je i sa poljima. Za nešto više pogledaj sledeći link:
http://download.oracle.com/jav...ial/java/javaOO/classvars.html
[ stevan_nk @ 18.05.2011. 07:22 ] @
Hvala na odgovorima , sad mi je jasnije :)