2016-09-29 3 views
1

Soweit ich weiß, haben public/protected/private Keywords keinen Einfluss auf die Erstellungszeit. Aber ich frage mich, ob ein öffentliches Objekt/Klasse zugänglich ist, sollte Kosten verursachen. Hat es Kosten?Haben `public/protected/private` Keywords Auswirkungen auf die Leistung?

+0

siehe http://stackoverflow.com/questions/7365329/speed-optimizing-private-and-public-variables-java, http://stackoverflow.com/questions/26676200/how-does-access-modifier -impact-the-performance-in-java, http://stackoverflow.com/questions/4279420/does-use-of-final-keyword-in-java-improve-the-performance – Andrew

+0

Hier ist ein [Beispiel] (http://StackOverflow.com/a/23281131/3448419), wie Zugriffsmodifikatoren die Laufzeitleistung beeinflussen können. – apangin

Antwort

6

Nein, tun sie nicht. Sie sind im Wesentlichen Kompilierzeit Konstrukte.

Das heißt, einige OOP-Sprachen (z. B. C++) können Optimierungsentscheidungen basierend auf etwas sein, das private ist. Aber das ist unwahrscheinlich in Java wegen Reflexion auszunutzen, da in private seine Unsichtbarkeit zu Sachen außerhalb der Klasse nicht garantiert ist.

3

ein öffentliches Objekt/Klasse zugänglich zu halten, sollte Kosten verursachen.

Ja, der Compiler muss prüfen, ob das Objekt, auf das Sie zugreifen, privat, geschützt und öffentlich ist. Es entscheidet dann, ob Sie darauf zugreifen dürfen.

Zur Laufzeit muss die Laufzeit jedoch nicht prüfen, ob Sie auf die Variable zugreifen dürfen. Warum? Da ein Programm ausgeführt werden muss, muss es kompiliert werden (es sei denn, Sie verwenden eine interpretierte Sprache wie JS). Wenn Sie versuchen, auf eine Variable zuzugreifen, die Ihnen nicht erlaubt ist, wird sie nicht einmal ausgeführt!

Zur Laufzeit muss sich die Laufzeitumgebung also keine Gedanken darüber machen, ob Sie auf die Variable zugreifen können und somit keine Auswirkungen auf die Leistung haben.

+1

Diese Antwort ist nicht vollständig. Bei der Klassenladezeit - zur Laufzeit - überprüft der Bytecode-Verifizierer, dass Sie nicht auf private, geschützte oder paket-private Methoden, Felder und Klassen aus Code zugreifen, der dieses Recht nicht besitzt. Diese Überprüfung benötigt einige (minimale) Zeit, aber nur einmal während des Ladens der Klasse. –

+0

Dann hat es einen Preis. – ahmetozkok

+1

Ich denke, du solltest das als Antwort schreiben. – ahmetozkok

Verwandte Themen