Hinweise zur Einführung für erfahrene JavaScript-Lernende von Java

Ein Bekannter mit JavaScript-Erfahrung sagte, dass er Java lernen wollte, deshalb habe ich eine einfache Voreinführungsnotiz zusammengestellt.

Angenommener Leser

Es ist für alle gedacht, die JavaScript-Code gelernt oder geschrieben haben, der in einem Webbrowser oder in einer NodeJS-Umgebung funktioniert.

Um richtig zu lernen, halte ich es für effektiv, den Java Primer zu lesen und auf viel guten Code zu verweisen und ihn zu imitieren. Wenn Sie jedoch zu diesem Zeitpunkt über Kenntnisse in JavaScript verfügen, ist es möglicherweise einfacher zu verstehen, wenn Sie nach dem Überprüfen des Unterschieds zu Java lernen. Ich dachte, ich habe versucht, dieses Memo zusammenzufassen.

Wenn Sie dieses Memo zu einfach oder zu ausführlich finden, empfehle ich die großartige Übersichtsseite Erste Schritte mit Java-Code (https://java-code.jp/category/java).

Entwicklungsumgebung

Es wird davon ausgegangen, dass in dieser Zeit eine Art integrierte Entwicklungsumgebung verwendet wird. Vorerst gehe ich von der altmodischen [Eclipse (Integrated Development Environment)] aus (https://ja.wikipedia.org/wiki/Eclipse_(%E7%B5%B1%E5%90%88%E9%96%). 8B% E7% 99% BA% E7% 92% B0% E5% A2% 83))). Es gibt viele einführende Bücher und Artikel, aber was ist zum Beispiel mit den folgenden Artikeln?

Unabhängig davon, ob Sie im Voraus selbst lernen möchten, ist es beim Schreiben von Arbeitscode besser, die Arbeitsumgebung anzuhören und sie an die Entwicklungsumgebung und die Java-Version anzupassen.

Versuchen Sie es einfacher

Wenn Sie nur mit Java-Code experimentieren möchten, ist es einfach und bequem, einen Onlinedienst zu verwenden.

Wenn Sie über eine Docker-Umgebung verfügen, können Sie diese auch ohne Installation der Java-Entwicklungsumgebung ausprobieren, indem Sie Docker Image einschließlich der Java-Umgebung ausführen. In diesem Jahr habe ich auch Docker-Lambda und VSCode + Codewind-Material (NodeJS, aber Java ist auch möglich) verwendet. Ich habe yamachan360 / items / 47fcdd3b1a116b7c2412) gepostet. Bitte lesen Sie es, wenn Sie interessiert sind.

Unterschied, der zum Punkt wird

Compilersprache

Java ist die Compilersprache und JavaScript ist die Skriptsprache. Dies ist sicherlich der Fall, aber ich denke, Sie müssen sich aus den folgenden Gründen nicht allzu viele Sorgen machen.

Im Fall von Java denke ich, dass das Wissen, dass eine Zwischendatei mit dem Namen * .class zur Laufzeit automatisch erstellt wird, ausreichend ist.

Mit neuerem Java können Sie * .java-Dateien unverändert ausführen (sie werden heimlich hinter den Kulissen kompiliert). Sie fragen sich also möglicherweise, ob es sich nicht mehr um eine Kompilierungssprache handelt? ist. Es ist in Ordnung, wenn Sie nur die folgende statische Typisierung verstehen können, die vom Ursprung der Kompilierungssprache abgeleitet ist.

Statische und dynamische Eingabe

Java ist eine ** statisch ** typisierte Sprache, im Gegensatz zu ** dynamischem ** JavaScript. Die Überprüfung des Typs ist streng. Wenn Sie ihn also nicht bewusst schreiben, werden Sie von häufigen Fehlern und Warnungen überrascht sein.

Erfahrene JavaScript-basierte Sprachen mit statischer Typisierung wie TypeScript können diesen Abschnitt überspringen.

Ich persönlich mag dynamisches Tippen, weil es einfacher zu schreiben ist. In Situationen, in denen Sie die Implementierung und das Testen nicht einfach wiederholen können, z. B. beim Verwalten von Code bei der Arbeit, scheinen statisch typisierte Sprachen daher einfacher zu sein.

Die folgenden Artikel werden empfohlen.

  • Java, C, C #, VB.net usw. sind "statisch typisiert"
  • JavaScript, Python, Ruby usw. werden "dynamisch eingegeben"

"Statisch" überprüft die Struktur beim Kompilieren. "Dynamisch" überprüft die Struktur zur Laufzeit.

Der Vorteil der statischen Eingabe besteht darin, dass Sie einen Kompilierungsfehler erhalten. Damit verbunden. Dies kann die Probleme, die Sie nur beim Ausführen sehen, erheblich reduzieren. Ich bin mit einem schlampigen System wie C nicht zufrieden, aber Java, Scala, OCaml, Haskell usw. sind sehr nützlich.

Es ist nicht notwendig, alle eingeführten Artikel zu verstehen, aber ich denke, man muss sie nur grob lesen und "Hmm" grob fühlen. Es wird unter der Annahme eingeführt, dass es nach dem Fortschreiten des Lernens erneut gelesen wird.

Objektorientierung

Auch in JavaScript [Objektorientiert](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF Das Konzept von% E3% 83% 88% E6% 8C% 87% E5% 90% 91) lautet is, Es ist kein wesentliches Wissen, und Sie können tatsächlich Code ohne viel Bewusstsein schreiben.

In Java hingegen ist die Objektorientierung ein grundlegender Bestandteil und hat einen komplexeren Mechanismus.

Derzeit scheint es gut, Vererbung, Schnittstelle als Eingang zu verstehen. Insbesondere die ** Schnittstelle ** ist etwas, das JavaScript nicht hat, und an einem ruhigen Ort wird dafür gesorgt.

Eine Schnittstelle definiert nur die Signaturen (Namen, Argumente, Rückgabetypen) der Methoden, die zum Erreichen einer bestimmten Funktion erforderlich sind. Es hat nicht die Verarbeitung selbst.

Einfach ausgedrückt, wird der Teil des Codes, der in der Klassendefinition ausgeführt wird, weggelassen. Mit anderen Worten, obwohl es die externen Spezifikationen der Klasse definiert, wird der tatsächliche Verarbeitungsinhalt nicht beschrieben. In der Sprache C entspricht es einer Header-Datei (* .h).

Darüber hinaus verfügt Java über ** abstrakte Klassen **, die sich irgendwo zwischen Klassen und Schnittstellen befinden, sodass es sich wie eine "teilweise codefreie" Klasse anfühlt.

Schnittstellen und abstrakte Klassen können nicht so verwendet werden, wie sie sind, und es ist erforderlich, eine Klasse zu erben (die Schnittstelle zu implementieren) und zu definieren, die den fehlenden Verarbeitungscode ergänzt. Es scheint schwer zu sagen, aber tatsächlich müssen Sie sich zuerst nicht zu viele Sorgen machen.

In Eclipse wird beispielsweise beim Erstellen einer neuen Klasse die automatische Generierung von Methoden standardmäßig wie unten gezeigt aktiviert. Wenn also eine Funktion (Methode) vorhanden ist, für die kein Code implementiert ist, erstellen Sie automatisch auch den Definitionsteil. Ich werde. Selbst wenn Sie es versehentlich löschen oder vergessen, es zu implementieren, erhalten Sie Warnungen und Fehler, sodass Sie es sofort erkennen können. image.png

Methodenüberladung

Beim Lesen von Java-Code können Sie verwirrt sein, welche Funktion (Methode) mit demselben Namen aufgerufen wird. Dies liegt an Methodenüberladung.

In Java können Sie auch mehrere Methoden definieren, die denselben Namen, aber unterschiedliche Argumenttypen und -sequenzen haben. Dies wird als Methodenüberladung bezeichnet.

Mit JavaScript können Sie einfach den Funktionsnamen überprüfen, um ihn zu finden. Wenn im Fall von Java mehrere Funktionen (Methoden) mit demselben Namen definiert sind, müssen Sie nach der suchen, die der Anzahl der Argumente und dem Typ (einschließlich der Vererbungsbeziehung) entspricht.

In einer integrierten Entwicklungsumgebung können Sie diesen Bereich überprüfen und zur Referenzquelle wechseln, sodass es nicht zu schwierig ist. In Eclipse können Sie beispielsweise beim Aufrufen einer Funktion F3 drücken, um zu dem Code zu gelangen, der sie definiert.

Zeichenfolgenvergleich

Das erste, worauf sich Java-Anfänger einlassen, ist der Fehler "Zeichencode-Vergleich". Die folgenden Beispiele sind berühmt.

	String str1 = "123";
	String str2 = "123";
	String str3 = "12" + "3";
	String str4 = "12";
	str4 += "3";

	System.out.println(str1 == str2); // true (1
	System.out.println(str1 == str3); // true (2
	System.out.println(str1 == str4); // false (3
	System.out.println(str1.equals(str4)); // true (4

In JavaScript ist die wiederholte Operation `` = einer Zeichenfolge ein Wertevergleich, sodass alle oben genannten Punkte zutreffen.

In Java ist "= falsch" im Grunde genommen ein Urteil über "dasselbe Objekt", und die Methode "gleich" wird zum Vergleichen von Werten verwendet.

Der schwierige Teil hier ist, dass (1 und (2) in vielen Umgebungen zu "true" führen können, was zu Fehlern führen kann. Dies ist der Effekt von Java-Optimierungen zur Kompilierungszeit.

In Java sind Zeichenfolgen unveränderlich und ihre Werte ändern sich während der Programmausführung nicht. Wenn es sich dann um eine Zeichenfolge mit demselben Wert wie "123" handelt, intern: "Oh, auch wenn Sie zwei nicht ernsthaft vorbereiten, sollten Sie eine vorbereiten und verwenden?" Wir werden optimieren (ausschneiden). Das Ergebnis (1 ist "wahr").

Noch modernere Java-Compiler sind klug genug zu glauben, dass Sie am Ende die Zeichenfolge "123" verwenden, wenn Ihr Code den Ausdruck "12" + "3" enthält. Es wird den Ausdruck ohne Erlaubnis durch das Ergebnis "123" ersetzen. Das Ergebnis ist also (2 ist aus dem gleichen Grund wie (1) auch "wahr".

Dieses Ergebnis ist das Ergebnis der Kompilierung mit Java8. Spätere Versionen des intelligenteren Java-Compilers können ebenfalls optimiert werden (3 als true w.

Vergessen Sie also nicht, die Funktion equals zu verwenden, um Werte in Java zu vergleichen!

Es ist auch ein Konzept in JavaScript, aber es ist eine gute Idee, vorerst die [Wrapper-Klasse] von Java (https://java-code.jp/category/wrapper) zu überprüfen.

Über die Spracherweiterung

Einige Leute haben vielleicht den Eindruck, dass die Java-Sprache alt und fossil ist. Java ist relativ aggressiv bei der Übernahme der neuesten Sprachspezifikationen und wird insbesondere zunehmend von JavaScript beeinflusst. Das Folgende beinhaltet persönliche Eindrücke.

JavaScript wird auch stark von Java beeinflusst, so dass es wie ein Kind von Java ist. Und Java hat nacheinander das Beste aus JavaScript implementiert. Seien Sie vorsichtig mit der Java-Version, da die Funktionen der Reihe nach hinzugefügt werden (siehe [Java-Versionsverlauf]) (https://ja.wikipedia.org/wiki/Java%E3%83%90%E3%83%]. BC% E3% 82% B8% E3% 83% A7% E3% 83% B3% E5% B1% A5% E6% AD% B4)

Java betont jedoch auch die Kompatibilität mit der Vergangenheit, und drastische Strukturreformen sind schwierig. Daher gibt es einige Teile, bei denen es sich um recht aggressive Implementierungen handelt. Es ist gut, nur die neuen Funktionen zu verwenden, aber es gibt einige Teile, die ziemlich esoterisch sind, wenn Sie in den Implementierungsteil eintreten. Selbst wenn Sie sich über die Details Gedanken machen, sollten Sie die Erkundung nach dem Fortschreiten des Lernens speichern. Es wird empfohlen.

Beispiel eines Implementierungsgeräts

Java hat auch Unbenannte Klasse, die beispielsweise wie folgt verwendet werden kann.

Test02


import java.util.*;

public class Test02 {
	public static void main(String[] args) {
		new Thread(new Runnable() { //Hier
			public void run(){
				System.out.print("Runnable.run");
			}
		}).start();
	}
}

Um die Kompatibilität mit der Vergangenheit zu gewährleisten, dh aufgrund einer unbekannten Ausführungsumgebung wie einer anonymen Klasse, wird die folgende Klassendatei beim Kompilieren automatisch generiert. Obwohl es im Code als anonyme Klasse beschrieben wird, erhält es intern einen Namen (diesmal Test02 $ 1). image.png

Abgesehen davon können Sie ab JavaSE 8 die neue Beschreibung Lambda-Ausdruck verwenden und mehr wie JavaScript schreiben.

Test02


	List<String> list = new ArrayList<>(Arrays.asList("aa", "bb"));
	list.replaceAll(str -> str.toUpperCase());
	System.out.println(list); // [AA, BB]

Noch ungewohnte Expansion

Wie oben erwähnt, wurde die Java-Sprache erweitert, aber es wird gesagt, dass sie noch nicht vertraut ist, und es gibt einige Elemente, die nur im Bereich der fortgeschrittenen Java-Entwicklung zu sehen sind.

Wie beim obigen Lambda-Ausdruck kann es sich seltsam anfühlen, wenn er in der Java-Sprache verwendet wird, selbst wenn er normal in JavaScript geschrieben ist. Auch wenn es aufgrund der Version verwendet werden kann. Lesen Sie den vorhandenen Code und bitten Sie Ihre leitenden Entwickler, ein Gefühl dafür zu bekommen. Betritt die Stadt und folge der Stadt.

Persönlich wird generics häufig normal verwendet, und ich denke, dass nur sehr alter Code nicht verwendet wird.

Ich bin der Meinung, dass Annotation weit verbreitet ist, aber ich habe das Gefühl, dass es noch wenige Beispiele für die Verwendung gibt, bis Sie Ihre eigene Annotation definieren.

Stream API ist ein Schreibstil, der häufig in JavaScript verwendet wird, aber ich bin der Meinung, dass er im Java-Code noch nicht aktiv verwendet wird. Nun, ich denke, dies ist eher ein Thema für das Bibliotheksdesign als eine Sprache ...

Bibliothek ist wichtig

Wie bei jeder Entwicklungssprache sind die Unterschiede zwischen den Sprachen nicht so groß, und diejenigen, deren Erlernen länger dauert, sind das Verständnis der Bibliothek und ihre gute Verwendung.

Java hat viele Standardbibliotheken. Lassen Sie uns zunächst auf die folgenden offiziellen API-Spezifikationen verweisen. Es ist jedoch schwierig, das Ganze zu lesen. Daher ist es eine gute Idee, die Details bei der Verwendung der Klasse zu überprüfen und Ihr Verständnis schrittweise zu erweitern.

java.lang ist die Standardbibliothek und wird von Anfang an automatisch ohne Konfiguration geladen. Wenn Sie es richtig lesen möchten, ist es zuerst von hier?

Für JavaScript kann NodeJS normalerweise die Funktionen finden, die Sie benötigen, indem Sie die npm-Site durchsuchen. Für Java ist es eine gute Idee, zuerst nach dem Maven Repository (https://mvnrepository.com/) zu suchen. Kompilierte Bibliotheksdateien (JAR-Dateien) für jede Version sind ebenfalls verfügbar.

Beachten Sie, dass NodeJS npm gleichzeitig heruntergeladen und konfiguriert wird. Bei Java müssen Sie jedoch vorsichtig sein, damit Sie es in der Java-Ausführungsumgebung finden können. Wenn Sie in der Befehlszeile ausgeführt werden, müssen Sie den Klassenpfad festlegen oder den Speicherort angeben, an dem Sie ihn mit der Option -cp oder -classpath platziert haben. Überprüfen Sie im Fall von Eclipse die Einstellung Java Build Path des Projekts und fügen Sie sie hinzu, falls sie nicht gefunden wird. image.png Einige berühmte Orte wie JUnit sind bereits in der Eclipse-Umgebung vorbereitet. Daher empfiehlt es sich, zuerst auf die Schaltfläche Bibliothek hinzufügen zu klicken. image.png

Lass uns anfangen zu lernen

Zuerst schrieb ich kurz die Punkte auf, die Anlass zur Sorge zu geben schienen. Beginnen Sie jetzt mit dem Erlernen von Java. Meine persönliche Empfehlung ist auch die Website Einführung in Java Code.

Wenn Sie neu in der Programmierung sind und ein ausführlicheres Einführungsbuch lesen möchten, Einführung in Java 3rd Edition Vielleicht gut.

Im Gegenteil, wenn Sie sicher sind, dass Sie nach dem Verständnis auf der oben genannten Website usw. mit den folgenden Büchern gemäß der Version studieren können, um Qualifikationen zu erwerben.

Enjoy!

Bisher habe ich zusammengefasst, was Sie wissen sollten, wenn Sie Java für erfahrene JavaScript-Benutzer lernen. Es wäre großartig, wenn die Schwelle zum Kennenlernen der Java-Sprache noch ein wenig gesenkt würde.

Im Gegenteil, es tut mir leid, wenn es verwirrend ist. Ich hoffe, Sie können den Text überspringen und auf die verschiedenen Links verweisen, die ich eingeführt habe!

Ich selbst habe Java-> JavaScript gelernt, daher denke ich, dass es viele Versehen gibt. Ich denke, dass die Beschreibung nicht ausreicht, aber ich möchte sie korrigieren und hinzufügen, wenn mir etwas aufgefallen ist.

Wir sehen uns wieder!

Recommended Posts

Hinweise zur Einführung für erfahrene JavaScript-Lernende von Java
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Kotlin-Generika für Java-Entwickler
Implementierung der Klonmethode für Java Record
Java Note
Liste der Download-Ziele für Oracle Java
Funktionen des Spring Frameworks für Java-Entwickler
Zusammenfassung der Java-Umgebungseinstellungen für mich [mac]
Lesen Sie den Hinweis zur Dateikopie von Java 1.7 oder höher
Eine Sammlung einfacher Fragen für Java-Anfänger
[Einführung in Java] Grundlagen der Java-Arithmetik (für Anfänger)
So geben Sie den JavaScript-Index für die Anweisung an
Für JAVA-Lernen (2018-03-16-01)
Java Generics (Hinweise)
[Java] Array-Hinweis
2017 IDE für Java
Java und JavaScript
[Java] Studiennotizen
Hinweise zur Java-Serialisierung
[Java] Übersicht über Java
Java für Anweisung
Rufen Sie eine Liste mit MBean-Informationen für Java-Anwendungen ab
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda
Einführung in Java für Anfänger Grundkenntnisse der Java-Sprache ①
Java Häufig verwendete Anweisungsliste (für Anfänger und Anfänger)
Links für jede Version (japanische Version) der Java SE-API
Ausführen des WebCamCapture-Beispiels von NyARToolkit für Java
Zusammenfassung der Methoden zum Lesen von Dateien für jedes Java-Dateiformat