Java (programming language)

from Wikipedia, the free encyclopedia
Java
logo
Basic data
Paradigms : Object-oriented programming language
Publishing year: 1995
Designer: James Gosling , Sun Microsystems
Developer: Sun Microsystems (subsidiary of Oracle since 2010 )
Current  version : 14   (January 14, 2020)
Typing : strong , static
Influenced by: C ++ , Smalltalk , Objective-C , C #
Affected: Groovy , Clojure , C # , Scala , Vala , ActionScript , Seed7 , Kotlin , JavaScript
Operating system : platform independent
License : GNU General Public License / Java Community Process
oracle.com/technetwork/java/

Java is an object-oriented programming language and a registered trademark of Sun Microsystems , which was acquired by Oracle in 2010 . The programming language is part of Java technology - it basically consists of the Java development tool ( JDK ) for creating Java programs and the Java runtime environment (JRE) for executing them. The runtime environment itself comprises the virtual machine ( JVM ) and the supplied libraries . Java as a programming language should not be equated with Java technology; Java runtime environments execute bytecode that can be compiled from both the Java programming language and other programming languages ​​such as Groovy , Kotlin, and Scala . In principle, any programming language could be used as the basis for Java bytecode, but in most cases there are no corresponding bytecode compilers .

The Java programming language is primarily used within Java technology to formulate programs. These are initially available as pure, human-understandable text , the so-called source code . This source code is not directly executable; Only the Java compiler, which is part of the development tool, translates it into machine-understandable Java bytecode. The machine that executes this bytecode, however, is typically virtual - that is, the code is usually not executed directly by hardware (e.g. a microprocessor ), but by appropriate software on the target platform.

The purpose of this virtualization is platform independence : the program should be able to run on any computer architecture without any further changes if a suitable runtime environment is installed there . Oracle itself offers runtime environments for the Linux , macOS , Solaris and Windows operating systems . Other manufacturers have their own Java runtime environments certified for their platform . Java is also used in cars, hi-fi systems and other electronic devices.

To increase execution speed, concepts such as just-in-time compilation and hotspot optimization are used. In relation to the actual execution process, the JVM can interpret the bytecode , but also compile and optimize it if necessary .

Java is one of the most popular programming languages. In the TIOBE index published since 2001, Java was always in first or second place in the ranking , competing with C. According to the RedMonk programming language index 2019, Java and Python are in second place after JavaScript .

Basic concepts

The design of the Java programming language had five main goals:

simplicity
Compared to other object-oriented programming languages ​​such as C ++ or C # , Java is simple because it has a reduced language scope and does not support operator overloading and multiple inheritance, for example .
Object orientation
Java is one of the object-oriented programming languages .
Distributed
A number of simple options for network communication, from TCP / IP protocols to remote method invocation to web services , are mainly offered via Java's class library; the Java language itself does not include direct support for distributed execution.
familiarity
Because of the syntactic proximity to C ++, the original similarity of the class library to Smalltalk class libraries and the use of design patterns in the class library, Java does not show any unexpected effects for the experienced programmer.
robustness
Many of the design decisions in defining Java reduce the likelihood of unwanted system errors; to be mentioned are the strong typing, garbage collection, exception handling and the absence of pointer arithmetic.
safety
Concepts such as the class loader, which controls the secure transfer of class information to the Java virtual machine, and security managers, which ensure that only access to program objects for which the appropriate rights are available, are available.
Architecture neutrality
Java was developed in such a way that the same version of a program runs in principle on any computer hardware, regardless of its processor or other hardware components.
portability
In addition to being architecture neutral, Java is portable. This means that primitive data types are standardized in their size and internal representation as well as in their arithmetic behavior. For example, one is floatalways an IEEE 754 float with a length of 32 bits. The same applies, for example, to the class library, which can be used to create a GUI that is independent of the operating system .
Efficiency
Due to the optimization option at runtime, Java has the potential to achieve better performance than languages ​​that are limited to compile-time optimization (C ++ etc.). This is offset by the overhead caused by the Java runtime environment , so that the performance of, for example, C ++ programs is exceeded in some contexts, but not achieved in others.
Interpretability
Java is compiled in machine-independent bytecode , which in turn can be interpreted on the target platform. The Java Virtual Machine by Oracle interprets Java byte code, compiles it for performance reasons and optimized before it.
Parallelizability
Java supports multithreading , i.e. the parallel execution of independent program sections. In addition, the language itself offers the key words synchronizedand volatileconstructs that support the "Monitor & Condition Variable Paradigm" by C. A. R. Hoare . The class library contains additional support for parallel programming with threads. Modern JVMs map a Java thread to operating system threads and thus benefit from processors with several computing cores .
Dynamic
Java is structured in such a way that it can be adapted to dynamically changing framework conditions. Since the modules are only linked at runtime, parts of the software (e.g. libraries) can be delivered again, for example, without having to adapt the remaining program parts. Interfaces can be used as the basis for communication between two modules; the actual implementation can, however, be changed dynamically and, for example, also during runtime.

Object orientation

Dependency graph of the Java core classes (created with jdeps and Gephi ). In the middle of the diagram you can see the most commonly used classes Object and String.

The basic idea of object-oriented programming is to summarize data and associated functions as closely as possible in a so-called object and to encapsulate them externally ( abstraction ). The intention behind this is to make large software projects easier to manage and to increase the quality of the software. Another goal of object orientation is a high degree of reusability of software modules.

A new aspect of Java compared to the object-oriented programming languages ​​C ++ and Smalltalk is the explicit distinction between interfaces and classes , which is expressed by appropriate keywords interfaceand class. Java does not support inheriting from several independent base classes (so-called "multiple inheritance" as in C ++ or Eiffel ), but it does support the implementation of any number of interfaces, which can also solve many of the corresponding problems. Here are method signatures and standard implementations of methods passed on to the derived classes, but no attributes .

Java is not completely object-oriented because the basic data types ( int , boolean , etc.) are not objects (see also Java syntax ). From Java 5 onwards, however, they are automatically converted into the corresponding object types and vice versa using autoboxing that is transparent for the programmer .

example

Source code
/**
 * 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".
 */
public 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 auf der Konsole aus.
		System.out.println("Hund sagt: 'Wuf Wuf'");
	}
}

/**
 * Deklariert die Klasse "Katze" als Unterklasse der Klasse "Tier".
 * Die Klasse "Katze" erbt damit die Felder und Methoden der Klasse "Tier".
 */
public 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'");
	}
}

public 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();
	}
}
Console output
Tier sagt nichts.
Hund sagt: 'Wuf Wuf'
Tier sagt nichts.
Katze sagt: 'Miau'

Reflection

Java offers a Reflection API as part of the runtime environment . This makes it possible to access classes and methods at runtime whose existence or exact characteristics were not known at the time the program was created. Often this technique is related to the design patterns factory method ( Factory Method applied).

Annotations

With Java 5, Sun has added annotations to the programming language . Annotations allow the notation of metadata and, to a certain extent, enable user-defined language extensions. The purpose of the annotations is, among other things, the automatic generation of code and other important documents in software development for recurring patterns based on the shortest possible references in the source text. So far, only Javadoc comments with special JavaDoc tags were used in Java , which were evaluated by doclets such as the XDoclet .

Annotations can also be included in the compiled class files. The source code is therefore not required for their use. In particular, the annotations are also accessible via the Reflection API. For example, they can be used to expand the bean concept .

Modular execution on remote computers

Java offers the possibility of writing classes that run in different execution environments. For example, applets can be run in web browsers that support Java. The Java security concept can be used to ensure that unknown classes cannot cause any damage, which is particularly important with applets (see also sandbox ). Examples of Java modules that can be executed in corresponding execution environments are applets , servlets , portlets , MIDlets , Xlets , translets and Enterprise JavaBeans .

features

Duke, the Java mascot

Object access in Java is implemented internally in the VM using references that are similar to pointers known from C or C ++ . The language definition (Java Language Specification) calls them “Reference Values” to make it clear that they are transferred in the source code of the respective program as Call by value . For security reasons, these do not allow the actual memory address to be recognized or modified. So-called pointer arithmetic is therefore excluded in Java. By design, a common type of error that occurs in other programming languages ​​can be excluded from the outset.

Correlating classes (English in packages packages combined). These packages make it possible to restrict the visibility of classes, structure larger projects and separate the namespace for different developers. The package names are structured hierarchically and usually begin with the (reverse) Internet domain name of the developer, e.g. com.google for class libraries that Google makes available. Class names only have to be unique within a package. This makes it possible to combine classes from different developers without causing name conflicts. However, the hierarchy of package names has no semantic meaning. In terms of visibility between the classes of two packages, it does not matter where the packages are in the name hierarchy. Classes are either only visible for classes in their own package or for all packages.

Furthermore, the language supports threads ( concurrently running program parts) and exceptions (English exception ). Java also includes a garbage collection (English garbage collector ) which are not (more) referenced objects from memory.

Java makes an explicit distinction between interfaces and classes . A class can implement any number of interfaces, but always has exactly one base class . Java does not support direct inheritance from several classes (" multiple inheritance "), but inheritance across several hierarchy levels (class child inherits from class father , which in turn inherits from class grandfather , etc.). Depending on the visibility ( public, protected, default / package-private , private) inherits the class methods and attributes (also called fields) from their class ancestors. All classes are - directly or indirectly - Objectderived from the root class .

An extensive class library belongs to Java. The programmer is thus offered a uniform interface (application programming interface, API) that is independent of the underlying operating system .

With Java 2, the Java Foundation Classes (JFC) were introduced, which provide Swing , among other things , which is used to generate platform-independent graphical user interfaces (GUI) and is based on the Abstract Window Toolkit .

syntax

Java syntax / grammar and semantics are documented in the Java Language Specification from Sun Microsystems . The following example program outputs the message "Hello world!", Which is classic among programmers, followed by a line break on the output medium.

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

Creation and further development

Emergence

The origin and development of the Java programming language and related technology are described in the article Java technology .

Oracle and JCP

In addition to Oracle, a large number of individuals, small and large companies such as Apple , IBM , Hewlett-Packard and Siemens take care of the further development of the Java language specification in the Java Community Process (JCP). The JCP was launched in 1998 by Sun Microsystems.

Java as free software

Sun had promised to publish its JDK under the GNU General Public License ; with the takeover by Oracle, open licensing was also taken over. On November 13, 2006, the first parts of the javac compiler and the virtual machine hotspot were published as open source . In addition, a community page was opened with OpenJDK , with the help of which the development is to be coordinated. On May 8, 2007, large parts of the "Java SE" source code for creating a JDK followed. The exception to this was code for which Sun did not have the necessary rights to release it. This is therefore only available in compiled form. Sun also announced that developments based on the OpenJDK may carry the “Java Compatible” logo if they are certified according to the “Java Compatibility Kit” (JCK).

Previously, the Java source code was included with every JDK, among other things, and although this made it possible to view it, it was not allowed to be modified at will. Therefore, in addition to the official JCP, there are also various independent associations that have set themselves the goal of making Java available under a free open source license. The best known of these projects were Apache Harmony , Kaffe and the GNU Classpath project . At the moment there is another major implementation in addition to OpenJDK that publishes current Java releases, Eclipse OpenJ9. This JVM implementation was given to the Eclipse Foundation by IBM. OpenJ9 is licensed under EPL 2.0 , Apache 2.0 and GNU 2.0 with Classpath Exception .

Differences from similar languages

In addition, Java offers the possibility of executing various scripting languages ​​from Java code. There are also a number of programming languages ​​that are compiled according to Java bytecode. This means that program parts can also be implemented in other programming languages. With JDK Version 7, which was released on July 28, 2011, the support for dynamic "foreign languages" by the virtual machine has also been improved.

JavaScript

Java must not be confused with the scripting language JavaScript . JavaScript was developed by Netscape Communications , was formerly called LiveScript and was renamed JavaScript as part of a cooperation between Netscape and Sun Microsystems.

JavaScript is a dynamically typed , object-based, but, until ECMAScript 2015 , classless scripting language with a syntax similar to C, Perl or Java, but differs from Java in many ways. Despite the similarity of the names of the two programming languages, Java differs more from JavaScript than, for example, from C ++ or C #. JavaScript is mainly used in HTML pages for embedded programming in order to enable interactive web applications.

Small talk

Smalltalk is one of the oldest object-oriented programming languages. Java inherits from Smalltalk the basic concept of a class tree in which all classes are attached. All classes come either directly or indirectly from the class java.lang.Object. In addition, the concepts have been automatic garbage (garbage collector) and the virtual machine taken as well as a variety of other features of the language Smalltalk.

However, Smalltalk does not know any primitive data types such as int- even a simple number is an object. This concept was not adopted by Java, but from Java 5 onwards, primitive data types are converted into the corresponding object types using autoboxing, and vice versa.

C ++

Java is based on the syntax of the C ++ programming language . In contrast to C ++, however, multiple inheritance or pointer arithmetic was not used. Classes can only have one superclass (single inheritance), but they can implement any number of interfaces. Interfaces correspond to abstract classes in C ++ that have no attributes or concrete methods, but are used conceptually differently from the abstract classes also possible in Java. The internal memory management is largely relieved of the Java developer; this is done by automatic garbage collection . However, even this mechanism does not guarantee that memory leaks are completely excluded . Ultimately, the programmer must ensure that objects that are no longer used are no longer referenced by any running thread. Mutually referencing objects that can no longer be accessed by any thread via references are also released, whereby it is up to the Garbage Collector (GC) to determine when and whether these objects are released at all. Each object class also has a method called finalize()that can be called by the garbage collector to perform additional "cleanup". However, there is no guarantee when or if this will happen. It is therefore not comparable to a destructor from C ++.

In addition to multiple inheritance and memory arithmetic, other C ++ language constructs were deliberately left out in the development of Java:

In contrast to C ++, it is not possible in Java to overload operators (for example arithmetic operators such as +and -, logical operators such as &&and ||, or the index operator []), i.e. to give them a new meaning in a certain context. On the one hand, this simplifies the language itself and prevents source codes from being made illegible with operators that are overloaded with semantics that are difficult to understand. On the other hand, user-defined types with overloaded operators would appear more like built-in types in C ++ - numerical code in particular would be easier to understand that way. The language definition of Java defines type-dependent behavior of the operators +(addition for arithmetic operands, otherwise for concatenation of character strings “string concatenation”) and &, |and ^(logical for boolean and bitwise for arithmetic operands). This makes these operators appear at least like partially overloaded operators.

The C ++ construct of the templates , which allow algorithms or even entire classes to be defined independently of the data types used in them, was not adopted in Java. From version 5, Java supports so-called generics , which do not allow any metaprogramming , but similar to C ++ templates allow type-safe containers and the like.

The keyword was constreserved in Java, but has no function. The alternative to const(and preprocessor directives) is final. In contrast to const, final is not inherited in a method signature and is therefore only valid in the current scope. The finalmodifier can be a class (which can no longer be derived from this), an attribute (whose value can only be set once) or a method (which can then be overwritten).

C # (.NET)

The .NET platform from Microsoft can be seen as a competitor to Java. With the specification of C # , Microsoft tried, as part of its .NET strategy, to strike the balance between creating a new language and the easy integration of existing components.

Conceptual differences to Java exist in particular in the implementation of callback mechanisms. In .NET, this support has delegate (English delegates ) implemented a concept that is similar to function pointers. In Java, this can be achieved through method references or lambda expressions.

Further support .NET languages called attributes ( attributes ) that allow the functionality of the language metadata in the code to expand (a similar functionality in the form of the above annotation included in Java 5.0). C # also contains elements of the language Visual Basic , for example, characteristics ( properties ), as well as concepts of C ++.

In .NET, as in Java, it is possible to declare exceptions to a method. In Java, exceptions can be declared in such a way that they also have to be processed ( checked exception ).

Windows system commands (Win- ABI invocations) can in .NET through platform invoke are invoked or using C ++ / CLI. This is not possible in Java, but with the Java Native Interface it is possible to reference C and C ++ code directly via DLL and to have it executed outside the Java Virtual Machine .

Scala

Scala is a programming language that combines object-oriented and functional paradigms and, like Java , can be executed on the Java Virtual Machine .

In contrast to Java, and similar to C #, the type system is standardized and includes reference and value types. Users can define other types - in Java are the available types of values to the fixed predefined primitive types ( int, long, ...) limited.

Instead of interfaces ( interface), Scala uses so-called traits ( traits), which can contain reusable method implementations. Additional functionality that is not included in Java includes types and higher-order functions , pattern matching and freely selectable method and class names.

As in C #, there are no checked exceptions . However, methods can be @throwsannotated. Scala removes, among other things, the concept of static methods and classes (replaced by companion objects ), raw types , the need for getter and setter methods and the uncertain variance of arrays.

The variance of generic types does not have to take place during use, as in Java ( use-site variance ), but can be specified directly with the declaration ( declaration-site variance ).

Kotlin

Kotlin is a cross-platform , statically typed programming language , which in bytecode for the Java Virtual Machine is translated (JVM), but also in JavaScript - Source Code or (using LLVM in) machine code may be converted.

Unlike in Java, with Kotlin the data type of a variable is not noted in front of the variable name, but after it, separated by a colon. However, Kotlin also supports type inference , so that the type can often be omitted if it is clear from the context. A line break is sufficient to end the statement, but a semicolon can also be used as an option. In addition to classes and methods (in Kotlin: member functions ) from object-oriented programming , Kotlin supports procedural programming using functions as well as certain aspects of functional programming . As with C u. a main function .

Kotlin can also be used to develop Android apps and has been officially supported by Google since 2017 . Since May 2019, Kotlin has been Google's preferred language for Android app development.

Application types

Many different types of applications can be built using Java.

Java web applications

Java web applications are Java programs that are loaded and started on a web server and run or are displayed in a web browser for the user. Usually part of the web application runs on the server (the business logic and persistence ) and another part on the web browser (the logic of the graphical user interface ). The server part is usually written entirely in Java, the browser part usually in HTML and JavaScript. However, it is also possible to write Java web applications including GUI logic completely in Java (see e.g. Google Web Toolkit or the Remote Application Platform ). Well-known examples of Java web applications are Twitter , Jira , Jenkins or Gmail (which is not completely, but largely written in Java).

Java desktop applications

Normal desktop programs are grouped together under desktop applications. Internet communication programs as well as games or office applications that run on a normal PC are so called. Well-known examples of Java desktop applications are the integrated development environment Eclipse , the file sharing program Vuze or the computer game Minecraft .

Java applets

Java applets are Java applications that typically run in a web browser . They are usually limited to an area of ​​a website that is defined by a special HTML tag. A Java-capable browser is required to run Java applets. This type of application is no longer supported since Java 11 after it was marked as "obsolete" in Java 9.

Apps

Apps are smaller applications for mobile devices such as cell phones, smartphones, PDAs or tablets. They typically run on special Java platforms such as Java ME that are optimized for running Java applications on mobile devices .

Apps for the Android operating system from Google are programmed in the Java language described here, but are based on a different class library - API .

Development environments

There are a wide variety of development environments for Java, both proprietary and free ( open source ). Most development environments for Java are also written in Java themselves.

The best-known open source environments that provided by the Eclipse Foundation Eclipse and developed by Sun NetBeans .

Among the commercial development environments, IntelliJ IDEA from JetBrains (which is Free Software in the Community Edition ), JBuilder from Borland and JCreator and the NetBeans- based Sun ONE Studio from Sun are the most common. There is also a version of Eclipse that has been expanded by a few hundred plugins, which was sold by IBM under the name WebSphere Studio Application Developer ("WSAD") and is called Rational Application Developer ("RAD") from version 6.0 .

With macOS version 10.3 or higher, Apple delivers the Xcode development environment , which supports various programming languages, but focuses on C, C ++, Objective-C and Swift. Android Studio is recommended for programming Android apps with Java .

The IDE BlueJ is designed for beginners and educational purposes , where, among other things, the relationships between the various classes are graphically displayed in the form of class diagrams .

Many text editors offer support for Java, including Emacs , jEdit , Atom , Visual Studio Code , Vim , Geany , Jed , Notepad ++ and TextPad .

Compiler

A Java compiler translates Java source code (file extension “.java”) into executable code. A basic distinction is made between bytecode and native code compilers. Some Java runtime environments use a JIT compiler to translate the bytecode of frequently used program parts into native machine code at runtime .

Bytecode compiler

Normally, the Java compiler translates the programs into a bytecode (file extension “.class”) that cannot be executed directly , which the Java Runtime Environment (JRE) executes later. The current HotSpot technology compiles the bytecode into native processor code at runtime and optimizes it depending on the platform used. This optimization takes place gradually, so that the effect occurs that program parts become faster after repeated processing. On the other hand, this technique, which is a successor to just-in-time compilation, means that Java bytecode could theoretically be executed just as quickly as native, compiled programs.

The HotSpot technology has been available since JRE version 1.3 and has been continuously improved since then.

Examples of bytecode compilers are javac (part of the JDK ) and was Jikes (discontinued, functionality up to Java SE 5) from IBM .

Native compiler

There are also compilers for Java that can translate Java source texts or Java bytecode into “normal” machine code , so-called ahead-of-time compilers . Natively compiled programs have the advantage that they no longer need a JavaVM , but also the disadvantage of no longer being platform-independent.

Examples of native Java compilers were Excelsior JET (discontinued until Java SE 7) and GNU Compiler for Java (GCJ, discontinued until J2SE 5.0) such as MinGW , Cygwin or JavaNativeCompiler (JNC).

Wrapper

Another option is to “wrap ” the Java program in another program ( to wrap ); this outer shell then serves as a replacement for a Java archive . It automatically searches for an installed Java runtime environment in order to start the actual program and informs the user about where to download a runtime environment , if one is not already installed. So you still need a runtime environment to start the program, but the user receives an understandable error message that helps him further.

Java Web Start is a more elegant and standardized approach to this solution - it allows applications to be activated easily with a single click of the mouse and ensures that the latest version of the application is always running. This automates complicated installation or update procedures.

Examples of Java wrappers are JSmooth or Launch4J . JBuilder from Borland and NSIS are also able to create a wrapper for Windows.

See also

literature

Web links

Commons : Java (programming language)  - collection of images, videos and audio files

Individual evidence

  1. Jon Byous: Java Technology: The Early Years. (No longer available online.) Sun Microsystems April 2003, archived from the original on January 5, 2010 ; Retrieved December 22, 2009 : "On May 23, 1995, John Gage, director of the Science Office for Sun Microsystems, and Marc Andreessen, cofounder and executive vice president at Netscape, stepped onto a stage and announced to the SunWorld ™ audience that JavaTM technology was real, it was official, and it was going to be incorporated into Netscape NavigatorTM, the world's portal to the Internet. "
  2. Java SE at a Glance. Retrieved April 6, 2020 .
  3. ^ Robert McMillan: Is Java Losing Its Mojo? wired.com , August 1, 2013, accessed on September 29, 2018 (English): "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. "
  4. ^ TIOBE Programming Community Index. tiobe.com, 2015, accessed April 3, 2015 .
  5. Stephen O'Grady: The RedMonk Programming Language Rankings: January 2020. In: tecosystems. RedMonk, February 28, 2020, accessed March 5, 2020 (American English).
  6. Silke Hahn: Python makes history: 2nd place in the programming language ranking. heise online, March 3, 2020, accessed on March 5, 2020 .
  7. ^ The Java Language: An Overview. 1995 Sun Whitepaper
  8. Hajo Schulz: Daniel Düsentrieb, C #, Java, C ++ and Delphi in the efficiency test . Part 1. In: c't . No. 19 . Heise Zeitschriften Verlag, Hanover 2003, p. 204–207 ( heise.de [accessed October 21, 2010]). Hajo Schulz: Daniel Düsentrieb, C #, Java, C ++ and Delphi in the efficiency test . Part 2. In: c't . No.
     21 . Heise Zeitschriften Verlag, Hanover 2003, p. 222–227 ( heise.de [accessed October 21, 2010]).
  9. JP Lewis, Ulrich Neumann: Java pulling ahead? Performance of Java versus C ++. Computer Graphics and Immersive Technology Lab, University of Southern California, January 2003, accessed on October 21, 2010 (English): “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. "
  10. ^ Robert Hundt: Loop Recognition in C ++ / Java / Go / Scala . Ed .: Scala Days 2011. Stanford, California April 27, 2011 (English, online [PDF; 318 kB ; accessed on November 17, 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
  11. ^ CAR Hoare: Monitors: an operating system structuring concept . ( Memento of the original from May 20, 2013 in the Internet Archive ) Info: The archive link was inserted automatically and has not yet been checked. Please check the original and archive link according to the instructions and then remove this notice. (PDF) In: Communications of the ACM. 17, No. 10, 1974, pp. 549-557. @1@ 2Template: Webachiv / IABot / cacm.acm.org
  12. a b Autoboxing in Java (English)
  13. Scott Stanchfield: Java is Pass-by-Value, Dammit! (No longer available online.) JavaDude.com, archived from the original on May 15, 2008 ; accessed on November 5, 2010 (English). Info: The archive link was inserted automatically and has not yet been checked. Please check the original and archive link according to the instructions and then remove this notice. @1@ 2Template: Webachiv / IABot / javadude.com
  14. 4.1. The Kinds of Types and Values. In: Java Language Specification. Oracle Inc., accessed September 24, 2016 .
  15. Community page about the development of the open source JDK from Sun
  16. Sun Microsystems press announcement of May 8, 2007 ( Memento of May 11, 2008 in the Internet Archive ) (English)
  17. heise online: Java: IBM transfers the JVM J9 to the Eclipse Foundation. Retrieved September 24, 2019 .
  18. eclipse openj9 license. Eclipse Foundation, August 1, 2018, accessed September 24, 2019 .
  19. Roadmap JDK 7 (English)
  20. JDK 7 Features - JSR 292: VM support for non-Java languages ​​(InvokeDynamic) (English)
  21. ^ Brendan Eich: JavaScript at Ten Years ( Memento of May 28, 2007 in the Internet Archive ) ( MS PowerPoint ; 576 kB).
  22. semicolons . jetbrains.com. Retrieved February 8, 2014.
  23. functions . jetbrains.com. Retrieved February 8, 2014.
  24. Maxim Shafirov: Kotlin on Android. Now official. In: Kotlin Blog. May 17, 2017. Retrieved June 18, 2019 (American English).
  25. heise online: Google I / O: Google's commitment to Kotlin. Retrieved June 18, 2019 .
  26. Java Magazine - Twitter ( Memento of the original from April 5, 2014 in the Internet Archive ) Info: The archive link was inserted automatically and has not yet been checked. Please check the original and archive link according to the instructions and then remove this notice. @1@ 2Template: Webachiv / IABot / www.oraclejavamagazine-digital.com
  27. Deprecated APIs, Features, and Options. Retrieved September 14, 2019 .
  28. JEP 289: Deprecate the Applet API. Retrieved September 14, 2019 .
  29. Dalibor Topic: Moving to a Plugin-Free Web. Retrieved September 14, 2019 .
  30. Aurelio Garcia-Ribeyro: Further Updates to 'Moving to a Plugin-Free Web'. Retrieved September 14, 2019 .
  31. JetBrains Community Edition on GitHub
  32. Apple Xcode Features
  33. Swift for XCode