brug af new, hvornår?

Tags:    java

Jeg har undret mig over hvornår man skal bruge nøgleordet 'new' og hvornår man ikke skal.

når man normalt laver et object bruger man jo new:
Fold kodeboks ind/udKode 


men String er jo også en Class selvom man ikke så tit/aldrig bruger new sammen med den.
Fold kodeboks ind/udKode 


Så hvad er reglen?



8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
du skal bruge new når du vil lave en instans af typen. I () ved implementeringen af en function
f.eks i:
Fold kodeboks ind/udKode 

vil du ikke lave en instans af a men du erklærer bare at ved kald til function skal det første argument være af typen String.

ved kald til function vil du derimod skulle sende instanser, instanser er altid instantiere med new.
så, hvis du ville sende en streng kunne du gøre:
Fold kodeboks ind/udKode 

for at lave en navngivet instans skal du først erklære typen på instansen og så dens navn
Fold kodeboks ind/udKode 

Derefter kan du tildele en instantiering af type til navnet.
Fold kodeboks ind/udKode 


det kan så skrives på en linie
Fold kodeboks ind/udKode 

da du nu har erklæret a som typen String og instantieret den kan du sende den som argument i kald til function
Fold kodeboks ind/udKode 


Hvis det ikke var klart er der jo altid den vidunderligt klart skrevet specifikation af java.
http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html
Alle positivt ladet tillægsord mener jeg ikke.



Indlæg senest redigeret d. 01.06.2008 19:00 af Bruger #5620
I Java er der 4 forskellige typer

Objekter
Simple typer (int, boolean, long, char osv.)
Arrays
Null

Strenge er i Java lavet som Objekter, men lige i dette tilfælde er strenge så alment brugte at Java syntaksen sørger for en nem måde at benytte sig af disse. Så disse to linier gør præcis det samme:

Fold kodeboks ind/udKode 


Nemlig at oprette et String objekt med teksten "Hej" og gemme det i variablen a.

De simple typer bliver IKKE behandlet som objekter, derfor ser du aldrig new blive brugt i forbindelse med int, char, long osv.
(Det skal dog lige nævnes at Java har wrapper klasser til de simple typer, altså klasser som kan få de simple typer til at opføre sig som objekter, det er sjældent at disse bliver brugt, men lister f.eks. kan kune håndtere Objekter, så hvis man vil have en liste med integers er man nødt til at pakke disse ind i en wrapper klasse).

Jeg ved at denne forklaring blev lidt mere teknisk i forholdl til det originale spørgsmål, men jeg håber at det svarede på alles spørgsmål.



tror ikke jeg er helt med??

Hvordan kan det så være at dette program:
Fold kodeboks ind/udKode 

virker?

For mig ser det ud som om jeg laver en instans af String, uden at bruge new...



Indlæg senest redigeret d. 01.06.2008 19:39 af Bruger #13669
fordi at "hej!"; er en string litteral, og string litterals er instanser af String, 3.10 i specifikationen taler om literals.




fordi at "hej!"; er en string litteral, og string litterals er instanser af String, 3.10 i specifikationen taler om literals.


forstå ikke helt vad du mener, men jeg slog litteraler op i java grundbog, og der står: "Ved en strengletteral gemmer Java værdien som et string-objekt. Du behøver ikke eksplicit at oprette et nyt objekt, som du må gøre, når du arbejder med andre objekter, så strenglitteraler er ligeså lette at arbejde medsom de grundlæggende datatyper"

Vil det sige at det bare en speciel undtagelse ved String?

.:Edit:.

jeg tror måske jeg har forstået det... når man putter "" uden om noget bliver det automatisk til at String objekt??



Indlæg senest redigeret d. 02.06.2008 17:28 af Bruger #13669
det ville være min antagelse at compileren automatisk sørger for at det bliver en instans af et String object ja.

Samme gælder for tal og booleans og char



I Java er der 4 forskellige typer

Objekter
Simple typer (int, boolean, long, char osv.)
Arrays
Null

Er der ikke lidt mere end 4? Man kan vel ikke (som i javascript) se funktioner som et objekt. Og hvad med klasser, interfaces, osv.?



Ok, så er jeg med. Tak for hjælpen :D



t