Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

ARRAY oder FELD oder VEKTOR. Aufgabe : Drei über Tastatur eingegebene ganzzahlige Zahlen sollen in umgekehrter Reihenfolge der Eingabe wieder auf dem.

Ähnliche Präsentationen


Präsentation zum Thema: "ARRAY oder FELD oder VEKTOR. Aufgabe : Drei über Tastatur eingegebene ganzzahlige Zahlen sollen in umgekehrter Reihenfolge der Eingabe wieder auf dem."—  Präsentation transkript:

1 ARRAY oder FELD oder VEKTOR

2 Aufgabe : Drei über Tastatur eingegebene ganzzahlige Zahlen sollen in umgekehrter Reihenfolge der Eingabe wieder auf dem Bildschirm ausgegeben werden.

3 import java.io.*; public class MainArray1{ public static void main(String argv[]) throws IOException{ int z1, z2, z3; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in));

4 System.out.println("1. Zahl eingeben"); mystr = myinput.readLine(); z1=Integer.parseInt(mystr); System.out.println("2. Zahl eingeben"); mystr = myinput.readLine(); z2=Integer.parseInt(mystr); System.out.println("3. Zahl eingeben"); mystr = myinput.readLine(); z3=Integer.parseInt(mystr); System.out.println(z3+" "+z2+" "+z1+" "); } }

5 Schreibaufwendige Lösung ! Was ist der Nachteil ?

6 keine "nächste" Variable: z1 z2 z3 Warum nicht mit Schleife lösbar ?

7 Man benötigt: Eine Variable, die aus mehreren Zellen (Elementen, Komponenten) besteht und deshalb gleichzeitig mehrere Werte speichern kann. Dies ist eine indizierte Variable, ein sogenanntes Feld (Array, Vektor).

8 Der Index der ersten Zelle (Element) ist 0 Die Feldlänge ist

9 Java-Syntax

10 int[] v;... v = new int[3]; Datentyp: Jede Zelle hat den gleichen Datentyp Variablenname Länge des Feldes: KONSTANTE !!! Diese Feldlänge ist (nach dem Anlegen des Speichers) eine Konstante und darf danach nicht mehr verändert werden. Sie kann NICHT während des Programmlaufs (z.B. durch den Anwender über Tastatur) verändert werden !!! Variable deklarieren Speicher für Variable reservieren

11 int[] v;... v = new int[3]; Statt dieser Schreibweise wäre auch folgendes möglich:

12 ... v = new int[3];

13 int v[];... v = new int[3]; Diese Schreibweise wird hier nicht so oft verwendet, weil...

14 Merke: Ein Feld ist in Java als ein Objekt realisiert. int[] v;... v = new int[3]; Bei dieser Schreibweise sieht man besser, dass int[] eine Klasse und v eine Objektvariable ist.

15 import java.io.*; public class MainArray3{ public static void main(String argv[]) throws IOException{ int[] v; int x; int y; v = new int [3]; // irgendwelche Anweisungen } WICHTIG v, x, y sind lokale Variablen. Deshalb haben sie an dieser Stelle einen undefinierten, dem Programmierer unbekannten Wert. Erst in der nächsten Anweisung bekommt v einen Wert (Referenzwert = Adresse) zugewiesen

16 Merke Wenn ein Feld erzeugt wird (Speicher reserviert), werden alle Elemente dieses Feldes automatisch mit den Standartwerten belegt, d.h:

17 Datentypstandardmäßige Vorbelegung boolean false char \u0000 byte 0 short 0 int 0 long 0L float 0.0f double 0.0 Referenz null

18 Zur Wiederholung: Beim Objekt ist es analog. Dort werden sämtliche Attribute mit den Standardwerten initialisiert.

19 import java.io.*; public class MainArray3{ public static void main(String argv[]) throws IOException{ int[] v; int x; int y; v = new int [3];... } In diesem Programm werden an dieser Stelle in der nächsten Folie bestimmte Anweisungen gemacht. Aber zuerst die Frage: Welchen Wert haben x, y und die Elemente von v an dieser Stelle ?

20 v[2]=19; int main(){ v[0]=17; v[1]=13; x=2; ?? v xy v[x]=23; y=v[1]; v[x]=y; 1713 ?? ?? ?? 2? 2? 2 2

21 Aufgabe Welche Anweisungen des folgenden Programms sind semantisch falsch (Compiler meldet keinen Fehler, aber Interpreter)?

22 import java.io.*; public class MainArray4{ public static void main(String argv[]) throws IOException{ int len; int[] v; String mystr; BufferedReader myinput = new BufferedReader(newInputStreamReader (System.in)); System.out.println("Bitte Länge eingeben"); mystr = myinput.readLine(); len=Integer.parseInt(mystr); v = new int [len]; v[len-1]=13; len=len+15; System.out.println(v[len-1]+" "); } Das Feld v hat die Länge 10. v[9] bekommt den Wert 13 zugewiesen. Das ist korrekt. Angenommen, der Anwender gibt über Tastatur die Zahl 10 ein. Wo gibt es dann Probleme? len hat an dieser Stelle den Wert 25. Das ist auch noch korrekt. An dieser Stelle wird auf das 24. Element des Feldes zugegriffen (also auf nicht reservierten Speicher). Das ist nicht korrekt, weil das Feld nur die Länge 10 hat.

23 Deklaration und Speicher anlegen in einer Anweisung

24 import java.io.*; public class MainArray4{ public static void main(String argv[]) throws IOException{ int[] v; v = new int [7]; } Statt der Deklaration und dem Anlegen von Speicher, kann man dies in einer Anweisung gemeinsam machen...

25 import java.io.*; public class MainArray4{ public static void main(String argv[]) throws IOException{ }

26 import java.io.*; public class MainArray4{ public static void main(String argv[]) throws IOException{ int[] v = new int[7]; }... eine Anweisung

27 Deklaration, Speicher anlegen und initialisieren in einer Anweisung

28 import java.io.*; public class MainArray4{ public static void main(String argv[]) throws IOException{ int[] v = {10, 20, 30}; } Da hier 3 Elemente angegeben werden, hat das Feld die Länge 3

29 import java.io.*; public class MainArray4{ public static void main(String argv[]) throws IOException{ int[] v; v = new int [7]; } WICHTIG v ist eine lokale Variable. Deshalb hat v an dieser Stelle einen undefinierten, dem Programmierer unbekannten Wert. Erst in der nächsten Anweisung bekommt v einen Wert (Referenzwert = Adresse) zugewiesen

30 Was veranlasst also der folgende Programmausschnitt im Arbeitsspeicher?

31 v AdresseWert public static void main(...){ int[] v; v=new int[2]; } ? Was veranlasst diese Deklaration im Arbeitsspeicher ? Es wird im Arbeitsspeicher an einer bestimmten Adresse Platz für den Zeiger (Referenz, Verweis, Pointer) mit Namen v reserviert. ? hat natürlich einen konkreten, uns unbekannten Wert, der mehrere Bytes groß ist (und nicht wie hier angedeutet nur 1 Byte verbraucht). Diese Interna brauchen uns nicht zu interessieren. Weil v eine lokale Variable ist, ist der Wert undefiniert. Ein Zeiger ist eine Variable, deren Wert die Anfangsadresse eines Speicherplatzes (z.B. einer Variable oder Objekt) ist. Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest.

32 v AdresseWert public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher an einer bestimmten Adresse Platz für das Objekt erzeugt, auf das v zeigen soll. AdresseWert Aus Platzgründen wird hier der Arbeitsspeicher auf 2 Tabellen verteilt, obwohl eigentlich der ganze Speicher durch eine Tabelle dargestellt wird! ? Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest. Wie viel Byte Speicher werden reserviert? (Antwort nächste Folie)

33 v AdresseWert public static void main(...){ int[] v; v=new int[2]; } AdresseWert ? Welchen Wert muss v bekommen, damit es auf das gerade angelegte Objekt zeigt? Das Feld besteht aus 2 integer-Werten. Für jeden werden 4 Byte reserviert. Standardmäßig wird ein für einen integer-Wert erzeugter Speicher mit 0 vorbelegt. 0 0

34 v AdresseWert public static void main(...){ int[] v; v=new int[2]; } AdresseWert

35 v AdresseWert public static void main(...){ int[] v; v=new int[2]; } AdresseWert

36 Merke Wenn ein Feld erzeugt wird (Speicher reserviert), werden alle Elemente dieses Feldes automatisch mit den Standartwerten belegt, d.h:

37 Datentypstandardmäßige Vorbelegung boolean false char \u0000 byte 0 short 0 int 0 long 0L float 0.0f double 0.0 Referenz null

38 Bemerkung: Dass für einen integer-Wert 4 Byte reserviert werden, steht nicht in der JLS (dort steht nur der Wertebereich für integer). Wir nehmen hier an, dass 4 Byte für einen integer-Wert verwendet werden.

39 Aufgabe Drei über Tastatur eingegebene Zahlen sollen in umgekehrter Reihenfolge der Eingabe wieder auf dem Bildschirm ausgegeben werden. EVA beachten !!

40 import java.io.*; public class MainArray5{ public static void main(String argv[]) throws IOException{ int i=0; int zahl; int[] v; String mystr; v = new int[3]; BufferedReader myinput = new BufferedReader (new InputStreamReader(System.in)); // Gleich geht es weiter

41 // Eingabe der Zahlen while(i<3){ System.out.println("Bitte Zahl eingeben"); mystr = myinput.readLine(); zahl=Integer.parseInt(mystr); v[i]=zahl; i=i+1; } // Ausgabe der Zahlen i=2; while (i>=0){ System.out.print(v[i]+" "); i=i-1; }

42 Aufgabe Verändern Sie das letzte Programm so, daß 10 über Tastatur eingegebene Zahlen in umgekehrter Reihenfolge der Eingabe wieder auf dem Bildschirm ausgegeben werden. EVA beachten !!

43 import java.io.*; public class MainArray5{ public static void main(String argv[]) throws IOException{ int i=0; int zahl; int[] v; String mystr; v = new int[3]; BufferedReader myinput = new BufferedReader (new InputStreamReader(System.in)); // Gleich geht es weiter hier muß eine Änderung gemacht werden

44 // Eingabe der Zahlen while(i<3){ System.out.println("Bitte Zahl eingeben"); mystr = myinput.readLine(); zahl=Integer.parseInt(mystr); v[i]=zahl; i=i+1; } // Ausgabe der Zahlen i=2; while (i>=0){ System.out.print(v[i]+" "); i=i-1; } hier muß eine Änderung gemacht werden Welchen Nachteil haben diese vielen Änderungen für den Programmierer ? Der Programmierer kann eine zu tätigende Änderung einfach übersehen.

45 Deswegen ist es besser mit sogenannten Konstanten zu arbeiten. (Die Feldlänge muß eine Konstante sein !)

46 ... final int len=3;... Eine Konstante erzeugt man in Java wie folgt:

47 ... final int len=3;... Eine Konstante erzeugt man in Java wie folgt: Falls die Konstante innerhalb einer Methode deklariert wird (oder als formaler Parameter) nennt man dies eine lokale Konstante. Objektkonstanten bzw. Klassenkonstanten --> siehe später.

48 ... final int len=3;... Eine Konstante erzeugt man in Java wie folgt: Während man Objektkonstanten bzw. Klassenkonstanten durchgehend groß schreibt, gibt es zur Schreibweise von lokalen Konstanten keine Empfehlung.

49 Eine Konstante kann man als eine schreibgeschützte Variable auffassen. (Deswegen ist sie im eigentlichen Sinne des Worts keine Variable mehr).

50 Aufgabe: Benutzen Sie beim letzten Programm statt der Feldlänge 10 eine Konstante.

51 import java.io.*; public class MainArray5{ public static void main(String argv[]) throws IOException{ final int len=10; int i=0; int zahl; int[] v; String mystr; v = new int[len]; BufferedReader myinput = new BufferedReader (new InputStreamReader(System.in)); // Gleich geht es weiter falls die Feldlänge z.B. auf 100 verändert werden soll, muß der Programmierer nur noch die 10 durch die 100 ersetzen (eine einzige Änderung machen).

52 // Eingabe der Zahlen while(i=0){ System.out.print(v[i]+" "); i=i-1; }

54 import java.io.*; public class MainArray6{ public static void main(String argv[]) throws IOException{ int len; int i=0; int zahl; int[] v; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Feldlänge eingeben"); mystr = myinput.readLine(); len=Integer.parseInt(mystr); v = new int[len]; In len steht der über Tastatur eingegebene Wert Es wird Speicher für len integer- Werte angelegt (reserviert)

55 // Genau das Gleiche wie vorher: while(i=0){ System.out.print(v[i]+" "); i=i-1; }

56 import java.io.*; public class MainArray6{ public static void main(String argv[]) throws IOException{ int len; int i=0; int zahl; int[] v; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Feldlänge eingeben"); mystr = myinput.readLine(); len=Integer.parseInt(mystr); v = new int[len]; Wie kann man wieder mit einer Konstanten arbeiten?

57 import java.io.*; public class MainArray6{ public static void main(String argv[]) throws IOException{ // int len; int i=0; int zahl; int[] v; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Feldlänge eingeben"); mystr = myinput.readLine(); final int len = Integer.parseInt(mystr); v = new int[len]; len wird an dieser Stelle deklariert und initialisiert. Wenn man len schon hier oben als Konstante deklarieren würde, könnte man unten den Wert nicht mehr auf den Wert von Integer.parseInt(mystr) setzen.

58 Merke Mit dem zu jedem Array automatisch zugehörigem public Attribut length kann man die Länge eines Array bestimmen.

59 Aufgabe: Lösen Sie die letzte Aufgabe mit Verwendung des Attributs length. Was muss im letzten Programm nur verändert werden?

60 // Genau das Gleiche wie vorher: import java.io.*; public class MainArray6{ public static void main(String argv[]) throws IOException{ int len; int i=0; int zahl; int[] v; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Feldlänge eingeben"); mystr = myinput.readLine(); len=Integer.parseInt(mystr); v = new int[len];

61 // Hier ändern sich 2 Zeilen while(i=0){ System.out.print(v[i]+" "); i=i-1; }

62 Aufgabe: Bestimmen Sie das Maximum und das Minimum der in der vorigen Aufgabe eingegebenen Zahlen. EVA beachten !!

63 // Programm von vorher import java.io.*; public class MainArray6{ public static void main(String argv[]) throws IOException{ int min, max; int len; int i=0; int zahl; int[] v; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Feldlänge eingeben"); mystr = myinput.readLine(); len=Integer.parseInt(mystr); v = new int[len]; Das ist neu (zu vorher)

64 // Immer noch das Gleiche wie vorher: while(i

65 i = 0; max = v[0]; min = v[0]; do{ if(v[i]>max) max = v[i]; if(v[i]

66 Arrays, deren Komponenten,(Elemente, Zellen) aus Objekten (und nicht aus primitiven Datentypen) bestehen.

67 Wir benutzen wieder die schon bekannte Klasse Hund. Herr H. kauft den Hund "Goldi" mit 10 Kg und den Hund "Dicki" mit 20 Kg Gewicht und speichert diese in seiner Variable hunde ab. Wie muss hunde deklariert werden. Erstellen Sie das zugehörige Programm in Java.

68 import java.io.*; public class MainArray8{ public static void main(String argv[]) throws IOException{ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi", 10); hunde[1]=new Hund("Dicki", 20); System.out.println(hunde[0].getName()+" "+ hunde[0].getGewicht()); System.out.println(hunde[1].getName()+" "+ hunde[1].getGewicht()); } // Klasse Hund wie früher, kommt gleich...

69 class Hund{ private String name; private int gewicht; public Hund(String pName, int pGewicht){ name=pName; gewicht=pGewicht; } public void setName(String pName){ name = pName; } public String getName(){ return(name); } public void setGewicht(int pGewicht){ gewicht = pGewicht; } public int getGewicht(){ return(gewicht); }

70 Was veranlasst also der folgende Programmausschnitt im Arbeitsspeicher?

71 hunde AdresseWert public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } ? Was veranlasst diese Deklaration im Arbeitsspeicher ? Es wird im Arbeitsspeicher an einer bestimmten Adresse Platz für den Zeiger (Referenz, Verweis, Pointer) mit Namen hunde reserviert. ? hat natürlich einen konkreten, uns unbekannten Wert, der mehrere Bytes groß ist (und nicht wie hier angedeutet nur 1 Byte verbraucht). Diese Interna brauchen uns nicht zu interessieren. Weil hunde eine lokale Variable ist, ist der Wert undefiniert. Ein Zeiger ist eine Variable, deren Wert die Anfangsadresse eines Speicherplatzes (z.B. einer Variable oder Objekt) ist. Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest.

72 AdresseWert Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher an einer bestimmten Adresse Platz für das Objekt erzeugt, auf das hunde zeigen soll. AdresseWert ? public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } Aus Platzgründen wird hier und im Folgendender Arbeitsspeicher auf mehrere Tabellen verteilt, obwohl eigentlich der ganze Speicher durch eine Tabelle dargestellt wird! hunde Wie viel Byte Speicher werden reserviert? (Antwort nächste Folie) Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest.

73 AdresseWert AdresseWert ? public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } Welchen Wert muss hunde bekommen, damit es auf das gerade angelegte Objekt zeigt? hunde null Wie viel Byte Speicher benötigt null jeweils ? Das Feld besteht aus 2 Objekten (Hunden). Da aber für ein Objekt ein Zeiger (Adresse) verwendet wird und wir hier annehmen, dass ein Zeiger 4 Byte Speicher benötigt, werden 8 Byte Speicher reserviert. Standardmäßig wird ein Zeiger mit null vorbelegt. Dies steht nicht in der JKS. Wir nehmen hier an: 4 Bytes

74 AdresseWert hunde public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } AdresseWert null

75 AdresseWert hunde 0470 public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } AdresseWert null

76 AdresseWert hunde 0470 public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } AdresseWert null Was veranlasst diese Anweisung im Arbeitsspeicher ?

77 AdresseWert public static void main(...){ final int len=2; Hund[] hunde; hunde=new Hund[len]; hunde[0]=new Hund("Goldi",10); hunde[1]=new Hund("Dicki",20); } AdresseWert null AdresseWert Adr. Goldi 10 Das Objekt (string) "Goldi" wird angelegt und die Adresse davon gespeichert. Was steht dort an dieser Stelle im Arbeitsspeicher? hunde[0] Welchen Wert muss hunde[0] bekommen, damit es auf das gerade angelegte Objekt zeigt? Der int-Wert 10 benötigt eine bestimmte Menge Bytes. Wir nehmen an: 4 Byte Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest. Es wird im Arbeitsspeicher an einer bestimmten Adresse Platz für das Objekt erzeugt, auf das hunde[0] zeigen soll.

86 AdresseWert AdresseWert AdresseWert Adr. Goldi 10 Adr. Dicki Goldi Dicki Für die Zeichenkette "Dicki" wurde z.B. hier Speicher reserviert. Für die Zeichenkette "Goldi" wurde z.B. hier Speicher reserviert. Welche Werte müssen dann an diesen Stellen stehen?

87 AdresseWert AdresseWert AdresseWert Goldi Dicki

88 AdresseWert AdresseWert AdresseWert Goldi Dicki Welche Variablen bezeichnen die folgenden Speicherbereiche (durch Anfangsadresse gegeben)?

89 AdresseWert AdresseWert AdresseWert Goldi Dicki hunde hunde[0] hunde[1]

90 Eine weitere interessante Bemerkung Die Müllabfuhr hilft !! Ein Beispiel...

91 Herr A. hat im Supermarkt einen Romadur- Käse gekauft und ihn auf die Rückbank gelegt. Durch gewagte Bremsmanöver ist dieser unter den Vordersitz gerutscht. Auf der Heimfahrt hat er eine Tramperin mit genommen. Die interessante Unterhaltung über Mathematik hat ihn so gefesselt und verwirrt, daß er seinen Einkauf vergaß und an der nächsten Tanke nochmals einen Romadur- Käse mitgenommen hat. Durch den in den nächsten Wochen beginnenden Zersetzungsprozeß hätte sich das Auto in ein

92 Biotop verwandelt, wenn es nicht die helfenden Hände seiner Mutter gegeben hätte, die das Auto regelmäßig reinigt. Die Mutter hat also die Funktion einer Müllabfuhr, die vergessene und deswegen nicht mehr ansprechbare Speicherleichen automatisch beseitigt. In Java macht dies der sogenannte Garbage Collector, der die Müllabfuhr für nicht mehr benötigten Speicherplatz ist.

93 Ein Beispiel

94 public static void main( String[] args){ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } Die Anweisungen seien bis zu dieser Anweisung alle ausgeführt. Was wurde dadurch im Arbeitsspeicher veranlaßt?

95 v AdresseWert AdresseWert public static void main(...){ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } v wird mit dem Speicher verlinkt und die Elemente des Feldes mit 10 bzw. 11 belegt.

96 v AdresseWert AdresseWert public static void main(...){ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } Die Anweisungen seien bis zu dieser Anweisung alle ausgeführt. Was wurde dadurch im Arbeitsspeicher veranlaßt?

97 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert Es wird Speicher für die 2 Elemente reserviert und diese mit 0 belegt....

98 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert Dann wird dieser Speicher mit v verlinkt....

99 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert

100 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert

101 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert Und die Elemente des Feldes mit 100 bzw. 101 belegt

102 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert Wie kann man jetzt noch auf den Speicher mit Adressbeginn 0470 und die Elemente 10 und 11 zugreifen? Mit v[0] oder v[1] ???

103 v AdresseWert AdresseWert public static...{ int[] v; v = new int[2]; v[0]= 10; v[1]= 11; v = new int[2]; v[0]= 100; v[1]= 101; } AdresseWert Nein! Mit v[0] oder v[1] greift man auf den Speicher mit Adressbeginn 0200 zu ! Auf den Speicher mit Adressbeginn 0470 kann nicht mehr zugegriffen werden. Er ist eine Speicherleiche. Er muß nicht vom Programmierer entfernt werden, sondern er wird von der Java-Müllabfuhr (Garbage Collector) entsorgt. Würde er nicht entsorgt werden, könnte immer mehr unbenutzter Speicher dazu führen, dass z.B. kein Platz mehr für Variablen da ist


Herunterladen ppt "ARRAY oder FELD oder VEKTOR. Aufgabe : Drei über Tastatur eingegebene ganzzahlige Zahlen sollen in umgekehrter Reihenfolge der Eingabe wieder auf dem."

Ähnliche Präsentationen


Google-Anzeigen