java 2
Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff
Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff
Set of flashcards Details
Flashcards | 500 |
---|---|
Language | Deutsch |
Category | Computer Science |
Level | University |
Created / Updated | 03.03.2020 / 22.06.2022 |
Weblink |
https://card2brain.ch/box/20200303_java_2
|
Embed |
<iframe src="https://card2brain.ch/box/20200303_java_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Wie geht die Reihenfolge in der Java eine überladene Methode auswählt, wenn es mehrere Kanidaten gibt?
1. Exact match by type
2. Matching a superclass type
3. Converting to a larger primitive type
4. Converting to an autoboxed type
5. Varargs
Kann eine überschreibende Methode weniger accessible sein?
Nein, entweder gleich oder mehr
Was sind die Regeln die eine überschriebene Methode einhalten muss?
- Der access modifier muss der gleiche oder offener sein
- Der returntype muss der gleiche oder ein restriktiverer sein (covariant return types)
- Wenn checked exceptions geworfen werden darf nur die gleiche oder eine subklasse der exception geworfen werden
Was passiert wenn man eine statische Methode überschreibt?
Geht nicht - wird nur versteckt
Was kann hier statt dem kommentar eingefügt werden?
abstract class Cat{
// Kommentar
}
class Lion extends Cat {
void clean() {}
}
- Kann leer sein
- abstract void clean();
- void clean () {}
- ... (z.B. wirft eine RuntimeException, ..)
Ist "null instanceof Object" true oder false?
false
Was gibt folgendes Snippet aus?:
abstract class Animal {
String name = "???";
public void printName() {System.out.println(name);}
}
class Lion extends Animal {
String name = "Leo";
}
public class PlayWithAnimal {
public static void main(String ... args) {
Animal animal = new Lion();
animal.printName();
}
}
Gibt ??? aus
Was sind die drei keypoints des Contracts beim Überschreiben von hashCode()?
- Innerhalb eines Programms darf sich das Ergebnis von hashCode() nicht ändern
- Wenn equals() true returned bei zwe objekten dann muss hashCode auf beiden dasselbe ergebnis liefern
- Wenn equals() false return bei zwei objekten dann muss hashCode nicht zwingend eindeutig sein bei beiden Objekten
Wie oft wird der Konstruktor hier aufgerufen?:
public enum OnlyOne {
ONCE (true);
private OnlyOne(boolean b) {
System. out .println("constructing");
}
public static void main(String[] args) {
OnlyOne firstCall = OnlyOne. ONCE ;
OnlyOne secondCall = OnlyOne. ONCE ;
} }
Ein Mal
Was ist eine Member inner class?
Eine inner class auf member level, also auf dem selben wie Methoden, instanzvariablen und Konstruktoren.
Bsp.:
public class Outer {
private String greeting = "Hi";
protected class Inner {
public int repeat = 3;
public void go() {
for (int i = 0; i < repeat; i++)
System.out.println(greeting);
}
}
Was sind die Eigenschaften von Member inner classes?
- Können public, private, protected oder default sein
- Können klassen extenden und Interfaces implementieren
- Können Abstrakt oder Final sein
- Können KEINE statischen Felder/Methoden deklarieren
- Können Members der outer class aufrufen, auch private!
Funktioniert das folgende Snippet? (vorausgesetzt Outer und inner existieren)
public static void main(String[] args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.go();
}
Ja, erzeugt eine inner member class instanz
Kann man eine nested member class in eine nested member class nesten?
Ja, sollte man aber nicht
Funktioniert das folgende Codesnippet?
public class CaseOfThePrivateInterface {
private interface Secret {
public void shh();
}
class DontTell implements Secret {
public void shh() { }
} }
Ja, ein inner Interface muss nicht public sein
Was ist eine local inner class?
Eine nested class die in einer Methode definiert wird. Lebt nur wenn die Methode aufgerufen wird. => kann nur innerhalb der Methode erzeugt werden
Was sind die Eigenschaften von local inner classes?
- haben keinen access specifier
- können nicht als statisch declariert werden und keine statischen felder/methoden beinhalten
- Haben zugriff auf alle Felder/Methoden der äußeren Klasse
- Haben KEINEN Zugriff auf lokale Variablen der Methoden außer diese sind final oder effectively final
Was sind die Eigenschaften einer Static nested class?
Wie eine reguläre Klasse, außer:
- Eigener Namespace (name der äußeren klasse)
- kann private sein
- die äußere klasse kann die Felder/Methoden der inneren klasse aufrufen
Muss ein FunctionalInterface mit der Annotation @FunctionalInterface versehen sein?
Nein, darf aber nur exakt eine abstrakte Methode haben!
Was passiert wenn eine Klasse mit @FunctionalInterface annotiert ist aber zwei oder gar keine abstrakten Methoden deklariert?
Der Compiler mekkert - ist ja kein FunctionalInterface!
Warum sollte man FunctionalInterfaces auch als solche Annotieren?
Wenn man bspw. ein Interface hat, welches zur aktuellen Zeit nur eine abstrakte Methode hat - später aber ggfls. erweitert werden soll, kann es sein, dass ein anderer Entwickler das Interface als FunctionalInterface Interpretiert. Dann funktioniert später sein Code nicht mehr. Damit der andere Entwickler direkt weiß dass es kein FunctionalInterface ist, sollte man sich einigen, dass man FunctionalInterfaces immer annotiert!
Wie kann das Functional Interface hier verwendet werden? :
public class Animal { //some other stuff, constructor, ..
public boolean canHop() { return true; }}
public interface CheckTrait { public boolean test(Animal a); }
public class FindMatchingAnimals {
private static void print ( ??? ????? , ???? ?????) {
?????????
}
}
...
private static void print( Animal animal, CheckTrait trait) {
if(trait.test(animal)) doSomething();
}
Aufruf: print(new Animal(...), a -> a.canHop());
Wann können Klammern bei Lambdas weggelassen werden?
Wenn es nur exakt einen Parameter gibt und der Datentyp nicht spezifiziert wird
Was für eine Methode deklariert das Interface Predicate?
public boolean test(T t);
Was bestimmen der Typ eines Objekts und der Typ einer Referenz hinsichtlich Methoden/Properties?
- Der Type eines Objekt gibt an was für Properties existieren
- Der Type einer Referenz gibt an welche Methoden und Variablen ereichbar sind
Was sind die Basic-Rules beim Casten?
- Casten von Subklasse zu Superklasse benötigt keinen expliziten Cast
- Casten von Superklasse zu Subklasse benötigt einen expliziten Cast
- Der Compiler erlaubt keine Casts zu unrelated Types
- Auch wenn der Code compiled kann zur runtime ein Fehler geworfen werden wenn das Objekt nicht wirklich eine instanz der Klasse ist
Was ist eine JavaBean?
Ein Standard für Klassen die Daten speichern
Was gibt es für Regeln für JavaBeans?
- Poperties müssen private sein
- Getter für nicht-booleans beginnen mit "get"
- Getter für booleans beginnen mit "is" oder "get"
- Setter Methoden beginnen mit set
- Methodennamen haben prefix mit set/get/is und folgend beim Propertynamen
Wäre folgender code ok hinsichtlich der Regeln für JavaBeans?
private Boolean dancing;
public Boolean isDancing() {return dancing; }
Nein, Boolean ist ein Wrapper und deshalb sollte get verwendet werden
Was passiert in folgendem Code?:
public class StaffRegister {
private static final StaffRegister instance;
static {
instance = new StaffRegister();
// Perform additional steps
}
private StaffRegister() {
}
public static StaffRegister getInstance() {
return instance;
}
Ein singleton wird erzeugt welches direkt beim Laden der Klasse eine instanz des objektes anlegt
Beispiel für dobule-checked-locking?
private static volatile VisitorTicketTracker instance;
public static VisitorTicketTracker getInstance() {
if(instance == null) {
synchronized(VisitorTicketTracker.class) {
if(instance == null) {
instance = new VisitorTicketTracker();
}
}
}
return instance;
}
Was ist die "commen strategy" von "immutable objects"?
- use a constructor to set all properties of the object
- mark all of the instance variables private and final
- dont define any setter methods
- dont allow referenced mutable objects to be modified or accessed directly
- prevent methods from beeing overridden
Wie wendet man das Builder-Pattern an? (Wie schauen die klassen aus, mehtoden, ..)
- Immutable Klasse des eigentlichen Objekts
- Mutable Klasse des Builders
- Builder hat methoden "set..." die referenz auf this zurückgeben und im builder die variablen setzen
- methode "build()" gibt dann neue instanz des eigentlichen objekts mit den gesetzten parametern zurück
Wie kann man Code schreiben der eine Instanz einer Klasse erzeugt, man aber erst zur Laufzeit weiß was genau man möchte?
Mit einer Factory! Bspw. :
public class FoodFactory {
public static Food getFood(String animalName) {
switch(animalName) {
case "zebra": return new Hay(100);
case "rabbit": return new Pellets(5);
case "goat": return new Pellets(30);
case "polar bear": return new Fish(10);
}
// Good practice to throw an exception if no matching subclass could be found
throw new UnsupportedOperationException("Unsupported animal: "+animalName);
}
}
Kann eine ArrayList primitives beinhalten? Warum?
Nein, kann nur Objecte beinhalten
Wie bekommen wir ein Objekt von ArrayList zurück? Wie die größe der ArrayList?
mit get() und size()
Wie bekommen wir die Länge eines arrays?
mit .length
Wie muss der input von Arrays.binarySearch gestaltet sein?
Muss sortiert sein
Wie kann man ein Array sortieren? Wie eine Collection?
Arrays.sort()
Collections.sort()
Was ist der output hiervon? :
List<Integer> numbers = new ArrayList<Integer>();
4: numbers.add(1);
5: numbers.add(new Integer(3));
6: numbers.add(new Integer(5));
7: numbers.remove(1);
8: numbers.remove(new Integer(5));
9: System.out.println(numbers);
[1] -> remove(int) removes das objekt an der position int
Kann man ein den static modifier in verbindung mit generics verwenden? (bei variablen, nicht methoden)
Nein