好事多磨什么意思| 吃什么水果降火| 吃什么提高代谢| 突然低血压是什么原因造成的| 脚背有痣代表什么| 缺锌吃什么食物| 自来卷的头发适合什么发型| 推什么出什么| 怀孕血压高对胎儿有什么影响| 圆脸适合什么眼镜| 血清和血浆有什么区别| 两侧肋骨疼是什么原因| 梦见大水是什么意思| 什么是处方药和非处方药| 葡萄胎是什么意思| 搓是什么意思| 尿结石是什么症状| 蚊子咬了为什么会痒| 蓝牙耳机什么牌子好| 主动脉瓣退行性变是什么意思| 神经是什么意思| 去医院看肛门挂什么科| 氯雷他定片主治什么病| 左手食指麻木是什么原因引起的| 1993属什么| 什么龙| 天行健下一句是什么| 凯乐石属于什么档次| 4月25号是什么星座| 弥勒佛为什么是未来佛| 女生补肾吃什么| 张什么结什么| 晚上血压高是什么原因| 梦到吃蛇肉预示着什么| 眼睛浮肿是什么原因| 霜降出什么生肖| 女人右眼皮跳是什么预兆| 鸟字旁有什么字| 男性尿道口流脓吃什么药最管用| 宫颈筛查是什么意思| 左手中指戴戒指什么意思| po是什么| 女生男相的是什么命| 不懂事是什么意思| 唐山大地震是什么时候| 花儿为什么那么红| 牙龈发炎吃什么消炎药| 黄子韬爸爸是干什么的| 缓解是什么意思| 枕头什么牌子好| 抗酸杆菌是什么| 甲状腺手术后有什么后遗症| 为什么耳鸣| 妊娠纹什么时候开始长| 后背疼是什么病| 滇是什么意思| 僵尸是什么意思| 白芷泡水喝有什么功效| 9月19号什么星座| 玺是什么意思| 附属医院是什么意思| 6月20是什么星座| 夏天可以种什么花| 编者按是什么意思| 软水是什么水| 女性什么时候退休| 恐惧感是什么意思| 化疗恶心吃什么可以缓解| 两个马念什么| 世界大同是什么意思| cap是什么| 自锁是什么意思| 炼奶是什么| 便秘吃什么快速通便| 什么泡水喝可降血压| 恶露是什么样子的图片| 钙化淋巴结是什么意思| 腿膝盖疼是什么原因| 月经调理吃什么好| 天秤座的幸运色是什么| 手指长倒刺是什么原因| 牙齿上有黄斑是什么原因| 什么味道| 园字五行属什么| 猪头三是什么意思| 孕妇肠胃炎能吃什么药| 孕妇吃什么鱼| 什么情况下吃救心丸| 儿童拉肚子吃什么药| 卉字五行属什么| 三八妇女节送什么好| 胆固醇高不能吃什么| 封印是什么意思| 轻如鸿毛是什么意思| std是什么| 包皮溃烂是什么原因| 减肥吃什么食物瘦得快| 聚乙烯醇是什么材料| da是什么单位| 做爱为什么舒服| 喝水就打嗝是什么原因| 澳门有什么特产| 清汤寡水是什么意思| 月经正常颜色是什么色| 关节间隙变窄什么意思| 身份证上的数字是什么字体| 七夕节吃什么| 今天过生日是什么星座| 阑尾炎能吃什么水果| 尿比重1.030是什么意思| 颈椎属于什么科室| 双肾尿盐结晶是什么意思| mb是什么| 瞳孔缩小见于什么病| 鹿角有什么功效和作用| 胃炎伴糜烂是什么意思| 责成是什么意思| 左下腹疼痛是什么原因| 橄榄菜长什么样子图片| 为什么吃辣的就拉肚子| 什么万| 梦见把蛇打死了是什么意思| 为什么家里会有隐翅虫| 热伤风感冒吃什么药好| 什么影院| 己未五行属什么| 为什么想到一个人会心痛| 心脏传导阻滞是什么意思| 3月20号是什么星座| 异地办理临时身份证需要什么材料| 铜钱草能治什么病| 减肥期间可以吃什么水果| 乙肝病毒表面抗原阳性是什么意思| 甲状腺tsh高说明什么| 乳房长斑点是什么原因| 痰多是什么问题| 婴儿腹泻吃什么好| 唐僧是什么生肖| 阴唇痒用什么药| 喜欢吃酸的是什么原因| 左腿发麻是什么病征兆| 特发性震颤是什么病| 欺凌是什么意思| 一个虫一个冉读什么| 排尿困难是什么原因| 法国的国花是什么花| 先考是什么意思| 势利眼是什么意思| 早泄是什么症状| 什么是粗粮食物有哪些| 月经流的是什么血| kb是什么意思| 湉是什么意思| 春是什么生肖| 不期而遇什么意思| 什么是芝士| 血压高有什么表现| 屈光不正是什么意思| 男外科都检查什么| 红薯用什么繁殖| 六月十一是什么日子| 什么食物降尿酸效果好| 嬴政姓什么| 什么水果可以减肥刮油脂| 啤酒加生鸡蛋一起喝有什么效果| 什么水晶招财| 真命题是什么意思| 左心室高电压是什么意思| 下面长痘痘是什么原因| 正部级是什么级别| 医院按摩挂什么科| 流鼻血是什么病| 肚脐右边疼是什么原因| 附件炎吃什么药好| 来月经期间吃什么最好| 小孩子眼睛眨得很频繁是什么原因| 女人更年期有什么症状| 荷叶配什么减肥效果好| 真命天子是什么生肖| 氧化钙是什么| 6是什么意思网络语言| 碘酊和碘伏有什么区别| 什么水果是凉性的| 对等是什么意思| 渗透压是什么意思| 什么气什么现| 脂溢性脱发吃什么药| 腺瘤样增生是什么意思| 异地补办身份证需要什么手续| 右下眼皮跳是什么预兆| dpd是什么意思| 急性支气管炎吃什么药| 婴儿足底采血查什么| 孤家寡人什么意思| 冰酒是什么酒| 摩卡是什么意思| 手掌发热是什么原因| 什么是共情| 湿气重的人吃什么好| 身上老是痒是什么原因| 米娜桑是什么意思| 儿童流鼻血挂什么科| 一直拉肚子吃什么药| 卵泡是什么意思| 白细胞介素是什么| 男性泌尿道感染吃什么药| 建军节是什么时候| 足跟痛吃什么药| 新生儿贫血是什么原因造成的| 检查淋巴挂什么科| 份子钱是什么意思| 钢铁侠叫什么名字| 宇宙的外面是什么| 血脂高有什么危害| 额头长闭口是什么原因| 五月份是什么季节| 金属过敏用什么药膏| 补钙吃什么好| 肠炎吃什么药好的快| 桔梗是什么东西| 香菜什么时候种最合适| 一个三点水一个令念什么| 橡皮擦是什么材料做的| 塔利班是什么| 乳房痒是什么原因| 黄体酮有什么副作用| 一什么沙发| 右肺下叶纤维化灶是什么意思| 农历六月十三是什么星座| imax电影是什么意思| 打呼噜吃什么药最管用| 钠高是什么原因| 喝绿豆汤有什么好处| 甲是什么生肖| 老年人打嗝不止是什么原因| 两女一杯是什么| 嘴唇红肿是什么原因| 脂肪肝吃什么最好| 上海副市长什么级别| charging是什么意思| 胆囊壁固醇沉积是什么意思| 晚上尿多是什么原因| 脚酸是什么原因引起的| 时过境迁是什么意思| 阿莫西林和头孢有什么区别| 快递客服主要做什么| 什么叫传统文化| 月青念什么| 梦见栽花是什么意思| 71年属什么生肖| 双子男和什么星座最配| 五郎属什么生肖| 最早的春联是写在什么上面的| 艾滋病有什么特征| 什么是脂溢性脱发| 疣是什么东西| 公务员和事业编有什么区别| 银耳不能和什么一起吃| 容易被吓到是什么原因| 为什么不来大姨妈也没有怀孕| a2是什么材质| 上火喝什么药| 三月份有什么节日| 少阳病是什么意思| 百度Zum Inhalt springen

2017湖南醴陵市普通高校应届毕业生招聘教师体检合格

aus Wikipedia, der freien Enzyklop?die
Java
Logo
Logo
Basisdaten
Paradigmen: Objektorientierte Programmiersprache
Erscheinungsjahr: 1995
Designer: James Gosling, Sun Microsystems
Entwickler: Sun Microsystems, Oracle[1], James Gosling
Aktuelle Version Java SE 24[2][3] (18. M?rz 2025)
Typisierung: stark, statisch
Beeinflusst von: C++, C, Ada, Simula-67, Smalltalk, Objective-C, Object Pascal, Oberon, Eiffel, Modula-3, Mesa (Programmiersprache), Simula, C#, UCSD Pascal
Beeinflusste: Groovy, Clojure, C#, Scala, Vala, ActionScript, Seed7, Kotlin, JavaScript
Betriebssystem: plattformunabh?ngig
Lizenz: GNU General Public License[4]
www.oracle.com/java/
百度 ”江苏快鹿南京分公司经理刘华主管班线业务和车辆,他对记者说,“沪宁线以往是30-40分钟发一趟车,现在是2小时发一趟,乘客还很少,上座率已经下滑到30%。

Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems, welches 2010 von Oracle übernommen wurde. Die Programmiersprache ist ein Bestandteil der Java-Technologie – diese besteht grunds?tzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Java-Programmen und der Java-Laufzeitumgebung (JRE) zu deren Ausführung. Die Laufzeitumgebung selbst umfasst die virtuelle Maschine (JVM) und die mitgelieferten Bibliotheken. Java als Programmiersprache sollte nicht mit der Java-Technologie gleichgesetzt werden; Java-Laufzeitumgebungen führen Bytecode aus, der sowohl aus der Programmiersprache Java als auch aus anderen Programmiersprachen wie Groovy, Kotlin und Scala kompiliert werden kann. Im Prinzip k?nnte jede Programmiersprache als Grundlage für Java-Bytecode genutzt werden, für die meisten existieren aber keine passenden Bytecode-Compiler.

Die Programmiersprache Java dient innerhalb der Java-Technologie vor allem zum Formulieren von Programmen. Diese liegen zun?chst als reiner, menschenverst?ndlicher Text vor, dem sogenannten Quellcode. Dieser Quellcode ist nicht direkt ausführbar; erst der Java-Compiler, der Teil des Entwicklungswerkzeugs ist, übersetzt ihn in den maschinenverst?ndlichen Java-Bytecode. Die Maschine, die diesen Bytecode ausführt, ist jedoch typischerweise virtuell – das hei?t, der Code wird meist nicht direkt durch Hardware, wie z. B. einen Mikroprozessor, ausgeführt, sondern durch entsprechende Software auf der Zielplattform.

Zweck dieser Virtualisierung ist Plattformunabh?ngigkeit: Das Programm soll ohne weitere ?nderung auf jeder Rechnerarchitektur laufen k?nnen, sofern dort eine passende Laufzeitumgebung installiert ist. Oracle selbst bietet Laufzeitumgebungen für die Betriebssysteme Linux, macOS und Windows an. Andere Hersteller lassen eigene Java-Laufzeitumgebungen für ihre Plattform zertifizieren. Auch in Autos, HiFi-Anlagen und anderen elektronischen Ger?ten wird Java verwendet.

Um die Ausführungsgeschwindigkeit zu erh?hen, werden Konzepte wie die Just-in-time-Kompilierung und die Hotspot-Optimierung verwendet. In Bezug auf den eigentlichen Ausführungsvorgang kann die JVM den Bytecode also interpretieren, ihn bei Bedarf jedoch auch kompilieren und optimieren.

Java ist eine der popul?rsten Programmiersprachen. In dem seit 2001 ver?ffentlichten TIOBE-Index lag Java bis 2020, konkurrierend mit C, stets auf den ersten beiden, seit 2021 mit zus?tzlicher Konkurrenz von Python, auf den ersten drei Pl?tzen des Rankings.[5][6] Nach dem RedMonk-Programmiersprachenindex 2019 liegt Java zusammen mit Python auf dem zweiten Platz nach JavaScript.[7][8]

Der Entwurf der Programmiersprache Java strebte haupts?chlich fünf Ziele an:[9]

Einfachheit
Java ist im Vergleich zu anderen objektorientierten Programmiersprachen wie C++ oder C# einfach, da es einen reduzierten Sprachumfang besitzt und beispielsweise Operatorüberladung und Mehrfachvererbung nicht unterstützt.
Objektorientierung
Java geh?rt zu den objektorientierten Programmiersprachen.
Verteilt
Eine Reihe einfacher M?glichkeiten für Netzwerkkommunikation, von TCP/IP-Protokollen über Remote Method Invocation bis zu Webservices werden vor allem über Javas Klassenbibliothek angeboten; die Sprache Java selbst beinhaltet keine direkte Unterstützung für verteilte Ausführung.
Vertrautheit
Wegen der syntaktischen N?he zu C++, der ursprünglichen ?hnlichkeit der Klassenbibliothek zu Smalltalk-Klassenbibliotheken und der Verwendung von Entwurfsmustern in der Klassenbibliothek ist der Umstieg auf Java für erfahrene Programmierer vergleichsweise einfach.
Robustheit
Viele der Designentscheidungen bei der Definition von Java reduzieren die Wahrscheinlichkeit ungewollter Systemfehler; Beispiele dafür sind die starke Typisierung, Garbage Collection, Ausnahmebehandlung sowie Verzicht auf Zeigerarithmetik.
Sicherheit
Zur Verbesserung der Sicherheit stehen Konzepte wie der Class-Loader, der die sichere Zuführung von Klasseninformationen zur Java Virtual Machine steuert, und Security-Manager, die sicherstellen, dass nur Zugriff auf Programmobjekte erlaubt wird, für die entsprechende Rechte vorhanden sind.
Architekturneutralit?t
Java wurde so entwickelt, dass dieselbe Version eines Programms prinzipiell auf einer beliebigen Computerhardware l?uft, unabh?ngig von ihrem Prozessor oder anderen Hardwarebestandteilen.
Portabilit?t
Zus?tzlich zur Architekturneutralit?t ist Java portabel. Das hei?t, dass elementare Datentypen sowohl in ihrer Gr??e und internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert sind. Beispielsweise ist ein float immer ein IEEE 754 Float von 32 Bit L?nge. Dasselbe gilt beispielsweise auch für die Klassenbibliothek, mit deren Hilfe man eine vom Betriebssystem unabh?ngige GUI erzeugen kann.
Leistungsf?higkeit
Java hat aufgrund der Optimierungsm?glichkeit zur Laufzeit das Potenzial, eine bessere Performance als auf Compilezeit-Optimierungen begrenzte Sprachen (C++ etc.) zu erreichen. Dem entgegen steht der Overhead durch die Java-Laufzeitumgebung, sodass die Leistungsf?higkeit von beispielsweise C++-Programmen in einigen Kontexten übertroffen,[10][11] in anderen aber nicht erreicht wird.[12] Um Leistungsf?higkeit zu gew?hrleisten, kann in der Java Virtual Machine (JVM) die Performance gemessen werden.[13]
Interpretierbarkeit
Java wird in maschinenunabh?ngigen Bytecode kompiliert, dieser wiederum kann auf der Zielplattform interpretiert werden. Die Java Virtual Machine interpretiert Java-Bytecode, bevor sie ihn aus Performancegründen kompiliert und optimiert.
Parallelisierbarkeit
Java unterstützt Multithreading, also den parallelen Ablauf von eigenst?ndigen Programmabschnitten. Dazu bietet die Sprache selbst die Schlüsselw?rter synchronized und volatile – Konstrukte, die das ?Monitor & Condition Variable Paradigma“ von C. A. R. Hoare[14] unterstützen. Die Klassenbibliothek enth?lt weitere Unterstützungen für parallele Programmierung mit Threads. Moderne JVMs bilden einen Java-Thread auf Betriebssystem-Threads ab und profitieren somit von Prozessoren mit mehreren Rechenkernen.
Dynamisch
Java ist so aufgebaut, dass es sich an dynamisch ?ndernde Rahmenbedingungen anpassen l?sst. Da die Module erst zur Laufzeit gelinkt werden, k?nnen beispielsweise Teile der Software (etwa Bibliotheken) neu ausgeliefert werden, ohne die restlichen Programmteile anpassen zu müssen. Interfaces k?nnen als Basis für die Kommunikation zwischen zwei Modulen eingesetzt werden; die eigentliche Implementierung kann aber dynamisch und beispielsweise auch w?hrend der Laufzeit ge?ndert werden.

Objektorientierung

[Bearbeiten | Quelltext bearbeiten]
Abh?ngigkeitsgraph der Java-Core-Klassen (erstellt mit jdeps und Gephi). In der Mitte des Diagramms sind die am h?ufigsten verwendeten Klassen Object und String zu sehen.

Die Grundidee der objektorientierten Programmierung ist, Daten und zugeh?rige Funktionen m?glichst eng in einem sogenannten Objekt zusammenzufassen und nach au?en hin zu kapseln (Abstraktion). Die Absicht dahinter ist, gro?e Softwareprojekte einfacher zu verwalten und die Qualit?t der Software zu erh?hen. Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen.

Ein neuer Aspekt von Java gegenüber den objektorientierten Programmiersprachen C++ und Smalltalk ist die explizite Unterscheidung zwischen Schnittstellen und Klassen, die durch entsprechende Schlüsselw?rter interface und class ausgedrückt wird. Java unterstützt kein Erben von mehreren unabh?ngigen Basisklassen (sogenannte ?Mehrfachvererbung“ wie in C++ oder Eiffel), wohl aber das Implementieren einer beliebigen Zahl von Schnittstellen, womit sich viele der entsprechenden Probleme ebenfalls l?sen lassen. Dabei werden Methodensignaturen und Standardimplementierungen von Methoden an die abgeleiteten Klassen weitergegeben, jedoch keine Attribute.

Java ist nicht vollst?ndig objektorientiert, da die Grunddatentypen (int, boolean usw.) keine Objekte sind (siehe auch unter Java-Syntax). Sie werden allerdings ab Java 5 bei Bedarf automatisch und für den Programmierer transparent mittels Autoboxing in die entsprechenden Objekttypen und umgekehrt umgewandelt.[15]

/**
 * Diese Klasse ist eine allgemeine Klasse für jedes beliebige Tier und bietet
 * Methoden an, die alle Tiere gemeinsam haben.
 */
public class Tier {
	/**
	 * Diese Methode l?sst das Tier kommunizieren. Die Unterklassen dieser
	 * Klasse k?nnen diese Methode überschreiben und eine passende
	 * Implementierung für das jeweilige Tier anbieten.
	 */
	public void kommuniziere() {
	    // Wird von allen Unterklassen verwendet, die diese Methode nicht überschreiben.
	    System.out.println("Tier sagt nichts.");
	}
}

/**
 * Deklariert die Klasse "Hund" als Unterklasse der Klasse "Tier".
 * Die Klasse "Hund" erbt damit die Felder und Methoden der Klasse "Tier".
 */
class Hund extends Tier {
	/**
	 * Diese Methode ist in der Oberklasse "Tier" implementiert. Sie wird
	 * in dieser Klasse überschrieben und für die Tierart "Hund" angepasst.
	 */
	@Override
	public void kommuniziere() {
		// Ruft die Implementierung dieser Methode in der Oberklasse "Tier" auf.
		super.kommuniziere();
		// Gibt einen Text in der Konsole aus.
		System.out.println("Hund sagt: 'Wuff Wuff'");
	}
}

/**
 * Deklariert die Klasse "Katze" als Unterklasse der Klasse "Tier".
 * Die Klasse "Katze" erbt damit die Felder und Methoden der Klasse "Tier".
 */
class Katze extends Tier {
	/**
	 * Diese Methode ist in der Oberklasse "Tier" implementiert. Sie wird
	 * in dieser Klasse überschrieben und für die Tierart "Katze" angepasst.
	 */
	@Override
	public void kommuniziere() {
		// Ruft die Implementierung dieser Methode in der Oberklasse "Tier" auf.
		super.kommuniziere();
		// Gibt einen Text auf der Konsole aus.
		System.out.println("Katze sagt: 'Miau'");
	}
}

class Main {
	/**
	 * Methode, die beim Programmstart aufgerufen wird.
	 */
	public static void main(String[] args) {
		// Deklariert eine Variable für Instanzen der Klassen "Hund" und "Katze"
		Tier tier;

		// Erstellt eine Instanz der Klasse "Hund" und speichert die Instanz in
		// der Variable "tier"
		tier = new Hund();
		// Ruft die Methode Hund.kommuniziere() auf
		tier.kommuniziere();

		// Erstellt eine Instanz der Klasse "Katze" und speichert die Instanz in
		// der Variable "tier"
		tier = new Katze();
		// Ruft die Methode Katze.kommuniziere() auf
		tier.kommuniziere();
	}
}
Konsolenausgabe
[Bearbeiten | Quelltext bearbeiten]
Tier sagt nichts.
Hund sagt: 'Wuff Wuff'
Tier sagt nichts.
Katze sagt: 'Miau'

Java bietet eine Reflexion-API als Bestandteil der Laufzeitumgebung. Damit ist es m?glich, zur Laufzeit auf Klassen und Methoden zuzugreifen, deren Existenz oder genaue Auspr?gung zur Zeit der Programmerstellung nicht bekannt war. H?ufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster Fabrikmethode (Factory Method) angewandt.

Mit Java 5 hat Sun die Programmiersprache um Annotationen erweitert. Annotationen erlauben die Notation von Metadaten und erm?glichen bis zu einem gewissen Grad benutzerdefinierte Spracherweiterungen. Sinn der Annotationen ist unter anderem die automatische Erzeugung von Code und anderen in der Software-Entwicklung wichtigen Dokumenten für wiederkehrende Muster anhand m?glichst kurzer Hinweise im Quelltext. Bislang wurden in Java dafür ausschlie?lich Javadoc-Kommentare mit speziellen JavaDoc-Tags verwendet, die von Doclets wie zum Beispiel dem XDoclet ausgewertet wurden.

Annotationen k?nnen auch in den kompilierten Class-Dateien enthalten sein. Der Quelltext wird also für ihre Verwendung nicht ben?tigt. Insbesondere sind die Annotationen auch über die Reflection-API zug?nglich. So k?nnen sie zum Beispiel zur Erweiterung des Bean-Konzeptes verwendet werden.

Modulare Ausführung auf fernen Computern

[Bearbeiten | Quelltext bearbeiten]

Java bietet die M?glichkeit, Klassen zu schreiben, die in unterschiedlichen Ausführungsumgebungen ablaufen. Beispielsweise lassen sich Applets in Webbrowsern, die Java unterstützen, ausführen. Das Sicherheitskonzept von Java kann dazu eingesetzt werden, dass unbekannte Klassen dabei keinen Schaden anrichten k?nnen, was vor allem bei Applets wichtig ist (siehe auch Sandbox). Beispiele für in entsprechenden Ausführungsumgebungen ausführbare Java-Module sind Applets, Servlets, Portlets, MIDlets, Xlets, Translets, und Enterprise JavaBeans.

Duke, das Java-Maskottchen

Der Objektzugriff in Java ist VM-intern über Referenzen implementiert, die den aus C oder C++ bekannten Zeigern ?hneln.[16] Die Sprachdefinition (Java Language Specification) bezeichnet sie als ?Reference Values“ um deutlich zu machen, dass sie im Quelltext des jeweiligen Programms als Call by value übergeben werden.[17] Aus Sicherheitsgründen erlauben diese nicht, die tats?chliche Speicheradresse zu erkennen oder zu modifizieren. Sogenannte Zeigerarithmetik ist in Java somit ausgeschlossen. Per Design kann so ein h?ufiger Typ von Fehlern, die in anderen Programmiersprachen auftreten, von vornherein ausgeschlossen werden.

Zusammengeh?rige Klassen werden in Paketen (englisch packages) zusammengefasst. Diese Pakete erm?glichen die Einschr?nkung der Sichtbarkeit von Klassen, eine Strukturierung von gr??eren Projekten sowie eine Trennung des Namensraums für verschiedene Entwickler. Die Paketnamen sind hierarchisch aufgebaut und beginnen meist mit dem (umgekehrten) Internet-Domainnamen des Entwicklers, also beispielsweise com.google bei Klassenbibliotheken, die Google zur Verfügung stellt. Klassennamen müssen nur innerhalb eines Paketes eindeutig sein. Hierdurch ist es m?glich, Klassen von verschiedenen Entwicklern zu kombinieren, ohne dass es zu Namenskonflikten kommt. Die Hierarchie der Paketnamen hat allerdings keine semantische Bedeutung. Bei der Sichtbarkeit zwischen den Klassen zweier Pakete spielt es keine Rolle, wo sich die Pakete in der Namenshierarchie befinden. Klassen sind entweder nur für Klassen des eigenen Paketes sichtbar oder für alle Pakete.

Weiter unterstützt die Sprache Threads (nebenl?ufig ablaufende Programmteile) und Ausnahmen (englisch exception). Java beinhaltet auch eine automatische Speicherbereinigung (englisch garbage collector), die nicht (mehr) referenzierte Objekte aus dem Speicher entfernt.

Java unterscheidet explizit zwischen Schnittstellen und Klassen. Eine Klasse kann beliebig viele Schnittstellen implementieren, hat aber stets genau eine Basisklasse. Java unterstützt kein direktes Erben von mehreren Klassen (?Mehrfachvererbung“), jedoch die Vererbung über mehrere Hierarchie-Ebenen (Klasse Kind erbt von Klasse Vater, die ihrerseits von Klasse Gro?vater erbt usw.). Je nach Sichtbarkeit (public, protected, default/package-private, private) erbt die Klasse Methoden und Attribute (auch Felder genannt) von ihren Klassenvorfahren. Alle Klassen sind – direkt oder indirekt – von der Wurzelklasse Object abgeleitet.

Zu Java geh?rt eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, vom zugrundeliegenden Betriebssystem unabh?ngige Schnittstelle (Application programming interface, API) angeboten.

Mit Java 2 wurden die Java Foundation Classes (JFC) eingeführt, die unter anderem Swing bereitstellen, das zur Erzeugung plattformunabh?ngiger grafischer Benutzerschnittstellen (GUI) dient und auf dem Abstract Window Toolkit basiert.

Syntax/Grammatik und Semantik von Java sind in der Java Language Specification (Java-Sprachspezifikation) von Sun Microsystems dokumentiert. Das folgende Beispielprogramm gibt die unter Programmierern klassische Meldung ?Hallo Welt!“, gefolgt von einem Zeilenumbruch, auf dem Ausgabemedium aus.

 public class HalloWelt {
     public static void main(String[] args) {
         System.out.println("Hallo Welt!");
     }
 }

Entstehung und Weiterentwicklung

[Bearbeiten | Quelltext bearbeiten]

Herkunft und Entwicklung der Programmiersprache Java sowie mit ihr verwandter Technik sind im Artikel Java-Technologie beschrieben sowie wann welche Version ver?ffentlicht wurde.

Neben Oracle kümmert sich eine Vielzahl von Einzelpersonen, kleiner und gro?er Unternehmen, wie Apple, IBM, Hewlett-Packard und Siemens beim Java Community Process (JCP) unter anderem um die Weiterentwicklung der Java-Sprachspezifikation. Der JCP wurde 1998 von Sun Microsystems ins Leben gerufen.

Java als freie Software

[Bearbeiten | Quelltext bearbeiten]

Sun hatte zugesichert, sein JDK unter der GNU General Public License zu ver?ffentlichen; mit der übernahme durch Oracle wurde auch die offene Lizenzierung übernommen. Am 13. November 2006 wurden bereits mit dem Compiler javac und der Hotspot Virtual Machine erste Teile als Open Source ver?ffentlicht. Zudem wurde mit OpenJDK eine Community-Seite er?ffnet, mit deren Hilfe die Entwicklung koordiniert werden soll.[18] Am 8. Mai 2007 folgten dann gro?e Teile des ?Java-SE“-Quellcodes zum Erstellen eines JDK. Eine Ausnahme stellte solcher Code dar, für den Sun nicht die n?tigen Rechte besa?, um ihn freizugeben. Dieser liegt somit nur in kompilierter Form vor.[19] Ebenfalls kündigte Sun an, dass Entwicklungen auf Grundlage des OpenJDK das ?Java Compatible“-Logo führen dürfen, wenn sie nach dem ?Java Compatibility Kit“ (JCK) zertifiziert sind.

Zuvor wurde der Quelltext von Java unter anderem bei jedem JDK mitgeliefert und erm?glichte so zwar Einsicht, er durfte aber nicht beliebig modifiziert werden. Deswegen gibt es neben den offiziellen JCP auch diverse unabh?ngige Vereinigungen, die es sich zum Ziel gesetzt haben, ein unter eine freie Open-Source-Lizenz gestelltes Java bereitzustellen. Die bekanntesten dieser Projekte waren Apache Harmony, Kaffe und das GNU-Classpath-Projekt. Gegenw?rtig gibt es neben OpenJDK noch eine weitere gro?e Implementierung, die aktuelle Java Releases ver?ffentlicht, Eclipse OpenJ9. Diese JVM-Implementierung wurde von IBM an die Eclipse Foundation übergeben.[20] OpenJ9 steht mehrfachlizenziert unter EPL 2.0, Apache 2.0 und GNU 2.0 with Classpath Exception.[21]

Unterschiede zu ?hnlichen Sprachen

[Bearbeiten | Quelltext bearbeiten]

Darüber hinaus bietet Java die M?glichkeit, aus Java-Code heraus verschiedene Skriptsprachen auszuführen. Ebenfalls gibt es eine Reihe an Programmiersprachen, die nach Java-Bytecode kompiliert werden. Damit lassen sich Programmteile auch in anderen Programmiersprachen umsetzen. Mit JDK Version 7, das am 28. Juli 2011 erschienen ist,[22] wurde auch die Unterstützung für dynamische ?Fremdsprachen“ durch die Virtual Machine verbessert.[23]

Java darf nicht mit der Skriptsprache JavaScript verwechselt werden. JavaScript wurde von Netscape Communications entwickelt, hie? früher LiveScript und wurde im Zuge einer Kooperation zwischen Netscape und Sun Microsystems in JavaScript umbenannt.[24]

JavaScript ist eine dynamisch typisierte, objektbasierte, aber, bis ECMAScript 2015, klassenlose Skriptsprache mit einer ?hnlichen Syntax wie C, Perl oder Java, unterscheidet sich jedoch in vielerlei Hinsicht von Java. Trotz der ?hnlichkeit der Namen der beiden Programmiersprachen unterscheidet sich Java st?rker von JavaScript als zum Beispiel von C++ oder C#. JavaScript wurde ursprünglich vornehmlich in HTML-Seiten zur eingebetteten Programmierung verwendet, um interaktive Webapplikationen zu erm?glichen. Mittlerweile wird JavaScript auf der Laufzeitumgebung Node.js zunehmend auch für Server-Applikationen genutzt.

Smalltalk ist eine der ?ltesten objektorientierten Programmiersprachen überhaupt. Java erbt von Smalltalk die grunds?tzliche Konzeption eines Klassenbaumes, in den alle Klassen eingeh?ngt werden. Dabei stammen alle Klassen entweder direkt oder indirekt von der Klasse java.lang.Object ab. Au?erdem wurden die Konzepte der automatischen Speicherbereinigung (garbage collector) und der virtuellen Maschine übernommen sowie eine Vielzahl weiterer Merkmale der Sprache Smalltalk.

Smalltalk kennt jedoch keine primitiven Datentypen wie zum Beispiel int – selbst eine einfache Zahl ist ein Objekt. Dieses Konzept wurde nicht nach Java übernommen, primitive Datentypen werden aber ab Java 5 mittels Autoboxing bei Bedarf in die entsprechenden Objekttypen und umgekehrt umgewandelt.[15]

Java lehnt seine Syntax an die der Programmiersprache C++ an. Im Gegensatz zu C++ fanden jedoch Mehrfachvererbung oder Zeigerarithmetik keinen Einzug. Klassen k?nnen nur eine Superklasse haben (Einfachvererbung), aber eine beliebige Anzahl von Interfaces implementieren. Interfaces entsprechen abstrakten Klassen in C++, die keine Attribute oder konkrete Methoden besitzen, werden allerdings konzeptionell anders als die auch in Java m?glichen abstrakten Klassen verwendet. Die interne Speicherverwaltung wird dem Java-Entwickler weitgehend abgenommen; dies erledigt die automatische Speicherbereinigung. Allerdings garantiert auch dieser Mechanismus nicht den vollst?ndigen Ausschluss von Speicherlecks. Letztlich muss der Programmierer dafür sorgen, dass nicht mehr verwendete Objekte von keinem laufenden Thread mehr referenziert werden. Einander referenzierende Objekte, die von keinem Thread aus mehr über Referenzen erreichbar sind, werden ebenfalls freigegeben, wobei es dem Garbage Collector (GC) obliegt, wann und ob überhaupt diese Objekte freigegeben werden. Jede Objektklasse besitzt zus?tzlich eine Methode namens finalize(), die vom Garbage Collector aufgerufen werden kann, um zus?tzliche ?Aufr?umarbeiten“ durchzuführen. Es gibt jedoch keine Garantie, wann und ob dies geschieht. Sie ist daher nicht mit einem Destruktor aus C++ vergleichbar.

Neben Mehrfachvererbung und Speicherarithmetik wurden bei der Entwicklung von Java noch weitere Konstrukte der Sprache C++ bewusst weggelassen:

Im Gegensatz zu C++ ist es in Java nicht m?glich, Operatoren (zum Beispiel arithmetische Operatoren wie + und -, logische Operatoren wie && und ||, oder den Index-Operator []) zu überladen, das hei?t in einem bestimmten Kontext mit neuer Bedeutung zu versehen. Dies sorgt einerseits für eine Vereinfachung der Sprache an sich und verhindert, dass Quellcodes mit Operatoren, die mit schwer nachvollziehbarer Semantik überladen werden, unleserlich gemacht werden. Andererseits würden benutzerdefinierte Typen mit überladenen Operatoren in C++ eher wie eingebaute Typen erscheinen k?nnen – vor allem numerischer Code w?re so mitunter einfacher nachzuvollziehen. Die Sprachdefinition von Java definiert jedoch typabh?ngiges Verhalten der Operatoren + (Addition bei arithmetischen Operanden, andernfalls zur Verkettung von Zeichenketten ?string concatenation“) sowie &, | und ^ (logisch für boolean und bitweise für arithmetische Operanden). Das l?sst diese Operatoren zumindest wie teilweise überladene Operatoren erscheinen.

Das C++-Konstrukt der Templates, die es erlauben, Algorithmen oder sogar ganze Klassen unabh?ngig von den darin verwendeten Datentypen zu definieren, wurde in Java nicht übernommen. Ab Version 5 unterstützt Java aber sogenannte Generics, die zwar keinerlei Metaprogrammierung erlauben, aber ?hnlich wie C++-Templates typsichere Container und ?hnliches erm?glichen.

In Java wurde das Schlüsselwort const reserviert, hat aber keine Funktion. Die Alternative zu const (und Pr?prozessor-Direktiven) ist final. Im Gegensatz zu const wird final in einer Methodensignatur nicht vererbt und hat somit nur im aktuellen Scope Gültigkeit. Den final-Modifikator kann eine Klasse (die dadurch nicht mehr abgeleitet werden kann), ein Attribut (dessen Wert so nur einmal gesetzt werden kann) oder eine Methode (die dadurch unüberschreibbar wird) besitzen.

Die .NET-Plattform von Microsoft kann als Konkurrenzprodukt zu Java gesehen werden. Mit der Spezifikation von C# hat Microsoft im Rahmen seiner .NET-Strategie versucht, den Spagat zwischen der Schaffung einer neuen Sprache und der leichten Integration bestehender Komponenten zu schaffen.

Konzeptionelle Unterschiede zu Java bestehen insbesondere in der Umsetzung von Callback-Mechanismen. In .NET ist hierzu die Unterstützung von Delegaten (englisch delegates) implementiert, einem Konzept, das mit Funktionszeigern vergleichbar ist. In Java kann dies über Methodenreferenzen oder Lambdaausdrücke erreicht werden.

Des Weiteren unterstützen .NET-Sprachen sogenannte Attribute (attributes), die es erlauben, die Funktionalit?t der Sprache über Metadaten im Code zu erweitern (eine ?hnliche Funktionalit?t wurde in Form der oben beschriebenen Annotations in Java 5.0 übernommen). C# enth?lt auch Bestandteile der Sprache Visual Basic, zum Beispiel Eigenschaften (properties), sowie Konzepte aus C++.

In .NET ist es ebenso wie in Java m?glich, Ausnahmen (exceptions) zu einer Methode zu deklarieren. In Java k?nnen Ausnahmen so deklariert werden, dass sie auch verarbeitet werden müssen (Checked Exception).

Windows Systembefehle (Win-ABI-Aufrufe) k?nnen in .NET über platform invoke oder mittels C++/CLI aufgerufen werden. Das ist in Java nicht m?glich, es besteht mit dem Java Native Interface aber die M?glichkeit, C- und C++-Code per DLL direkt zu referenzieren und au?erhalb der Java Virtual Machine ausführen zu lassen.

Scala ist eine Programmiersprache, die objektorientierte und funktionale Paradigmen vereint und wie Java auf der Java Virtual Machine ausgeführt werden kann.

Im Gegensatz zu Java, und ?hnlich wie C#, ist das Typsystem vereinheitlicht und umfasst Referenz- und Werttypen. Benutzer k?nnen weitere Typen definieren – in Java sind die verfügbaren Werttypen auf die fest vordefinierten primitiven Typen (int, long, …) beschr?nkt.

Scala verwendet statt Schnittstellen (interface) sogenannte Traits (traits), die wiederverwendbare Methodenimplementierungen enthalten k?nnen. Weitere Funktionalit?t, die nicht in Java enthalten ist, umfasst unter anderem Typen und Funktionen h?herer Ordnung, Pattern Matching und frei w?hlbare Methoden- und Klassennamen.

Wie in C# gibt es keine checked exceptions. Allerdings k?nnen Methoden mit einer @throws-Annotation versehen werden. Scala entfernt unter anderem das Konzept statischer Methoden und Klassen (ersetzt durch companion objects), Raw Types, die Notwendigkeit von Getter- und Settermethoden und die unsichere Varianz von Arrays.

Die Varianz generischer Typen muss nicht wie in Java bei der Nutzung erfolgen (use-site variance), sondern kann direkt bei der Deklaration angegeben werden (declaration-site variance).

Kotlin ist eine plattformübergreifende, statisch typisierte Programmiersprache, die in Bytecode für die Java Virtual Machine (JVM) übersetzt wird, aber auch in JavaScript-Quellcode oder (mittels LLVM) in Maschinencode umgewandelt werden kann.

Anders als in Java wird bei Kotlin der Datentyp einer Variable nicht vor dem Variablennamen, sondern danach, abgetrennt durch einen Doppelpunkt, notiert. Allerdings unterstützt Kotlin auch Typinferenz, sodass der Typ oft auch weggelassen werden kann, wenn er aus dem Zusammenhang klar ist. Als Anweisungsende genügt der Zeilenumbruch, optional kann jedoch auch ein Semikolon verwendet werden.[25] Zus?tzlich zu Klassen und Methoden (in Kotlin: member functions) aus der objektorientierten Programmierung unterstützt Kotlin prozedurale Programmierung unter Verwendung von Funktionen sowie bestimmte Aspekte der funktionalen Programmierung.[26] Als Einstiegspunkt dient wie bei C u. ?. eine main-Funktion.

Kotlin l?sst sich au?erdem zur Entwicklung von Android-Apps verwenden und wird dafür seit 2017 offiziell von Google unterstützt.[27] Seit Mai 2019 ist Kotlin die von Google bevorzugte Sprache für Android-Appentwicklung.[28]

Anwendungsarten

[Bearbeiten | Quelltext bearbeiten]

Mit Java k?nnen zahlreiche verschiedene Arten von Anwendungen erstellt werden.

Java-Webanwendungen

[Bearbeiten | Quelltext bearbeiten]

Java-Webanwendungen sind Java-Programme, die auf einem Webserver geladen und gestartet werden und beim Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. üblicherweise l?uft ein Teil der Webanwendung auf dem Server (die Gesch?ftslogik und Persistenz) und ein anderer Teil am Webbrowser (die Logik der grafischen Benutzeroberfl?che). Der Serverteil wird üblicherweise vollst?ndig in Java geschrieben, der Browserteil üblicherweise in HTML und JavaScript. Es ist jedoch auch m?glich, Java-Webanwendungen inklusive GUI-Logik vollst?ndig in Java zu schreiben (siehe z. B. Google Web Toolkit oder die Remote Application Platform). Bekannte Beispiele für Java-Webanwendungen sind Twitter,[29] Jira, Jenkins oder Gmail (das nicht vollst?ndig, aber zu gro?en Teilen in Java geschrieben ist).

Java-Desktop-Anwendungen

[Bearbeiten | Quelltext bearbeiten]

Unter Desktop-Anwendungen oder Applikationen werden normale Desktop-Programme zusammengefasst. Sowohl Internet-Kommunikationsprogramme als auch Spiele oder Office-Anwendungen, die auf einem normalen PC laufen, werden so genannt. Bekannte Beispiele für Java-Desktop-Anwendungen sind die integrierte Entwicklungsumgebung Eclipse, das Filesharing-Programm Vuze oder das Computerspiel Minecraft.

Java-Applets sind Java-Anwendungen, die normalerweise in einem Webbrowser ausgeführt werden. Sie sind üblicherweise auf einen durch ein spezielles HTML-Tag definierten Bereich einer Webseite beschr?nkt. Voraussetzung für die Ausführung von Java-Applets ist ein Java-f?higer Browser. Diese Anwendungsform wird seit Java 11 nicht mehr unterstützt, nachdem sie bereits in Java 9 als ?veraltet“ gekennzeichnet wurde.[30][31][32][33]

Apps sind kleinere Applikationen für mobile Ger?te wie Handys, Smartphones, PDAs oder Tablets. Sie laufen üblicherweise auf speziellen, für die Ausführung von Java-Anwendungen auf mobilen Ger?ten optimierten Java-Plattformen wie Java ME.

Apps für das Android-Betriebssystem von Google werden in der hier beschriebenen Sprache Java programmiert, basieren aber auf einer abweichenden Klassenbibliotheks-API.

Entwicklungsumgebungen

[Bearbeiten | Quelltext bearbeiten]

Es gibt eine gro?e Vielfalt von Entwicklungsumgebungen für Java, sowohl propriet?re als auch freie (Open Source). Die meisten Entwicklungsumgebungen für Java sind selbst ebenfalls in Java geschrieben.

Die bekanntesten Open-Source-Umgebungen sind das von der Eclipse Foundation bereitgestellte Eclipse und das von Sun entwickelte NetBeans.

Unter den kommerziellen Entwicklungsumgebungen sind IntelliJ IDEA von JetBrains (welches in der Community Edition[34] jedoch Freie Software ist), JBuilder von Borland sowie JCreator und das auf NetBeans basierende Sun ONE Studio von Sun, am verbreitetsten. Au?erdem gibt es noch eine um einige hundert Plugins erweiterte Version von Eclipse, die von IBM unter dem Namen WebSphere Studio Application Developer (?WSAD“) vertrieben wurde und ab Version 6.0 Rational Application Developer (?RAD“) hei?t.

Apple liefert mit macOS ab Version 10.3 die Entwicklungsumgebung Xcode aus, die verschiedene Programmiersprachen unterstützt, allerdings einen Schwerpunkt auf C, C++, Objective-C und Swift setzt.[35][36] Für das Programmieren von Android-Apps mit Java empfiehlt sich Android Studio.

Für Einsteiger und Ausbildungszwecke konzipiert ist die IDE BlueJ, wo unter anderem die Beziehungen zwischen den verschiedenen Klassen grafisch in Form von Klassendiagrammen dargestellt werden.

Sehr viele Texteditoren bieten Unterstützung für Java, darunter Emacs, jEdit, Atom, Visual Studio Code, Vim, Geany, Jed, Notepad++ und TextPad.

Ein Java-Compiler übersetzt Java-Quellcode (Dateiendung ?.java“) in einen ausführbaren Code. Grunds?tzlich unterscheidet man zwischen Bytecode- und Nativecode-Compilern. Einige Java-Laufzeitumgebungen verwenden einen JIT-Compiler, um zur Laufzeit den Bytecode h?ufig genutzter Programmteile in nativen Maschinencode zu übersetzen.

Bytecode-Compiler

[Bearbeiten | Quelltext bearbeiten]

Im Normalfall übersetzt der Java-Compiler die Programme in einen nicht direkt ausführbaren Bytecode (Dateiendung ?.class“), den die Java Runtime Environment (JRE) sp?ter ausführt. Die aktuelle HotSpot-Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abh?ngig von der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, sodass der Effekt auftritt, dass Programmteile nach mehrmaliger Abarbeitung schneller werden. Andererseits führt diese Technik, die ein Nachfolger der Just-in-time-Kompilierung ist, dazu, dass Java-Bytecode theoretisch genauso schnell wie native, kompilierte Programme ausgeführt werden k?nnte.

Die HotSpot-Technik ist seit der JRE Version 1.3 verfügbar und wurde seitdem stetig weiter verbessert.

Beispiele für Bytecode-Compiler sind javac (Teil des JDK) und war Jikes (eingestellt, Funktionsumfang bis Java SE 5) von IBM.

Native Compiler

[Bearbeiten | Quelltext bearbeiten]

Es existieren auch Compiler für Java, die Java-Quelltexte oder Java-Bytecode in ?normalen“ Maschinencode übersetzen k?nnen, sogenannte Ahead-of-time-Compiler. Nativ kompilierte Programme haben den Vorteil, keine JavaVM mehr zu ben?tigen, aber auch den Nachteil, nicht mehr plattformunabh?ngig zu sein.

Beispiele für native Java-Compiler waren Excelsior JET (eingestellt, bis Java SE 7), sowie GNU Compiler for Java (GCJ, eingestellt, bis J2SE 5.0) wie MinGW, Cygwin oder JavaNativeCompiler (JNC).

Als weitere M?glichkeit kann das Java-Programm in ein anderes Programm ?eingepackt“ (englisch to wrap) werden; diese ?u?ere Hülle dient dann als Ersatz für ein Java-Archiv. Sie sucht selbst?ndig nach einer installierten Java-Laufzeitumgebung, um das eigentliche Programm zu starten, und informiert den Benutzer darüber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer noch eine Laufzeitumgebung n?tig, um das Programm starten zu k?nnen, aber der Anwender erh?lt eine verst?ndliche Fehlermeldung, die ihm weiterhilft.

Java Web Start ist ein etwas eleganterer und standardisierter Ansatz für diese L?sung – er erm?glicht die einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert, dass immer die neueste Version der Anwendung ausgeführt wird. Dadurch werden komplizierte Installations- oder Aktualisierungsprozeduren automatisiert.

Beispiele für Java-Wrapper sind JSmooth oder Launch4J. JBuilder von Borland und NSIS sind ebenfalls in der Lage, einen Wrapper für Windows zu erstellen.

Java User Groups

[Bearbeiten | Quelltext bearbeiten]

Sowohl international als auch in Deutschland gibt es Java User Groups (JUG). Der Zweck dieser Vereinigungen an Java-Anwendern ist freier Informationsaustausch.

Wichtige deutschsprachige Konferenzen rund um Java sind:

Internationale Konferenzen mit dem Schwerpunkt Java:

Mit Helloworld.java ver?ffentlichte die Band Nanowar of Steel 2024 einen Song in der Programmiersprache Java.[37][38]

Commons: Java (programming language) – Sammlung von Bildern, Videos und Audiodateien
  • Java bei Oracle (englisch)

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. www.oracle.com.
  2. Oracle Releases Java 24.
  3. JDK 24.
  4. www.lemondeinformatique.fr.
  5. Robert McMillan: Is Java Losing Its Mojo? wired.com, 1. August 2013, abgerufen am 29. September 2018 (englisch): ?Java is on the wane, at least according to one outfit that keeps on eye on the ever-changing world of computer programming languages. For more than a decade, it has dominated the Tiobe Programming Community Index – a snapshot of software developer enthusiasm that looks at things like internet search results to measure how much buzz different languages have. But lately, Java has been slipping.“
  6. TIOBE Programming Community Index. tiobe.com, 2015, abgerufen am 3. April 2015 (englisch).
  7. Stephen O’Grady: The RedMonk Programming Language Rankings: January 2020. In: tecosystems. RedMonk, 28. Februar 2020, abgerufen am 5. M?rz 2020 (amerikanisches Englisch).
  8. Silke Hahn: Python schreibt Geschichte: Platz 2 im Programmiersprachen-Ranking. heise online, 3. M?rz 2020, abgerufen am 5. M?rz 2020.
  9. The Java Language: An Overview. 1995 Sun Whitepaper
  10. Hajo Schulz: Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest. Teil 1. In: c’t. Nr. 19. Heise Zeitschriften Verlag, Hannover 2003, S. 204–207 (heise.de [abgerufen am 21. Oktober 2010]).
    Hajo Schulz: Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest. Teil 2. In: c’t. Nr. 21. Heise Zeitschriften Verlag, Hannover 2003, S. 222–227 (heise.de [abgerufen am 21. Oktober 2010]).
  11. J.P.Lewis, Ulrich Neumann: Java pulling ahead? Performance of Java versus C++. Computer Graphics and Immersive Technology Lab, University of Southern California, Januar 2003, abgerufen am 21. Oktober 2010 (englisch): ?This article surveys a number of benchmarks and finds that Java performance on numerical code is comparable to that of C++, with hints that Java’s relative performance is continuing to improve.“
  12. Robert Hundt: Loop Recognition in C++/Java/Go/Scala. Hrsg.: Scala Days 2011. Stanford CA 27. April 2011 (englisch, scala-lang.org [PDF; 318 kB; abgerufen am 17. November 2012]): We find that in regards to performance, C++ wins out by a large margin. […] The Java version was probably the simplest to implement, but the hardest to analyze for performance. Specifically the effects around garbage collection were complicated and very hard to tune
  13. David Georg Reichelt: Java pulling ahead? JVM Performance-Regressionen frühzeitig erkennen und vermeiden. Informatik Aktuell, Alkmene Verlag, 4. Februar 2022, abgerufen am 6. Februar 2022: ?Im JVM-Umfeld ist vor allem JMH zur Definition von Benchmarks verbreitet. Die regelm??ige Ausführung von JMH-Benchmarks wird aus Ressourcengründen aber nur selten durchgeführt. Statt immer alle Regressions-Benchmarks oder -Tests auszuführen, ist es viel schneller, nur diejenigen auszuführen, bei denen eine Regression m?glich ist. Daher erm?glicht das Jenkins-Plugin Peass-CI die Automatisierung der Regressions-Testselektion für JMH, so dass in der aktuellen Version nur noch für diese Version relevante Workloads getestet werden.“
  14. C. A. R. Hoare: Monitors: an operating system structuring concept. (PDF) In: Communications of the ACM, 17, Nr. 10, 1974, S. 549–557 doi:10.1145/355620.361161
  15. a b Autoboxing in Java (englisch)
  16. Scott Stanchfield: Java is Pass-by-Value, Dammit! JavaDude.com, archiviert vom Original (nicht mehr online verfügbar) am 15. Mai 2008; abgerufen am 5. November 2010 (englisch).
  17. 4.1. The Kinds of Types and Values. In: Java Language Specification. Oracle Inc., abgerufen am 24. September 2016 (englisch).
  18. Community-Seite zur Entwicklung des Open-Source-JDKs von Sun
  19. Sun Microsystems Presseankündigung vom 8. Mai 2007 (Memento vom 11. Mai 2008 im Internet Archive) (englisch)
  20. Java: IBM übertr?gt die JVM J9 an die Eclipse Foundation. In: heise online. Abgerufen am 24. September 2019.
  21. eclipse openj9 license. Eclipse Foundation, 1. August 2018, abgerufen am 24. September 2019.
  22. JDK 7. 6. April 2008, archiviert vom Original; abgerufen am 18. Januar 2025.
  23. JDK 7 Features – JSR 292: VM support for non-Java languages (InvokeDynamic) (englisch)
  24. Brendan Eich: JavaScript at Ten Years (Memento vom 28. Mai 2007 im Internet Archive) (MS PowerPoint; 576 kB).
  25. Semicolons. jetbrains.com, abgerufen am 8. Februar 2014 (englisch).
  26. functions. jetbrains.com, abgerufen am 8. Februar 2014 (englisch).
  27. Maxim Shafirov: Kotlin on Android. Now official. In: Kotlin Blog. 17. Mai 2017, abgerufen am 18. Juni 2019 (amerikanisches Englisch).
  28. Google I/O: Googles Bekenntnis zu Kotlin. In: heise online. Abgerufen am 18. Juni 2019.
  29. IBM Developer. Archiviert vom Original; abgerufen am 18. Januar 2025.
  30. Deprecated APIs, Features, and Options. Abgerufen am 14. September 2019.
  31. JEP 289: Deprecate the Applet API. Abgerufen am 14. September 2019.
  32. Dalibor Topic: Moving to a Plugin-Free Web. Abgerufen am 14. September 2019.
  33. Aurelio Garcia-Ribeyro: Further Updates to 'Moving to a Plugin-Free Web'. Abgerufen am 14. September 2019.
  34. JetBrains Community Edition auf GitHub
  35. Xcode. Abgerufen am 18. Januar 2025 (englisch).
  36. Swift Resources - Apple Developer. Abgerufen am 18. Januar 2025 (englisch).
  37. Emanuel Kessler: Nanowar of Steel: Java-Code zum (Mit-)Singen - Golem.de. In: Golem.de. 20. Dezember 2024, abgerufen am 18. Januar 2025.
  38. Napalm Records: NANOWAR OF STEEL - HelloWorld.java (Source Code Video) | Napalm Records. 3. Dezember 2024, abgerufen am 18. Januar 2025.
透明质酸钠是什么东西 什么的看 胃食管反流能吃什么水果 草字头有什么字 心眼小是什么意思
舌头上有溃疡是什么原因 吃什么推迟月经 属兔的跟什么属相最配 挂妇科门诊都检查什么 耳耵聍是什么东西
猴跟什么生肖配对最好 斛什么意思 电疗是什么 高甘油三酯血症是什么意思 化疗后骨髓抑制是什么意思
委曲求全是什么生肖 小孩子不吃饭是什么原因引起的 学信网上的报告编号是什么 白癜风不能吃什么 什么的松果
做是什么感觉hcv9jop6ns6r.cn 鲥鱼是什么鱼hcv9jop6ns2r.cn 有什么瓜hcv7jop5ns0r.cn 爱趴着睡觉是什么原因hcv8jop4ns0r.cn 高血压2级是什么意思hcv8jop9ns8r.cn
胆囊肌腺症是什么病hcv8jop4ns4r.cn 1970年属狗的是什么命hcv9jop4ns1r.cn 疯马皮是什么皮hcv9jop8ns2r.cn 中盐是什么盐hcv8jop0ns4r.cn 脚上长痣代表什么hcv8jop0ns3r.cn
婚检有什么项目hcv8jop3ns4r.cn ff是什么牌子hcv9jop6ns7r.cn 三刀六洞什么意思hcv8jop4ns6r.cn 坚强后盾是什么意思zhiyanzhang.com 孔子属什么生肖hcv9jop0ns4r.cn
困难的反义词是什么hcv7jop7ns1r.cn 休克是什么症状hcv7jop9ns2r.cn 春砂仁与什么煲汤最佳hcv9jop1ns7r.cn 宫内小囊是什么意思helloaicloud.com 结膜炎挂什么科hcv9jop3ns0r.cn
百度