[ NikolaVeber @ 23.12.2003. 13:36 ] @
Pozdrav !

Krenuo sam sa primerima iz knjige Java2 od Zukowskog. I zaglavio vec na prvom :(
Mislio sam da je greska u kucanj... ali sam onda kopirao source sa cd-a koji ide uz knjigu, i isto.
Code:

public class HelloWorld{
    public static void main(String argumenti[]){
        System.out.println("Hello, World");
    }
}

Kod koji je verovatno mnogima poznat :). Javac prodje bez problema i ne prijavljuje gresku, ali kada dam: java HelloWorld dobijem sledecu gresku :
Exception in thread "main" java.lang.NoClassDefFoundError: C:\java\HelloWorld

Pomagajte !
Instaliran je j2sdk1.4.0 na winXP.

[ tweeester @ 23.12.2003. 14:00 ] @
Problem je prost, java ne zna gde da nadje tvoju klasu (HelloWorld.class fajl). Ja znam (tj. pretpostavljam) da ti se nalazi u tekucem direktorijumu odakle pokreces program ali java to ne zna :) Problem resi ovako:
c> set CLASSPATH=%CLASSPATH%;.\

tj. dodaj tekuci direktorijum u environment veriablu pod imenom CLASSPATH. Ova variabla odredjuje gde se traze klase. Pazi da kad imas klasu u nekom paketu, naprimer com.test.ImeKlase onda taj class fajl mora da se nalazi u nekom direktorujumu kao naprimer:
C:\classes\com\test
a u CLASSPATH moras da dodas samo osnovni dir, tj samo:

C:> set CLASSPATH=%CLASSPATH%;c:\classes

Hope this helps,
Pozdrav

p.s. Obrati paznju da setovanje CLASSPATH-a vazi samo za DOS prozor u kome trenutno radis, u drugim prozorima to nece biti vidljivo.
[ mucky @ 24.12.2003. 16:02 ] @
Citat:
NikolaVeber:
Code:

public class HelloWorld{
    public static void main(String argumenti[]){
        System.out.println("Hello, World");
    }
}

Kod koji je verovatno mnogima poznat :). Javac prodje bez problema i ne prijavljuje gresku, ali kada dam: java HelloWorld dobijem sledecu gresku :
Exception in thread "main" java.lang.NoClassDefFoundError: C:\java\HelloWorld

Pomagajte !
Instaliran je j2sdk1.4.0 na winXP.



Treba da pise
Code:

public static void main(String[] argumenti){
}


a ne

Code:

public static void main(String argumenti[]){
}
[ -zombie- @ 24.12.2003. 16:24 ] @
prvo i drugo su potpuno ekvivalentni u javi, samo se preporučuje prvo, jer je valjda čitljivije...
[ NikolaVeber @ 25.12.2003. 14:03 ] @
Hvala inace, to je source iz knjige... pozdrav autorima

Inace, da li to definise promenljivu tipa String[] sa imenom "argumenti", ili je nesto drugo u pitanju ?
[ Gojko Vujovic @ 25.12.2003. 14:57 ] @
String[] arg i String arg[] rade istu stvar. Kreiraju niz objekata tipa String pod imenom arg. Sasvim je svejedno koju ćeš sintaksu koristiti, barem što se kompajliranja tiče. mucky, malo si pogrešio.
[ veljaradenkovic @ 25.12.2003. 15:26 ] @
Cisto da ispostujemo (java <=> memorija).

String[] arg i String arg[] ne kreiraju nista.
[ mucky @ 25.12.2003. 15:54 ] @
Evo sad sam probao i stvarno rade obe varijante :)

Svasta, 3 godine radim sa javom i nigde nisam sreo taj nacin deklarisanja niza :)

Problem je definitivno u CLASSPATH :)

I ajde da malo cepidlacimo

Citat:
Gojko Vujovic:
String[] arg i String arg[] rade istu stvar. Kreiraju niz objekata tipa String pod imenom arg.


Code:
String[] argumenti
(ili
Code:
String argumenti[]
kako volis:) ) NE kreira niz nego samo pokazivac na niz.
Code:
String[] argumenti = new String[50]
kreira novi niz od 50 stringova (od kojih svaki opet moras inicijalizovati bilo sa
Code:
new String("blah")
ili dodelom vec kreiranog objekta tipa String :)

Ovo sto je Gojko naveo radi samo ako tako deklarises niz u zaglavlju metoda.
[ NikolaVeber @ 25.12.2003. 20:19 ] @
Znaci li to da String[] imeStringa zauzima mesto u stack memoriji za jedan pokazivac, a kasnije vrednost smesta u heap ?
[ overflow @ 28.12.2003. 11:31 ] @
Tačno tako.
Tek se sa:
Code:

imeStringa  = new String("Test");

alocira mem. prostor (u heap-u) za String u koji se smesta konkretna vrednost - imeStringa kao referenca ostaje u stack-u do kraja izvrsenja metode.
Kao i u mnogim srodnim (novijim) jezicima "IV generacije", ispod haube su sve pointer-i (u java terminologiji: reference).
[ Gojko Vujovic @ 28.12.2003. 12:33 ] @
Ako ono ne inicijalizuje taj niz "argumenti" kao što vi kažete, kako onda odmah posle tog reda mogu da pristupim njegovim elementima ako je program pokrenut sa parametrima?

Hajde prvo to odgovorite da razjasnimo ovo do kraja, molim vas.

Ja sam govorio o upotrebi te sintakse u parametrima koji se prosleđuju main funkciji.
[ Gojko Vujovic @ 28.12.2003. 12:35 ] @
Citat:
mucky:
Ovo sto je Gojko naveo radi samo ako tako deklarises niz u zaglavlju metoda.


Ovaj red sam kasno video, pre nego što sam napisao prethodnu poruku, tako da je već odgovoreno na pitanje.. pričao sam o zaglavlju.
[ veljaradenkovic @ 28.12.2003. 20:12 ] @
Ako mislite da sporni izraz kreira bilo kakav niz na bilo kom mestu (pa i u main metodi)
onda niste u pravu.

Ako ne mislite onda izvinite na obrazlozenju koje sledi.
Code:

public class Proba {

    /**
     * 
     */
    public Proba() {
    
    }

    public static void main(String[] args) {
        /*deklaracija*/
        int[] nizOdTriBroja;
        /*inicijalizacija*/
        nizOdTriBroja=new int[]{1,2,3};
        new Proba().funkcija(nizOdTriBroja);
    }
    //
    //
    //
    private void funkcija(int[] brojevi){
        for(int i=0;i<=100;i++){
            System.out.println(brojevi[i]);
        }
    }
}


Ko sto vidite u gornjem primeru mozes da
se obratis stotom clanu niza i ako on ne postoji,.. i program se kompajlira;
ali krkne kad se pokrene.

Tako da to sto ti mozes da se obratis
parametru f-cije u njenom telu ne znaci da on postoji u trenutku kad
mu se ti obracas i to ne moze ni jedan kompajler da zna pre nego sto se
f-cija pozove a onda ako ga nema dodje do runtime Exceptiona.

Sto se tice procedure main zamisli da JVM radi ovako:

Code:

String parametar1="parametar1";//procita prvi parametar sa console
String parametar2="parametar2";//procita drugi parametar sa console
String parametarN="parametarN";//procita n-ti parametar sa console
String[] args=new String[]{parametar1,parametar2,parametarN};
main(args);




Osim toga ukucajte u google nesto kao Definitions vs. Declarations.
pa procitajte.

Ako ovo nije tacno ubicu Jaukovica sto me naucio pogresno.
[ -zombie- @ 28.12.2003. 21:58 ] @
daj ne brukajte se više raspravom o tome da li je deklaracija isto što i instanciranje...

naravno da nije. možda se neko loše odrazio, ali ne verujem da iko to ovde misli. zato dosta više..