Šta je novo?

Java "this" pitanje

Vegeta

Cenjen
Učlanjen(a)
15.10.2011
Poruke
974
Poena
180
Imam jedno pitanje u vezi "this", sređujem neki kod pa imam jednu nedoumicu. Naime, klasa počinje ovako
Kod:
public class AWS
{

private float[]     RR18_00, RR00_06, RR18_06, RR06_12, RR12_18, RR06_18;
private float[][][] fs;
private int[][][]   ds;
private int         nStation;
private String[][]  stationString;

  public AWS(int nStation, String[][] stationString, String terminString)
  {

    this.nStation = nStation;
    this.stationString = stationString;

    int[] indicativeStation = new int[nStation];
    RR18_00 = new float[nStation];
    RR00_06 = new float[nStation];
    RR18_06 = new float[nStation];
    RR06_12 = new float[nStation];
    RR12_18 = new float[nStation];
    RR06_18 = new float[nStation];
    fs = new float[nStation][24][6];
    ds = new int[nStation][24][6];

    for(int i = 0; i < nStation; i++)
    {
      
      indicativeStation[i] = new Integer(stationString[i][0]);
      RR18_00[i] = -999;
      RR00_06[i] = -999;
      RR18_06[i] = -999;
      RR06_12[i] = -999;
      RR12_18[i] = -999;
      RR06_18[i] = -999;

gde se u preostalom delu koda vrši spajanje sa databazom i preuzimanje podataka za padavine (RR18_00, RR00_06 ........), brzinu i pravac vetra (fs,ds). nStation i stationString predstavljaju redni broj i ime stanice. Zanima me sledeće, zašto je "this" reč korišćena za definisanje:

Kod:
this.nStation = nStation;
this.stationString = stationString;
a nije korišćena za RR18_00, RR00_06........ ?

Drugo pitanje, zašto je dotični uvek dodeljivao, popunjavao nizove sa vrednošću -999, pre nego oni poprime odgovarajuće vrednosti iz databaze ? Zašto jednostavno nije ostavio da u nizu ostane "default" vrednost 0.0, pre nego što ih popunim sa podacima iz databaze ? Da li to ima neke veze sa Javom, da li se to tako uvek radi?
 
Poslednja izmena:
U konstruktoru se prosledjene vrednosti zovu isto kao vrednosti atributa, zato mora da napise"this.", jer je u tom slucaju "nStation" parametar funkcije, a "this.nStation" je privatni atribut klase.

Te brojeve inicijalizuje na -999 zbog svojih nekih razloga, verovatno proverava da li je manje od nule ili da li je to jednako -999 da bi znao da vrednost nije menjana od pocetka.
 
Hvala na brzom odgovoru. Vezano za vrednost -999 mi je sada malo jasnije, jer treba razlikovati kada imam padavine sa vrednošću 0.0mm(NEMA PADAVINA) izmerene za datu stanicu i kada nemamo podatak (NaN). Ako bi ostala "default" vrednost 0.0 ispalo bi da nije bilo padavina, a možda nemam podatak za datu stanicu usled nekog prekida/kvara.

U konstruktoru se prosledjene vrednosti zovu isto kao vrednosti atributa, zato mora da napise"this.", jer je u tom slucaju "nStation" parametar funkcije, a "this.nStation" je privatni atribut klase.
I šta se onda sa time dobija ?
 
Poslednja izmena:
Dobija se da privatni atribut klase dobija vrednost prosledjenog parametra funkcije.

U principu mozes promeniti naziv parametra i onda je to "this" viska, na isto dodje, ali bi trebalo da razumes kako funkcionise.
 
U prevodu, ako argument metode i polje klase imaju isto ime, i napišeš to ime bez ikakvih drugih odrednica, Java kompajler smatra da je argument metode "prioritetniji" i da misliš na njega. "this.ime" eksplicitno govori kompajleru "polje ime iz ove instance klase".

U C++-u postoji konvencija da se imenima polja klase daje prefiks m_ (skraćeno od "member") kako bi se u kodu lakše prepoznavalo šta su polja klase a šta obične promenljive ili argumenti metoda. Mada, s obzirom da svaki normalan IDE obavlja bojenje promenljivih na osnovu njihove prirode, pa se po boji vidi šta je polje a šta nije, ovo je dosta izgubilo na snazi.
 
Nazad
Vrh Dno