Skip to content

Latest commit

 

History

History
179 lines (136 loc) · 5.64 KB

Kap.18.adoc

File metadata and controls

179 lines (136 loc) · 5.64 KB

Frage

Ist es möglich, umfangreiche Java-Programme ohne eine einzige import-Anweisung zu schreiben?

Antwort

Ja, Imports sind immer optional, da man auch den voll qualifizierten Namen von Referenztypen verwenden kann.

Frage

import java.util.Arrays.sort;
int[] a = {4,1,3};
sort(a);

Fügen Sie ein Schlüsselwort an der richtigen Stelle ein, damit der Code funktioniert.

Frage

Eine import-Anweisung muss immer wo stehen?

Antwort

Ganz am Anfang der Quellcodedatei (aber unter der package-Deklaration).

Frage

In den Fragen zu vorherigen Kapiteln haben wir immer java.awt.Point als Typ verwendet statt Point. Weshalb haben wir das gemacht und was muss man tun, um einfach direkt Point schreiben zu können?

Antwort

Wir haben java.awt.Point nicht importiert (um eine Zeile zu sparen), deshalb mussten wir den voll qualifizierten Klassennamen angeben. Wenn man den import import java.awt.Point; schreibt, kann man danach auch einfach Point schreiben.

Frage

Was kann man mit import importieren?

Antwort

Klassen, Interfaces, Enums

Frage

Was kann man mit import static importieren?

Antwort

Methoden, Felder und die Werte von Enums

Frage

Warum ist import ein irreführender Name? Tatsächlich organisiert man über import nur ___räume!

Antwort

Es geht um Namensräume.

Frage

import java.awt.Point;
class Point { int x,y,z; }
Point p = new Point();

Problem?

Antwort

Point ist an dieser Stelle mehrdeutig, da es eine lokale Klasse und eine importierte Klasse gibt.

Frage

import java.awt.*;
Point p;

Geht das gut?

Antwort

Ja, da Point in dem Paket java.awt definiert ist und der * alle Klassen (und Interfaces und Enums) in dem Paket importiert.

Hinweis: Der importiert *keine Klassen die in Unterpaketen des angegebenen Pakets liegen, also z.B. in java.awt.color.

Frage

Was ist der Unterschied von import de.thm.mni; und import de.thm.mni.*;?

Antwort

Im ersten Fall soll eine Klasse namens mni aus dem Paket de.thm importiert werden, der zweite Ausdruck importiert alle Klassen in de.thm.mni.

Frage

Welches Paket ist standardmäßig in Java SE importiert?

Antwort

java.lang

Frage

import static java.awt.Color.* Jetzt darf ich Color c = new Color(0,0,0); deklarieren, richtig?

Antwort

Nein, weil der Import nur alle öffentlichen Member der Klasse Color importiert, nicht aber die Klasse selbst.

Frage

Wozu braucht man auf S.372 oben am Anfang die Codezeile import java.awt.Color; wenn unten darunter import static java.awt.Color.*; steht?

Antwort

Der erste import importiert die Klasse Color. Der zweite import ist static und importiert die statischen Members von Color.

Frage

Was muss man tun, damit man die Methoden der Klasse Math direkt ohne den Anteil Math. in seinem Code verwenden kann?

Antwort

import static java.lang.Math.*;

Frage

Kann ich die Klasse java.awt.Color und eine Klasse de.thm.mni.Color zusammen im gleichen Stück Code verwenden?

Antwort

Ja, man darf aber nur eine dieser Klassen importieren. Die andere muss man über den voll qualifizierten Namen ansprechen.

Frage

Man kann import static java.lang.System.out; schreiben. Dann geht doch auch import static java.lang.System.out.println;, oder?

Antwort

Nein, das geht nicht, weil out ein Objekt ist. Man kann keine Methoden aus einem Objekt importieren.

Frage

Was ist der Unterschied von import de.thm.mni.OOP; zu import static de.thm.mni.OOP;

Antwort

Der erste import importiert die Klasse OOP aus dem Paket de.thm.mni. Der zweite importiert etwas mit Namen OOP aus der Klasse mni im Paket de.thm.

Frage

Sie schreiben ein Programm im Fachbereich MNI der THM im Kurs OOP. Sie definieren ein Paket für Ihr Programm. Wie sollte der Paketname anfangen?

Antwort

de.thm.mni.oop

Frage

Die Option -cp bei java bzw. javac steht für welches Java-Konzept?

Antwort

Diese Option steht für den Classpath, in dem die JVM nach .class-Files sucht.

Frage

Welche Argumente müssen sie an java übergeben, wenn sie eine eigene Klasse main.Main ausführen wollen, die das Paket somePackage.jar verwendet? In welchen Ordnern sucht die JVM dabei nach der .class-Datei von main.Main und der Datei somePackage.jar?

Antwort

java -cp somePackage.jar:. main.Main

Die JVM sucht nach main.Main sowohl als ./main/Main.class als auch als somePackage.jar!main/Main.class (das ! steht dafür, dass das JAR-Archiv geöffnet und betreten wird). Die Datei somePackage.jar wird dabei im current working directory gesucht, in dem man sich auf der Konsole gerade befindet.

Wenn somePackage.jar in einem Unterordner libs liegen würde, müsste der Aufruf wie folgt aussehen: java -cp libs/somePackage.jar:. main.Main.

Herr Kofler macht zusätzlich Anführungszeichen um den Ausdruck hinter -cp. Das ist immer möglich aber nur dann nötig, wenn sich im übergebenen Klassenpfad ein Leerzeichen befindet.