In diesem Artikel werde ich als zweiten Tag des Java-Adventskalenders 2018 für Programmierer, die noch nie Java verwendet haben, eine Java-Entwicklungsumgebung vorstellen, die ich ab diesem Zeitpunkt starten sollte, und außerdem sagen, dass "Java verwendet werden kann". Ich möchte Einstellungen vornehmen, damit der Compiler und die statischen Analysetools mich schelten, bis ich das Niveau erreicht habe, das ich denke.
Dieser Artikel wird nicht für diejenigen empfohlen, die neu in der Programmierung und neu in Java sind. Es ist für Leute, die andere Programmiersprachen verwenden und Java irgendwie verstehen können.
Wenn Sie eine erfahrene Person sind, denke ich, dass jeder das Gefühl hat, dass meine Umgebung besser ist. Bitte stellen Sie sie vor. Obwohl es sich um einen Artikel Ende 2018 handelt, hat sich die Grundzusammensetzung in den letzten Jahren nicht wesentlich geändert. Ich frage mich, ob Facebook Infer oder Checker Framework alltäglich werden ...
Um Java zu schreiben, setzen Sie Eclipse, eine japanische Version des Pakets Pleiades All in One.
Das Schreiben von Java mit einem vertrauten Editor wie Vim oder Emacs ist ** unvernünftig **. eclim ist ein wenig verrückt ~~ Es gibt auch eine fortgeschrittene Fähigkeit, aber da der Inhalt Eclipse ist, ist es der nächste Schritt, nachdem Sie mit Eclipse schreiben können. .. Andere Editoren sind ebenfalls nutzlos. Ich sage dir die Wahrheit, Java ist eine ** IDE-Sprache **. Möchten Sie eine visuelle Programmiersprache in einem Texteditor schreiben? Sie bearbeiten es mit einem visuellen Editor. Ebenso dient die IDE-Sprache zur Bearbeitung in der IDE.
Was ist mit anderen IDEs als Eclipse? Wenn Sie einen Artikel wie diesen auf Japanisch lesen, ist Pleiades All in One Ihre Wahl. Ein häufiger Fehler besteht darin, Englisch zu verstehen, Englisch zu lernen oder zu denken, dass Englisch informativer ist, und in ein Feld zu stürzen, das Sie in einer Sprache, in der Sie nicht gut sind, nicht richtig kennen.
Java hat einen Java-Begriff. (Obwohl ich mir dessen normalerweise nicht bewusst bin, denke ich, dass die meisten Sprachen eindeutige Begriffe oder Begriffe haben, die für die Domäne spezifisch sind, an der sie sich orientieren.) Wenn Sie nicht wissen, ob Sie die Funktionen der IDE nicht verstehen können, weil sie auf Englisch oder Java ist, können Sie sie nicht nachschlagen. Solche Wörter geben es oft auf, schnell verstanden zu werden, und sind daher nützliche Funktionen, die noch nie verwendet wurden. Wenn Ihnen niemand genau sagen kann, sollte die Benutzeroberfläche nativ sein, zumindest bis Sie den Dreh raus haben.
Natürlich kann IntelliJ (sogar CE) auch mit Plejaden [japanisiert] werden (https://pleiades.io/pages/pleiades_jetbrains_manual.html), aber Japanisierung ist nicht sehr verbreitet und für fortgeschrittene Benutzer. ist. Es gibt auch NetBeans und VSCode, aber Sie können sie vorerst vergessen. Es geht nicht um Gut oder Böse, es ist einfach nicht für diesen Zweck geeignet.
Für Plejaden All in One gibt es mehrere Typen. Zögern Sie nicht, die Vollversion von ** für Java ** erneut herunterzuladen.
Haben Sie sich für Ultimate entschieden, weil Sie sich auch für andere Sprachen interessieren? Es ist ein Misserfolg. Eclise ist eine tiefgreifende IDE. Ultimativ macht es noch tiefer. Ich weiß nicht, wie ich die Sprachumgebung wechseln soll, also ist es Sekiyama.
Haben Sie sich für Platform entschieden, weil Sie es selbst einstellen möchten? Gras beim Scheitern. Ich bin es nicht gewohnt, eine Sonnenfinsternis zu machen, aber ich kann sie nicht einstellen.
Wenn Sie Eclipse für eine andere Sprache bereits installiert haben, zögern Sie nicht, die neueste Version für Java zu löschen.
eclipse ist eine Plugin-reiche IDE, aber die Tatsache, dass es reich an Plugins ist und dass mehrere Plugins zusammenarbeiten und funktionieren, ist eine ganz andere Geschichte. Viele der Fehlerursachen bei Eclipse sind, dass Sie Stecker in alles stecken können und die Stecker inkonsistent sind oder einige Stecker einen schwerwiegenden Fehler verursachen und Eclipse nicht startet. ist.
Sie sollten eine validierte stabile Umgebung verwenden, bis Sie dies verstanden haben.
Die Ersteinrichtung erfolgt nach der Installation.
~~ Keine Menschenrechte ~~ Es ist bedauerlich, Eclipse auf einer Maschine mit wenig Speicher zu starten, aber es ist eine seltene und weit verbreitete Geschichte. Ich möchte einzelne Tuning usw. von diesem Artikel ausschließen, aber wenn Sie sich Gedanken über die 32-Bit-Version oder den 32-Bit-Speicher machen, ist es eine gute Idee, die folgenden zwei Zeilen am Ende von "eclipse.ini" hinzuzufügen.
eclipse.ini(Auszug)
-Xms1G
-Xmx1G
Das Tolle (und selten eine Falle) an der Java-Umgebung von eclipse ist, dass es einen Java-Compiler für Eclipse namens ** Eclipse Compiler für Java (ecj) ** enthält. IntelliJ, das nur das JDK verwendet, kann etwas Ähnliches tun, also nicht, weil es jetzt ecj gibt, aber trotzdem kann ecj seine eigene Warnung setzen und die statische Analysefunktion selbst realisieren. tun. Es ist jedoch standardmäßig süß, ändern Sie es also auf die volle Leistungseinstellung. Obwohl ich mein Bestes geben werde, seien wir gewarnt.
Öffnen Sie die Einstellungen.
Schauen wir uns die Einstellungen für jedes Element einzeln an.
Obwohl es als Stil bezeichnet wird, ist es im Allgemeinen eine allgemeine Regel, daher mache ich es normalerweise zu einer ** Warnung . " Nicht externalisierte Zeichenfolge " ist eine Option, die für viele nicht relevant ist und ignoriert werden kann. Wenn der Stil geteilt ist, wäre es " Zugriff auf unzugängliche Mitglieder des umschließenden Typs " oder " Parameterzuweisung **"? Ersteres ist, wenn Sie eine Klasse in der Klasse erstellen, sodass Sie sich wahrscheinlich eine Weile nicht darum kümmern müssen. Letzteres ist eine Option, die keine Zuordnung zu Argumenten zulässt.
"* Boxing- und Unboxing-Konvertierung " " Aufzählung unvollständiger Schalter " " 'Standardfall fehlender Schalter' " " serialisierbare Klasse ohne serialVersionUID *" ist bestenfalls * * Information ** ist in Ordnung, aber alles andere ist nützlich, also mach es ** Warnung **.
Dies dient dazu, Fehler zu vermeiden, da es aufgrund der Abdeckung von Variablennamen leicht ist, Fehler zu machen. Eigentlich ist es unwahrscheinlich, dass die Referenzhilfe Fehler in der IDE macht, aber machen wir es ** Warnung **.
"** Annotationsbasierte Nullanalyse aktivieren **" ist schwierig zu verwenden, daher ist es eine gute Idee, sie zu deaktivieren. Andere sind natürlich die besten.
Ich denke, Sie mögen die Formatierungseinstellungen selbst, aber die Standardeinstellungen tun nichts für Kommentare im Javadoc-Stil, und die Kommentare werden normalerweise schmutzig. Lassen Sie uns das also alleine einstellen.
"** Javadoc-Kommentarformat aktivieren " " Blockkommentarformat aktivieren " " Header-Kommentarformat aktivieren **" ist wichtig ist.
Persönlich denke ich, dass das beste Merkmal von Eclipse diese Speicheraktion ist. Wenn Sie die Datei speichern, wird sie nicht nur formatiert, sondern auch der Code bereinigt. Wenn Ihr Projekt keine strengen Regeln hat, müssen Sie vorsichtig sein, denn wenn Sie den von einer anderen Person geschriebenen Quellcode bearbeiten, wird er automatisch in den nicht verwandten Teil geändert, aber aktivieren Sie ihn immer für Ihr eigenes Schreiben. Sollte verlassen werden.
Sie sollten alle Funktionen verwenden. Lassen Sie uns auch zusätzliche Aktionen festlegen.
Es kann hier Unterschiede in den Einstellungen, Codierungsstandards und Entwicklungsstilen geben, aber ich werde meine Einstellungen vorerst erläutern. Wenn Sie die Speicheraktion zu streng gestalten, wird der von Ihnen erstellte Code bereinigt. Stellen Sie daher ein gutes Gefühl ein.
Lassen Sie uns den Formatierer vorerst aktivieren. Es mag einfacher sein, die Mitglieder in ABC-Reihenfolge sortiert zu sehen, aber es ist eine gute Idee, sie beim Bearbeiten nicht zu sortieren, da dies ziemlich verwirrend sein kann.
this.
hinzu, um auf Feldvariablen zuzugreifen. Es ist nicht unmöglich, auch mit der Färbung der IDE zu unterscheiden, aber es ist eine überraschend dankbare Funktion, die leicht von lokalen Variablen zu unterscheiden ist.Ich denke, es ist in jeder Szene am nützlichsten, aber es ist standardmäßig aktiviert.
Bereinigen ist wie das Ausschneiden einer separaten Speicheraktion. Sie können fast das Gleiche wie beim Speichern tun. Aktivieren Sie daher Funktionen, mit denen Sie normalerweise nicht arbeiten möchten, z. B. "Nicht verwendete lokale Variablen entfernen", und bereinigen Sie sie, wenn die Implementierung abgeschlossen ist. Sie können es richtig verwenden, indem Sie es betrachten.
Nachdem die Einstellungen abgeschlossen sind, beginnen wir mit der Erstellung.
Die heutigen Hauptsprachen verfügen über Software-Repositorys für Bibliotheken und Tools, die mit Abhängigkeiten von Paketverwaltungstools wie npm und pip auf einmal installiert werden können. Natürlich ist es auch in Java. In Java ist Maven das Äquivalent. Entsprechend wird heutzutage als Versprechen alter Java-Projekte das Gradle mit groovigen Konfigurationsdateien bevorzugt, da die Konfigurationsdatei XML ist. gradle ist ein Build-Tool, das Abhängigkeiten mithilfe des Maven-Repositorys auflösen kann.
Pleiades All in One enthält bereits den Gradle Plug ** Buildship **, sodass Sie ihn sofort verwenden können. Wenn Sie es von nun an in Java machen wollen, sollten Sie es trotzdem als Gradle-Projekt machen. Obwohl es sich um ein Build-Tool handelt, muss es nicht unbedingt mit Gradle erstellt werden können, und es ist äußerst nützlich, nur weil es als Bibliotheksinstallationsprogramm fungiert.
Öffnen Sie nach dem Erstellen das build.gradle des Projekts. Der größte Unterschied zwischen Maven-Repositorys und npm-Repositorys und Pip-Repositorys besteht darin, dass es mehrere bekannte Repositorys gibt. Es ist üblich, eigene Repositorys zu haben oder Repositorys projektweise einzurichten. Es gibt zwei sehr berühmte öffentliche Repositories, maven central und jcenter. Es ist ein Ärger, also ist es eine gute Idee, beide einzustellen. Einige Bibliotheken befinden sich normalerweise auf beiden Seiten.
build.gradle
apply plugin: 'java-library'
repositories {
jcenter()
mavenCentral()
}
dependencies {
//Die abhängigen Bibliotheken werden wie folgt angegeben:
//Der Wert, der standardmäßig von buildship generiert wird, ist nur ein Beispiel.
api 'org.apache.commons:commons-math3:3.6.1'
implementation 'com.google.guava:guava:23.0'
testImplementation 'junit:junit:4.12'
}
Der Name der Bibliothek (genannt ** Artefakt **) im Maven-Repository besteht aus der Gruppen-ID und der Artefakt-ID. Beispielsweise wird eine Bibliothek namens Guave, die üblicherweise in Java verwendet wird, zur Artefakt-ID "Guave" der Gruppen-ID "com.google.guava". Grob gesagt kann man sich einen Bibliotheksnamen vorstellen, der im Allgemeinen länger ist als in anderen Sprachen.
In IDEs wie Eclipse ist die Fertigstellung von größter Bedeutung. Die Vervollständigungsfunktion erweitert nicht nur den Variablennamen, sondern ermöglicht es Ihnen auch, den Typ anzugeben und eine Importanweisung zu schreiben oder eine Hauptmethode zu generieren. (Normalerweise ist der Import nicht handgeschrieben)
Hauptgeneration
Was den meisten Java-Quellcode zwischen der Veröffentlichung von Java 6 vor 10 Jahren und jetzt geändert hat, ist lombok und nicht das Upgrade der Sprachspezifikation. Ist eine große Sache, die alltäglich geworden ist.
In den alten Tagen wurden Java-ähnliche Getter / Setter und toString ()
/ hashCode ()
/ equals ()
durch Eclipse und Tools generiert. Wenn Sie nun eine Anmerkung schreiben und lombok zur Kompilierungszeit in den Compiler integrieren, generiert lombok diese zur Kompilierungszeit heimlich. Sie müssen sich nicht mit dem von Menschen generierten Code befassen, damit Sie Ihren Quellcode sauber halten können.
Da es von Anfang an in Pleiades All in One integriert ist, können Sie es sofort verwenden, indem Sie die Bibliothek in die Abhängigkeit integrieren, damit sie im Projekt verwendet werden kann.
build.gradle
apply plugin: 'java-library'
repositories {
jcenter()
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.+'
}
Example.java
public class Example {
private String familyName;
private String lastName;
public String getFamilyName() {
return familyName;
}
public String getLastName() {
return lastName;
}
public void setFamilyName(String familyName) {
this.familyName = familyName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public boolean equals(Object o) {
...
}
public int hashCode() {
...
}
public String toString() {
...
}
}
Example.java
@Data
public class Example {
private String familyName;
private String lastName;
}
Dies ist der gleiche Code.
Es sieht aus wie schwarze Magie, ist aber eine legitime Erweiterung der Java-Compilerspezifikation. Es ist nur ein Codegenerator, sodass zur Laufzeit keine Strafe anfällt. (In den meisten Fällen wird Lombok zur Laufzeit nicht benötigt.)
Weitere Informationen finden Sie unter Lombok-Funktionen. Durch Vergleichen des Codes vor und nach der Generierung können Sie leicht erkennen, was passiert.
SpotBugs, früher bekannt als FindBugs, ist das standardmäßige statische Analysetool von Java. (Um genau zu sein, es wurde gegabelt, weil FindBugs es gegessen hat) SpotBugs können Nullprüfungen, Ressourcenlecks, Fehler bei der API-Fehlerprüfung und mehr erkennen. SpotBugs / FindBugs können standardmäßig unter vielen statischen Java-Analysetools verwendet werden, da sie nur die allgemeine Theorie in Java erkennen und sich in der Position von Eslint von JavaScript und PEP8 (Checker) von Python befinden. ..
Dies ist auch in Pleiades All in One enthalten, sodass Sie es zum Zeitpunkt des Schreibens des Programms in gewissem Umfang verwenden können.
Es gibt (nicht) Java bei Ihnen, Java und null, aber etwas, das null sein kann, wird schließlich null sein. Sowohl ecj als auch SpotBugs ermöglichen es Ihnen, einfache Nullprüfungen durchzuführen. Beide basieren jedoch auf einfachen Analysen und erfassen nicht die Absicht oder den komplexen Code des Programms (es wird immer komplexer). Durch die Verwendung einer Bibliothek namens JSR305, die der Spezifikation entspricht, die nicht zum Java-Standard geworden ist, kann mit Anmerkungen angegeben werden, ob eine Variable null werden kann oder nicht. Natürlich handelt es sich um eine Anmerkung, sodass kein Kompilierungsfehler verursacht wird. (Ecj kann Fehler machen, aber ich empfehle es nicht.) SpotBugs unterstützt jedoch JSR305, sodass Sie Absichten mit Nullprüfungen mischen können. Außerdem kann "@ CheckReturnValue" gezwungen werden, den Rückgabewert "@ Immutable" zu verwenden, um anzuzeigen, dass es unveränderlich ist, "@ NotThreadSafe", um anzuzeigen, dass die Ressource geschlossen ist, und "@ WillClose", um anzuzeigen, dass die Ressource geschlossen wird. Zusätzlich zur Nullprüfung werden nützliche Anmerkungen bereitgestellt.
build.gradle
apply plugin: 'java-library'
repositories {
jcenter()
mavenCentral()
}
dependencies {
compile 'com.google.code.findbugs:jsr305:3.0.+'
//Möglicherweise benötigen Sie auch die Spotbus-Anmerkung, wenn Sie sich daran gewöhnt haben
// compile 'com.github.spotbugs:spotbugs-annotations:3.1.+'
compileOnly 'org.projectlombok:lombok:1.18.+'
}
Wenn es JSR305 gibt
//Es macht keinen Sinn, eine Methode aufzurufen, die keinen Rückgabewert verwendet
@CheckReturnValue
public String getLastName() { ... }
//Es kann null sein, daher müssen Sie den Rückgabewert überprüfen
@CheckForNull
public String getFamilyName() { ... }
...
public void test() {
getLastName(); //Spot Bugs werden wütend, weil ich den Rückgabewert nicht verwende
String f = getFamilyName();
String t = f.substr(0); //Spot Bugs werden wütend, weil ich nicht auf Null geprüft habe
}
Wenn Sie sich daran gewöhnen (oder der Code klein ist), sagt SpotBugs nicht viel. Stellen Sie in einem solchen Fall so ein, dass auch kleinere Probleme in allen Kategorien gemeldet werden können.
Übrigens ist "** Mindestrang für Bericht **" die Einstellung am rechten Ende des Balkens, wobei 20 am häufigsten gemeldet wird. Bitte beachten Sie, dass dies nicht das Gegenteil ist.
Außerdem können SpotBugs die Erkennungsfunktion mit einem Plug-In (z. B. fb-Contrib) verbessern, sodass Sie dies möglicherweise in Betracht ziehen.
Sie sollten nun in der Lage sein, Ihre Umgebung einzurichten und mit der Entwicklung zu beginnen. Ich werde die spezifische Implementierung mit dem Framework in diesem Artikel nicht behandeln, aber ich werde kurz vorstellen, was Sie wissen müssen.
Javadoc Ich glaube, ich schreibe heutzutage xxxDoc in einer beliebigen Sprache, aber vergiss Javadoc nicht. Wenn Sie in Eclipse "/ **" eingeben und vor der Methode die Eingabetaste drücken, wird eine Vorlage generiert, die ziemlich gut aussieht. Wenn Sie den Rest der Code-Vervollständigung überlassen, sollten Sie in der Lage sein, ein Minimum an Javadoc so zu schreiben, wie es ist.
public class Library {
/** //← Wird nur durch Eingabe hier generiert
*
* @param t
* @return
*/
public boolean someLibraryMethod(int t) {
return true;
}
}
Vervollständigen wir den Code, um zu sehen, welche Art von Tags es gibt.
Mit Ausnahme der Behandlung von Tabulatoren / Einrückungen lautet das Standardformat in Java Google Java Style Guide (Kopffamilie) | [(inoffizielle japanische Übersetzung)]( Ich denke, es ist eine gute Idee, https://kazurof.github.io/GoogleJavaStyle-ja/) genau zu lesen.
Ich denke, es ist eher schwarze Magie als Lombok, aber Reflexion ist die grundlegende Technologie, die hier und da in Frameworks und Bibliotheken verwendet wird. Die meisten modernen Sprachen können dies, daher sollte es leicht zu akzeptieren sein. In Java gibt es jedoch einige problematische Situationen, in denen die Implementierungsstufe der Reflexion je nach Bibliothek unterschiedlich ist.
Anmerkungen werden zunehmend zur Unterstützung der Reflexion verwendet. Lassen Sie sich also nicht von der Tatsache täuschen, dass die Anmerkung selbst wie ein komplexer Code aussieht und alarmierend sein kann, aber die Anmerkung selbst ist nur eine Bezeichnung.
Example.java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
public class Example {
private String familyName;
private String lastName;
public static void main(final String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Example e = new Example();
e.familyName = "Nachname";
e.lastName = "Name";
System.out.println(mapper.writeValueAsString(values));
// {"familyName":"Nachname","lastName":"Name"}
}
}
Jackson ist eine ziemlich de facto Standardbibliothek für die Arbeit mit JSON in Java und bietet eine hervorragende Möglichkeit, die Reflexion zu verstehen.
Versuchen Sie es mit Jackson-Annotationen. https://github.com/FasterXML/jackson-annotations
Das Schreiben von Java in einem Notizblock an der Universität und im Trauma ist eine Geschichte über Java, aber es ist auch ein Versprechen, dass das Java, das es dort gelernt hat, in der Java 2-Ära sein wird.
Selbst wenn Sie nicht viel über Java wissen, wissen Sie vielleicht, dass es in Java 8 relativ große Änderungen gab, wenn Sie ein wenig recherchieren. Das Java 8 wurde im März 2014 vor mehr als vier Jahren veröffentlicht. Natürlich sind es nur vier Jahre von Javas mehr als 22-jähriger Geschichte, aber wenn Sie jetzt anfangen, sollten Sie zumindest hier anfangen. Effektives Java ist jetzt Java 9-kompatibel.
Aufgrund der Geschichte von Java sind Java-Applets und überlebende (und nicht aktualisierbare) Personen und Informationen im i-Modus leider häufig in Orten wie Online-Programmierkursen und Schulen zu finden. Das mag in Bezug auf das Erlernen der Programmierung in Ordnung sein, ist jedoch in Bezug auf das Erlernen von Java schädlich.
Wenn Sie Code wie den folgenden sehen, schließen Sie ihn.
Die Leute, die diese Art von Code schreiben, sind Java SE 1.5 und früher, daher sind sie nicht mehr alt. Die Landschaft ist heutzutage zwischen Java und Java heute ganz anders. Vielmehr sollten Sie zu diesem Zeitpunkt die Java-Kenntnisse vergessen.
Seien Sie ein wenig vorsichtig mit Code wie diesem:
java.time.XXXX
wie jp / 8 / docs / api / java / time / LocalDateTime.html) Ich benutze docs / api / java / util / Date.html) und Joda-TimeEin solcher Code könnte in der Java 6/7-Ära sein. Es sollte nicht völlig nutzlos sein, aber Sie können nicht erwarten, dass viel von der Lambda-Formel profitiert.
JVM Die Schwierigkeit, von nicht lebenden Personen im JVM-Ökosystem mit Java zu beginnen, oder die Höhe des Java-Schwellenwerts ist ein Problem, da keine Kenntnisse über JVM und nicht über Java und moderne virtuelle Prozessmaschinen anstelle von JVM vorliegen. Ich denke, das bedeutet es. Wenn über JVM gesprochen wird, wird oft gesagt, dass es natürlich ist, über Generations-GC Bescheid zu wissen. Was ist GC überhaupt, abhängig von der Sprache, die Sie bisher verwendet haben?
Die meisten Leute wollen nur Java verwenden und nicht separat über JVM sprechen, aber JVM muss entscheiden, wie viel Speicher zum Startzeitpunkt verfügbar ist, und abhängig davon die Welt stoppen, ein Phänomen, das nicht separat geschrien werden muss. Tritt auf, daher gibt es häufig Situationen, die Sie kennen müssen.
Vorerst ist es besser zu verfolgen, welche Funktionsoptionen in der Befehlszeile verfügbar sind.
shell
java -XX:+PrintFlagsFinal -version
Effective Java Dies ist ein Buch, das man unbedingt lesen muss. Lesen wir es, wenn Sie bis zu einem gewissen Grad Java schreiben können. Die dritte Ausgabe der japanischen Version wurde im Oktober veröffentlicht.
https://www.maruzen-publishing.co.jp/item/b303054.html
Ende
Recommended Posts