-
Notifications
You must be signed in to change notification settings - Fork 13
/
Static-Members.md
68 lines (39 loc) · 2.19 KB
/
Static-Members.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Static Members<!-- omit in toc -->
- [`static`](#static)
- [Klassenvariablen](#klassenvariablen)
- [Statische Methoden](#statische-methoden)
> 💬 **static** — _deu.: statisch_
## `static`
Die wichtigste Erkenntnis um alles zu verstehen, was mit dem Schlüsselwort `static` zu tun hat, ist folgende:
👩🏫 `static` bedeutet _**"an die Klasse gebunden"**_ - im Gegensatz zu _"an das Objekt gebunden"_.
Dies hat je nach dem Kontext, in dem `static` verwendet wird, unterschiedliche Auswirkungen ...
## Klassenvariablen
> 💬 eng.: _static member variables_, siehe auch [Variablen](Variablen.md)
Klassenvariablen (oder: _statische Variablen_) sind an die Klasse gebunden, in der sie deklariert werden. Genaueres zu Klassenvariablen findet sich im [Abschnitt "Klassenvariablen" des Artikels zu Variablen](Variablen.md#klassenvariablen)!
## Statische Methoden
> 💬 eng.: _static methods_
Auf statische Methoden kann - genau wie auf Klassenvariablen - **ohne** Instanz der Klasse zugegriffen werden, denn sie sind an die Klasse und nicht an eine Instanz der Klasse (ein Objekt) gebunden. Dabei können auch statische Methoden unterschiedlich [sichtbar](Objekte-I-Initialisierung-Members-Zugriff.md#zugriffs-sichtbarkeitsmodifizierer) sein!
Innerhalb von _statischen Methoden_ kann **nicht** auf nicht-statische Variablen und Methoden (eng.: _non-static members_)) zugegriffen werden, da diese (anders als die statische Methode) an Instanzen der Klasse gebunden sind (die im statischen Kontext nicht existieren).
**Beispiel für _statische Methoden_:**
```java
public class User {
private String id;
private String eMail;
public User(String eMail){
this.eMail = eMail;
this.id = User.generateUserID(eMail);
}
public static String generateUserID(String userMailAddress){
return "User" + Math.abs(userMailAddress.hashCode());
}
}
public class Application {
public static void main(String[] args){
String someMailAddress = "[email protected]";
// Welche ID hat ein User mit dieser Adresse?
// Wenn es sie/ihn gibt, dann diese (statische Methode
// wird ohne User-Objekt aufgerufen!):
System.out.println(User.generateUserID(someMailAddress));
}
}
```