Java Referenzdatentypen genauer betrachtet

Ähnliche Dokumente
Java Datentypen und Variablen

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Java Anweisungen und Ablaufsteuerung

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Martin Unold INFORMATIK. Geoinformatik und Vermessung

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Arrays. Einleitung. Deklarieren einer Array Variablen

Objektorientierte Programmierung und Modellierung

Praxis der Programmierung

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Java Ablaufsteuerung (Beispiele)

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

2.8 Klassen. Nichtgleichartige Elemente können in Klassen zu einem neuen Typ zusammengefasst werden. Beispiel: Die drei Komponenten

Einführung in die Programmierung für NF MI. Übung 04

Einstieg in die Informatik mit Java

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Javakurs für Anfänger

Informatik II. Woche 15, Giuseppe Accaputo

Vorlesung Programmieren

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Vorlesung Programmieren

Einstieg in die Informatik mit Java

Vorlesung Programmieren

Crashkurs C++ - Teil 1

Repetitorium Informatik (Java)

Algorithmen und Datenstrukturen II

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Einstieg in die Informatik mit Java

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Programmieren I. Kapitel 12. Referenzen

Arrays,Strings&Pointer in C/C++

F Zeiger, Felder und Strukturen in C

1 Klassen und Objekte

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Klassen als Datenstrukturen

Programmieren in Java

6 Speicherorganisation

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Mehrdimensionale Arrays

Einstieg in die Informatik mit Java

Angewandte Mathematik und Programmierung

Zeiger, Arrays und Strings in C und C++

Grundlagen der Programmierung

Modellierung und Programmierung 1

Informatik. Strukturen und Aufzählungstypen. Vorlesung

9. Vektoren. (auch Felder/array)

Einstieg in die Informatik mit Java

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Informatik II. Woche 10, Giuseppe Accaputo

Informatik II Übung 5

8. Referenzen und Zeiger

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Tag 4 Repetitorium Informatik (Java)

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Repetitorium Programmieren I + II

Modellierung und Programmierung 1

Variablen und Parameter

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

Kapitel 6. Programmierkurs. 6.0 Felder (Arrays) Deklaration von Feldern. Felder (Arrays) Mehrdimensionale Arrays. Birgit Engels, Anna Schulze WS 07/08

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Grundlagen der Programmierung

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Methoden und Wrapperklassen

Programmieren I + II Regeln der Code-Formatierung

Umsetzung einer Klassenkarte in einer Programmiersprache

Konstruktor. Grundlagen der Programmierung. Stephan Kleuker 90

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Grundlagen der OO- Programmierung in C#

Java Lexikalische Struktur

Algorithmen und Programmierung II

Einführung in die Programmierung

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Java Einführung Klassendefinitionen

Java I Vorlesung 6 Referenz-Datentypen

2. Unterprogramme und Methoden

Transkript:

Informatik 1 für Nebenfachstudierende Grundmodul Java Referenzdatentypen genauer betrachtet Kai-Steffen Hielscher Folienversion: 23. Januar 2018 Informatik 7 Rechnernetze und Kommunikationssysteme

Referenzdatentypen eine Variable für einen primitiven Datentyp verweist auf einen Bereich im Hauptspeicher, der direkt den Wert der Variable enthält eine Variable für einen Referenzdatentypen verweist auf einen Bereich im Speicher, der die Adresse des referenzierten Objekts enthält Inf1NF 2

Referenzdatentypen byte a = 127; Byte b = new Byte(134); Hauptspeicher des Computers Variable Adresse Inhalt a 98 127 b 106 248 134 248 Referenz Inf1NF 3

Referenzdatentypen Deklaration wie in Java bei allen Datentypen üblich Byte b; Initialisierung mit dem new-operator b = new Byte(134); reserviert sein Stück Speicher für den eigentlichen Inhalt legt den initialen Wert in dem Stück Speicher ab oder Deklaration und Initialisierung ein einem Schritt Byte b = new Byte(134); Inf1NF 4

Referenzdatentypen Referenzdatentypen siehe Kapitel Java - Datentypen Objekte in Java vordefinierte Objekte selbst definierte Objekte Wrapper-Klassen für primitive Datentypen Strings Inf1NF 5

(Felder) Ein Array ist eine Folge von Variablen mit gleichem Typ elementare Datentypen Instanzen einer Klasse feste Länge Deklaration Datentyp[] Arraybezeichner; int[] array; hierdurch wird eine Referenz auf das Array angelegt danach muss das eigentliche Array mit new erzeugt werden, dabei wird die Anzahl der Elemente angegeben Arraybezeichner = new Datentyp[Elemente]; array = new int[10]; Inf1NF 6

meist in einem Schritt int[] array = new int[10]; Jetzt wird auch klar, warum hier eine Referenz benötigt wird: Vor Erzeugung des mit new ist nicht klar, wie groß das Array sein wird, d.h. wie viel Speicher dafür benötigt wird Inf1NF 7

Deklaration, Initialisierung des Speicherbereichs und Initialisierung der Werte im Array in einem Schritt möglich, dann kein new nötig Größe des Speicherbereichs gleich beim Anlegen der Referenz bei der Deklaration bekannt Werte des zu erstellenden in geschweiften Klammern int[] feld = {0, 1, 2, 3, 4}; Inf1NF 8

Länge eines Arraybezeichner.length liefert die Anzahl der Elemente eines ein Array ist ein Objekt length ist eine Komponentenvariable Beispiel int[] zahlen = new int[24]; System.out.println(zahlen.length); // 24 Inf1NF 9

Zugriff auf Element i mittels array[i] i heißt Index Achtung: die Nummerierung der Elemente beginnt bei 0. im Beispiel int[] zahlen = new int[24]; kann i Werte von 0 bis 23 annehmen zahlen[0] = 1; zahlen[5] = 4711; zahlen[9] = 42; Inf1NF 10

auch mehrdimensionale möglich eigentlich ist dies ein Array, das wieder Array enthält double[][] matrix = new double[3][3]; matrix[0][0] = 1.0; matrix[0][1] = 0.0; matrix[0][2] = 0.0; matrix[1][0] = 0.0; matrix[1][1] = 1.0; matrix[1][2] = 0.0; matrix[2][0] = 0.0; matrix[2][1] = 0.0; matrix[2][2] = 1.0; 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 Inf1NF 11

Zuweisungen erzeugen nur eine neue Referenz, keine Kopie der Elemente des byte[] feld = {1, 2, 3}; byte[] feld2 = feld; Variable Adresse Inhalt feld 1024 2554 feld2 2346 2554 2554 1 2555 2 2556 3 Inf1NF 12

Änderung des Speicherinhalts wirkt sich auf beide aus feld2[0] = 5; im Beispiel verweisen dann sowohl feld als auch feld2 auf die gleichen Elemente, sowohl feld2[0] als auch feld[0] hat nun den Wert 5. Variable Adresse Inhalt feld 1024 feld2 2346 2554 5 2555 2 2556 3 2554 2554 Inf1NF 13

Kopie eines anlegen mittels vordefinierter Methode System.arraycopy(quelle, quellstartindex, ziel, zielstartindex, anzahl); : int[] array = new int[10]; array[0] = 422; array[1] = array[0] 27; int[] kopie = new int[array.length]; System.arraycopy(array, 0, kopie, 0, array.length); Inf1NF 14

Kopie eines anlegen manuell Schleife, um die einzelnen Elemente zu kopieren Vorsicht: Index beginnt bei 0, endet bei array.length-1 : int[] array = new int[10]; array[0] = 422; array[1] = array[0] 27; int[] kopie = new int[array.length]; for(int i = 0; i < array.length; i++) { kopie[i] = array[i]; } Inf1NF 15

Kopie eines anlegen Vorsicht bei mehrdimensionalen ein mehrdimensionales Array ist ein Array von bei zwei Dimensionen zwei geschachtelte Schleifen nötig double[][] matrix = new double[3][3]; double[][] kopie = new double[3][3]; matrix[0][0] = 1.0; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { kopie[i][j] = matrix[i][j]; } } Inf1NF 16

Schleifen eignen sich gut zur Bearbeitung von Iteration über Elemente des Beispiel mit for-schleifen: int[] array = new int[10]; int summe = 0; for(int i = 0; i < array.length; i++) { array[i] = 2 * (i + 1); } for(int i = 0; i < array.length; i++) { summe += array[i]; } System.out.println(summe); Inf1NF 17

Schleifen eignen sich gut zur Bearbeitung von seit Java 5 gibt es eine vereinfachte for-schleifen-notation for ( typ variablenname : ausdruck ) iteriert über die Elemente eines, vermeidet explizite Angabe eines Index und der Grenzen für den Index Beispiel: int[] array = {2, 4, 6, 8, 10}; int summe = 0; for(int x : array) { summe += x; } Inf1NF 18

Referenzdatentypen bei Referenzdatentypen müssen die Objekte mit new erzeugt werden (bei Strings nicht explizit) dabei wird ein Speicherbereich für diese Objekte reserviert Garbage Collector von Java gibt den Speicher automatisch frei, wenn er nicht mehr benötigt wird wenn keine Referenz mehr auf diesen Speicherbereich verweist Inf1NF 19

Garbage Collector byte[] feld = {1, 2, 3}; Variable Adresse Inhalt feld 1024 2346 2346 1 2347 2 2348 3 Inf1NF 20

Garbage Collector byte[] feld = {1, 2, 3}; feld = new byte[2]; feld[0] = 2; feld[1] = 7; Variable feld Adresse 1024 Inhalt 2346 1 2347 2 2348 3 2558 2 2559 7 2558 Inf1NF 21

Garbage Collector byte[] feld = {1, 2, 3}; feld = new byte[2]; feld[0] = 2; feld[1] = 7; Variable feld Adresse 1024 Inhalt keine Referenz mehr auf diesen Speicherinhalt 2346 1 2347 2 2348 3 2558 2 2559 7 2558 Inf1NF 22

Garbage Collector byte[] feld = {1, 2, 3}; feld = new byte[2]; feld[0] = 2; feld[1] = 7; Variable feld Adresse 1024 Inhalt Garbage Collector gibt Speicher frei 2346 2347 2348 2558 2 2559 7 2558 Inf1NF 23

Garbage Collector byte[] feld = {1, 2, 3}; feld = new byte[2]; feld[0] = 2; feld[1] = 7; Variable feld Adresse 1024 Inhalt Speicher steht wieder für andere Daten zur Verfügung 2346 2347 2348 2558 2 2559 7 2558 Inf1NF 24

und Methoden (Wiederholung) wird ein Referenzdatentyp als Parameter übergeben, so wird beim Methodenaufruf lediglich eine Kopie der Referenz erstellt es gibt also nach Aufruf eine weitere Referenz auf die gleichen Daten Methode kann so also Werte in aufrufenden Programmteilen verändern, obwohl das eigentlich mit call by value nicht möglich sein sollte Seiteneffekt Deklaration einer Methode mit Referenzdatentyp: call by reference Inf1NF 25

und Methoden Beispiel: public static int malzwei(int[] n) { n[0] *= 2; return n[0]; } int a[] = {1}; System.out.println(malzwei(a)); // gibt 2 aus (Rückgabewert), // a[0] ist aber hier nun auch 2 System.out.println(malzwei(a)); // gibt nun 4 als Rückgabewert aus, // a[0] ist hier nun 4 Inf1NF 26

Quellen zum Selbststudium Dirk Louis, Peter Müller: Java Eine Einführung in die Programmierung, Hanser, 2014. Dietmar Ratz, Jens Scheffler, Detlef Seese, Jan Wiesenberger: Grundkurs Programmieren in Java 8, Hanser, 2014. Inf1NF 27