static und Pattern matching

byron1778

Aktives Mitglied
Hallo Forum!

Ich habe folgendes Verständnisproblem.
Die Klasse Pattern ist final, kann somit nicht abgeleitet werden, das ist mehr als nur einleuchtend.
Jetzt ist es aber so, dass manche Methoden der Klasse Pattern static sind, es können somit mit new keine Objekte dessen angelegt werden, auch einleuchtend für mich.

Aber es gibt nun wiederum Methoden der Klasse, die nicht static sind, wie zB: flags().

Jetzt hingegen müsste ich doch vorher mit Pattern p = new Pattern(); ein Object anlegen können/müssen und dann mittels p.flags() weiterarbeiten.

Jedoch erscheint mir hier immer die Fehlermeldung: The constructor Pattern ist undefined!

Ist mir klar, weil die Pattern Klasse keinen Konstruktor mit sich führt!

Aber nachdem die Methode flags nun nicht static ist, wieso muss ich dann trotzdem kein Object erzeugen, sondern kann ganz einfach mittels

Code:
Pattern p;
int zahl = p.flags() verwenden?

ich dachte mir, um ein langlebieges Object zu erzeugen, gehe ich so vor

Pattern p = new Pattern();
int zahl = p.flags();

Wenn mir jemand genau erklären könnte, warum ich hier nicht über ein Object gehen kann!
Bin etwas verwirrt!

Danke Euch schon vielmals im vorhinein!
 

diggaa1984

Top Contributor
also ohne Objekt sollte die Methode ja nicht aufrufbar sein.

du musst dann eben zB. per Compile ein Objekt der Klasse erhalten und kannst dann dessen objektspezifische Methoden aufrufen.
 

Crian

Top Contributor
Pattern erzeugt man normalerweise so:

Java:
Pattern pattern = Pattern.compile(regularExpression, flags);
 

byron1778

Aktives Mitglied
Folgendes ist mir ja klar:

Code:
Pattern p = p.compile....

weil die Methode compile einen Pattern zurückgibt und statisch ist.
Aber die Methode flags ist ja nicht statisch, wieso kann ich dann aber nicht ein Object Pattern erzeugen.
Das wird mir im Moment nicht klar.
 

Crian

Top Contributor
Folgendes ist mir ja klar:

Code:
Pattern p = p.compile....

weil die Methode compile einen Pattern zurückgibt und statisch ist.
Aber die Methode flags ist ja nicht statisch, wieso kann ich dann aber nicht ein Object Pattern erzeugen.
Das wird mir im Moment nicht klar.

Ich verstehe deine Frage nicht, aber der Code ist falsch. wie ich oben schrieb, heißt es [c]Pattern.compile(...)[/c]. Und die Flags kannst du beim Kompilieren angeben. Wie oben schon geschrieben.
 

byron1778

Aktives Mitglied
Hm, vll kann ich es so besser erklären, was ich meine.

Von der Klasse System gibt es nur statische Methode, daher ist nur folgendes möglich

Java:
System.exit
System.out.println
etc

Ein Objekt zu erzeugen ist hier ja nicht möglich!

Die Klasse Pattern hingegen hat statische wie nicht statische Methoden.
Eine dieser Methoden ist flags().

Daher müsste ich ja schreiben:

Java:
Pattern p = new Pattern();
int zahl = p.flags();

Ich hoffe, dass ich es jetzt besser erklären konnte!
 

Niki

Top Contributor
das
Java:
new Pattern();
wird eh aufgerufen. nur nicht von dir. das passiet irgendwo in der statischen compile methode. der konstruktor ist private, daher kannst du von außen kein eigenes Pattern objekt erzeugen. schau dir einfach den source code der klasse Pattern an. vielleicht ist dir dann klarer wie sie funktioniert.
 

byron1778

Aktives Mitglied
Ok, dass der Konstruktor private ist, akzeptiere ich so.
Wo kann ich aber aus der Seite auslesen, dass der Konstruktor private ist bzw. damit ich genau weiss, dass die Methode flags() eben nicht auf meine Weise zu behandeln ist?

Pattern (Java 2 Platform SE v1.4.2)

Dann wäre für mich eigentlich alles beantwortet!

Danke Euch vielmals!
 

faetzminator

Gesperrter Benutzer
1. [c]flags()[/c] ist nicht als static deklariert in der API
2. Du findest keine Konstruktoren in der API, also sind keine sichtbar

Aber was es mit der Frage mit den Flags auf sich hat, weiss ich auch nicht. [c]flags()[/c] liefert lediglich die Flags zurück, die du bei [c]compile()[/c] angegeben hast.
 

diggaa1984

Top Contributor
da auf der seite kein Konstruktor aufgeführt ist, hast du keinen den du nutzen kannst .. selbst der standardkonstruktor wäre da angegeben.

Ein Pattern scheint ja ein Objekt zu sein, was nicht mit der Zeit manipuliert wird sondern in einem gewissen Zustand erzeugt wird und in diesem bleibt .. folglich wäre es nicht sinnvoll leere Pattern-Objekte zu erzeugen und irgendwelche Methoden abzufragen. Es gibt ja keine Setter in dem Sinne .. jede "Änderung" bedarf einer Erzeugung eines neuen Objektes.
 
Zuletzt bearbeitet:

byron1778

Aktives Mitglied
ad diggaa1984:

Danke Dir, Deine Erklärung war mir schon sehr hilfreich.
Ganz besonders das mit den getter und setter war mir hilfreich in dem Fall.

Folgendes kann ich ja vermutlich machen, obwohl es nichts bringen wird und eine NullPointerException auslöst!

Java:
Pattern p = null;
int zahl = p.flags();

Mir ging es letzten Endes nur darum, die einzelnen Unterschiede auf einen Blick herauslesen zu können und bei der Pattern Klasse bin ich gehangen, weil es Methoden gibt, die statisch sind und andere nicht.
Jetzt wollte ich einmal mit der flags - Methode herumhantieren, aber ständig wird nur von Pattern p = p.compile gesprochen!
 

diggaa1984

Top Contributor
kannste mache klar, aber bringt eben die NPE :) ... weil hier stehts ja dann bordeaux auf blaugrau das
Code:
p == null
ist :)
 

byron1778

Aktives Mitglied
Genau, danke Dir vielmals!

Dachte mir die ganze Zeit, dass ein

Java:
Pattern p = null;
int zahl = p.flags();

nicht möglich wäre, weil immer nur von

Java:
Pattern p = p.compile

gesprochen wurde, was mir hier aber nicht weiterhalf :)

Aber jetzt weiss ich zumindest, dass es geht, jedoch ohne Zweck und es trotzdem kompilierbar ist!
Das war mir wichtig!

Danke Dir/Euch vielmals und für meine blöde Frage!
 

Crian

Top Contributor
Jetzt wollte ich einmal mit der flags - Methode herumhantieren, aber ständig wird nur von Pattern p = p.compile gesprochen!

... p.compile ist immer noch falsch ...

anscheinend missverstehen wir uns einfach. Hier mal ein Beispiel:

[Java]package regularExpressions;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FlagsAusgeben {


public static void main(String[] args) {
int flags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE;
String regexp = "a.*b";
Pattern pattern = Pattern.compile(regexp, flags);

String input = "AAAAAAAAAAAAAAAAdfooAAAAbBbB";
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
System.out.println("Treffer!");
System.out.println("Text: [" + input + "]");
System.out.println("flags in: [" + flags + "]");
int flagsOut = pattern.flags();
System.out.println("flags out: [" + flagsOut + "]");
}
else {
System.out.println("Kein Treffer!");
}
}

}
[/code]

Ausgabe:

Code:
Treffer!
Text: [AAAAAAAAAAAAAAAAdfooAAAAbBbB]
flags in: [10]
flags out: [10]

Vielleicht erhellt das das ganze etwas?
 

byron1778

Aktives Mitglied
Danke Dir, hat mir auch geholfen!

Mir ging es ja darum zu verstehen, warum ich nicht einfach hergehen kann und ein Pattern Object bilden kann und dann gleich auf dieses Object die Methode flags anwenden kann!

Aber das liegt daran, dass es einen private Konstruktor gibt und so einer kann nicht instanziiert werden!
Leider stand auf der Java Seite vom Pattern nichts davon, dass der Konstruktor private ist und beim ersten Male habe ich im Source Code von Pattern auch diesbezüglich nichts gefunden ( falsch gesucht! ).

Danke Euch allen vielmals!
 

Crian

Top Contributor
Mir ging es ja darum zu verstehen, warum ich nicht einfach hergehen kann und ein Pattern Object bilden kann und dann gleich auf dieses Object die Methode flags anwenden kann!

Hmm.

Java:
Pattern pattern = Pattern.compile(regexp, flags);

bildet dein Pattern Objekt und

Java:
int flagsOut = pattern.flags();

wendet die Methode flags an.

:bahnhof:
 

faetzminator

Gesperrter Benutzer
Noch eine ganz allgemeine Bemerkung, welche noch nicht gefallen ist: In der Java SE API ist eigentlich immer jede Klasse genaustens beschrieben. Da findest du zuoberst in Pattern (Java Platform SE 6) auch Beispiele:
A typical invocation sequence is thus
Java:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
A matches method is defined by this class as a convenience for when a regular expression is used just once. This method compiles an expression and matches an input sequence against it in a single invocation. The statement
Java:
boolean b = Pattern.matches("a*b", "aaaaab");
is equivalent to the three statements above, though for repeated matches it is less efficient since it does not allow the compiled pattern to be reused.
Dort steht in diesem Fall auch detailliert, wie Regex in Java anzuwenden ist bzw. von dieser Klasse implementiert wurde.
 

byron1778

Aktives Mitglied
add Crian :

Du hast schon recht, dass deine Vorgehensweise auch ein Patternobject bildet; mir ging es aber darum mit new ein Pattern Object zu bilden!

Java:
Pattern p = new Pattern();

Das geht aber nur ( hat ein wenig gedauert, bis ich es gefunden habe - sorry! ), wenn der Konstruktor nicht private ist! und genau hier lag dann mein Problem.
Im Java Text stand leider nichts vom private Konstruktor und nur Beispiele selber helfen mir nicht immer weiter. Ich will manchmal etwas anders machen als vorgegeben, nur um es besser verstehen zu können!
 

faetzminator

Gesperrter Benutzer
Im Java Text stand leider nichts vom private Konstruktor [...]
Ja, weil du diese sowieso nicht benutzen kannst.
[...] und nur Beispiele selber helfen mir nicht immer weiter. Ich will manchmal etwas anders machen als vorgegeben, nur um es besser verstehen zu können!
Aber Beispiele sind doch genau dazu da, zu verstehen, wie man das zu verwenden hat... Bei einem schönen Design sollte es nicht 3000 Wege geben, wie man etwas macht. Wieso willst du das also anders machen, als es gemacht werden muss?
 

byron1778

Aktives Mitglied
Ich will ja nicht absichtlich etwas anders machen, aber ich hab mich einfach gewundert, warum ich kein neues Object mit new anlegen kann!
Und wie ich das dann eben ausprobierte hatte, hat es Probleme gegeben.
Abzuschreiben oder nur zu lesen, dass es so ist wie es ist, zeugt nicht gerade von Verständnis finde ich! - Ich habe mir in diesem Fall Gedanken gemacht, warum eben kein Obejct mit new angelegt werden kann!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
X Static char Problem Java Basics - Anfänger-Themen 11
H static final vs. final static Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben