Java platform: Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>Pat Palmer
(Java platform moved to Java programming language: too difficult to link to "Java platform"; too unlike links for other programming languages)
 
imported>Pat Palmer
No edit summary
Line 1: Line 1:
#REDIRECT [[Java programming language]]
'''Java''' is an [[object-oriented]] [[computer]] [[programming language]] created by [[Sun Microsystems|Sun]] and now managed as open-source software.  The language is part of the [[Java platform]] (a bundle of interdependent programs).  Sun began work on the platform in 1992 and formally launched the programming language in 1995, after which its use grew rapidly across the computer industry.  As of December 2006, the Java platform (Standard Edition) was in its 6th major revision (version 6.0).  Since 2003, Java has been the recommended teaching language for U. S. high schools for students planning to take the High School Advanced Placement exam<ref name="AP1">{{cite web|url=http://www.collegeboard.com/student/testing/ap/subjects.html|title="Subjects" High School Advanced Placement|publisher=The College Board|year=2007|accessdate=2007-05-17}}</ref> in Computer Science.
 
==Operating system independence==
A key reason for Java's widespread adoption is that Java programs are able to run on many different types of [[computer]]s.  This is made possible because an execution engine (a.k.a. [[Virtualization|virtual machine]] or [[runtime environment]]) and a set of standard libraries have been written for most [[operating system]]s.  The Java runtime environment makes all computers look alike so that Java programs can run identically on all of them.
 
[[Image:Java diagram.png|thumb|300px|right|Java's runtime environment hides the underlying operating system from the programmer]]
The platform consists of multiple programs, each of which provides a distinct portion of its overall capabilities.  The essential components in the platform are the Java [[source code]] [[compiler]], the [[Java class libraries]], and the [[Java runtime environment]].  The Java [[source code]] [[compiler]] converts Java [[source code]] (files with an extension of .java) into [[Java bytecode]] (files with an extension of .class).  The runtime environment is a special program that takes as input Java intermediate bytecode (.class files) for ''execution'' according to the rules laid out in the ''Java<sup>TM</sup> Virtual Machine Specification, Second Edition''<ref name="JVMspec2">{{cite web|url=http://java.sun.com/docs/books/jvms/|title="The Java Virtual Machine Specification, Second Edition" Copyright © 1997-1999 Sun Microsystems, Inc. 901 San Antonio Road, Palo Alto, California 94303 U.S.A.  All Rights Reserved.|publisher=[[Sun Microsystems, Inc.]]|year=1999|accessdate=2007-08-24}}</ref>.
 
The Java platform does not necessarily include an [[integrated development environment]]
([[IDE]]), although there is a Java runtime environment bundle available from Sun that includes the free NetBeans IDE.  Several other free IDE's exist, including the widely used, free Eclipse IDE (which is open-source and can be used for several other languages besides Java).
 
===Bytecode and JIT compilation===
[[Image:JITcompilation.jpg|thumb|300px|left]]
Java ''bytecode'' is an intermediate language; Java bytecode programs are loaded and run by a [[Java Virtual Machine]] (JVM), also known as a Java Runtime Environment (JRE).  JREs tend to be sophisticated; most of them implement the JVM specification by means of a ''[[Just-in-time compilation|just-in-time (JIT) compiler]]'' that, at runtime, converts intermediate bytecode into native machine code. JIT compilation occurs on a per method basis only the first time each method is called, after which the native code for that method remains cached in memory; this means that subsequent executions of that method run as fast as native programs.  Java programs tend to "warm up" after they have been executing for awhile, and in some cases they execute as efficiently as [[native code]] after an initial startup period.
 
The Java platform also includes extensive libraries (pre-compiled into Java bytecode) containing reusable code, as well as numerous ways for Java applications to be deployed, including being embedded in a web page as an applet, on a desktop machine for a single user, on a web server as a ''servlet'' (returning "dynamic" information to web browsers), or on a web server as a [[web service]] endpoint (procedure callable across a network from any kind of platform).  There are [http://java.sun.com/javase/6/docs/ several other components] as well.
 
==Editions==
Java programs may execute as ''applications'' on a desktop, on a web server as part of ''web applications'', or as ''applets'' in a browser (where they are restricted from changing the file system).  Java is thus delivered in one of three bundle types:<ref>{{cite web
| url=http://www.sun.com/software/opensource/java/project_overview.jsp
| title= Open-Source Java Project Overview
| accessdate=2007-04-08
}}</ref>
#Java Standard Edition or [[Java SE]] (formerly J2SE) for desktop machines
#the Java Enterprise Edition or [[Java EE]] (formerly J2EE) for web servers
#the Java Micro Edition or [[Java ME]] (formerly J2ME) for hand-held devices such as smart phones.
 
Furthermore, when downloading Java, users must select either the Java Runtime Edition (JRE) or Java Development Kit (JDK) version.  The JRE contains only the runtime (virtual machine) and pre-compiled libraries.  The JDK also contains the Java source code compiler and other utilities needed by programmers when developing Java programs.
 
===Versions===
*1.0
*1.1
*1.2
*1.3
*1.4
*5.0 - Java version 1.5 adheres to the ''Java Language Specification, 3rd Edition''<ref name="JavaSpec3">{{cite web|url=http://java.sun.com/docs/books/jls/|title="The Java Language Specification, Third Edition" Copyright © 1996-2005 Sun Microsystems, Inc.4150 Network Circle, Santa Clara, California 95054 U.S.A.All rights reserved.|publisher=[[Sun Microsystems, Inc.]]|year=2005|accessdate=2007-08-24}}</ref>.
*6.0
 
===Associated file extensions===
* Java source files have an extension of .java
* Java bytecode files (also called ''class'' files) have an extension of .class
* Java ''executable programs'' have an extension of .jar (Java ARchive); they must be loaded at runtime by a Java Runtime Environement (JRE)
** .jar files may contain byte codes, resources such as images, metadata, and they may even contain source code
** To view and separate the contents of a .jar file, make a copy of it and rename the copy to have a .zip extension.  Then open it like any .zip file.
*when people say "component" or library, they usually mean a .jar file that does not have an entry point--it has methods that we can call, but it doesn't run "standalone"
*''Enterprise'' Java (on a web server) uses two additional file archive extensions: .war and .ear .  A .war file can be used to install a ''web application'' into a servlet container (a Java Virtual Machine, or runtime, that collaborates with a web server).  An .ear file is used to install and encapsulate Enterprise Java Beans.
 
==Classes and objects==
The Java programming language is fully ''object-oriented'', which means code is always bundled into one or more ''classes''.  A class may contain methods--the ''operations'' of the class (like functions or procedures in older languages). A class may also contain data--the fields of the class (like variables in older programming languages).  The class is a recipe, written by a programmer, which tells the virtual machine how to create an ''object'' at runtime.  Classes, and objects created using them, have been compared to ''structs'' in C or C++, but classes and objects (unlike structs) can be extended and modified without recompilation. 
 
A Java program consists of cooperating objects of different ''types''.  Some of the classes (''types'') are made from classes coded by the application programmer.  Some types are precompiled, from the standard Java libraries (written by Sun programmers); other types may be libraries that the programmer has modified (extended).
 
===Strong typing===
Prior to Java, C++ was the dominant programming language in the industry.  Compared with C++, Java code is typically more robust because the Java platform prevents direct pointer manipulation and and performs strong ''type'' checking at both compile- and run-time.
 
===The Java Class Libraries===
Also called the Base Class Library, these libraries ("packages") are available to every program written in Java, regardless of operating system platform.  They consist of ~2500 or more reusable classes.
 
==Competition with C# and the .NET platform==
In 2000, Microsoft introduced the .NET framework, a new platform with a Java-like language ([[C sharp|C#]]) and associated development tools.  The Java platform and the .NET framework have been competing vigorously on the desktop, but especially in the area of server technology.  Many [[software developer]]s (programmers) become expert on one or the other, but few have time to learn both.  The schism of understanding the two platforms has been widened due to misinformation and disinformation, with a fair amount of zealotry on the part of each system's defenders.
 
From a historical viewpoint, the two systems may be seen as having different goals.  A primary goal for Java was to enable a program to run on several different operating systems; this was accomplished by providing implementations of the Java virtual machine for all prevalent [[operating system|operating systems]], including members of the Unix family, Linux, Max OS X and most versions of Windows.
 
Microsoft has been widely criticized for only implementing its .NET runtime "only on Windows." Such criticism does not take into account that Windows is not a single operating system (at least not from the viewpoint of a programmer who must call routines in the operating system).  Even before Microsoft Vista appeared in 2007, there were already approximately 35 versions of Windows, all with slightly different application programming interfaces (API's).  The difficulty of developing software for these many different Windows systems had led to a situation called "DLL Hell", where the wrong versions of dynamic link libraries (DLL's) were encountered by programs trying to run.  Creating the .NET framework solved this huge problem for Microsoft by making all versions of Windows alike to programmers. 
 
In fact, some .NET programs can run on non-Windows platforms.  Miguel de Icaza (co-creator of [[GNOME]]) has created an [[open source]] implementation of the .NET framework for Unix-like operating systems; it runs on [[Mac OS X]], [[Linux]] and [[Sun Microsystems|Sun's]] [[Solaris]]).  Called [[Mono]], this independent implementation of a "common language runtime" is based on .NET's ECMA/ISO standards<ref name="Mono Project Main page">{{cite web| url=http://www.mono-project.com/Main_Page | title="Mono Project Main page" | date=Retrieved 2007-04-25}}</ref> and is not under the jurisdiction or ownership of Microsoft. 
 
The .NET framework and the Java platform have diverged in various other ways, including that .NET was designed to allow many different programming languages to use its runtime and libraries (whereas the Java platform was not used fpr multiple languages until very recently).  There was no theoretical reason for Java being the only language that initially used the Java runtime.  It was only since perhaps 2006, in response to Microsoft's multi-language .NET strategy, that Sun finally began a push to get additional languages  "targeting" the Java runtime.
 
===Platform comparison===
 
<ul>
<li>Java was the model
for Microsoft when it created C# in 2002<ul>
<li>Java and C# code look very similar; it is fairly easy to switch
between the two</li>
</ul>
</li><li>Java is cross-platform; .NET is cross-language:<ul>
<li>Java provides freedom from <i>all</i> OS differences, by making
necessary cross-platform compromises; Java does
    <b>not</b> provide cross-<i>language</i> calling</li>
<li>.NET makes 36 versions of Windows alike for programmers; it eliminates the "DLL hell" which formerly
occurred when installing Windows applications</li>
<li>.NET libraries can be used by any of the .NET compiled languages (of
which there are dozens); libraries can be written in any .NET language</li>
</ul>
</li><li>the two platforms compete fiercely in the world wide web<ul>
<li>JSP's require Apache web servers (Linux or Unix); these are HTML
interlaced with code</li>
<li>&nbsp;&nbsp;&nbsp; called "servlets" if all code</li>
<li>ASP's require
Microsoft's IIS6 web server; these are HTML interlaced with code</li>
<li>&nbsp;&nbsp;&nbsp; called "web handlers" if all code</li>
<li>both Linux and Microsoft web servers use load-balancing across mirrored web
farms to scale up</li>
<li>so-called "dynamic" languages such as Ruby are seen by
some as the next stage beyond Java and .NET</li>
</ul></li>
<li>it's an arms race!</li>
</ul>
 
==External Links==
* [http://java.sun.com/docs/white/langenv/index.html The Java Language Environment], a white paper by [[James Gosling]] and [[Henry McGilton]], two of the original developers of Java
 
==References==
<references />
 
[[Category:CZ Live]]
[[Category:Computers Workgroup]]

Revision as of 21:00, 27 August 2007

Java is an object-oriented computer programming language created by Sun and now managed as open-source software. The language is part of the Java platform (a bundle of interdependent programs). Sun began work on the platform in 1992 and formally launched the programming language in 1995, after which its use grew rapidly across the computer industry. As of December 2006, the Java platform (Standard Edition) was in its 6th major revision (version 6.0). Since 2003, Java has been the recommended teaching language for U. S. high schools for students planning to take the High School Advanced Placement exam[1] in Computer Science.

Operating system independence

A key reason for Java's widespread adoption is that Java programs are able to run on many different types of computers. This is made possible because an execution engine (a.k.a. virtual machine or runtime environment) and a set of standard libraries have been written for most operating systems. The Java runtime environment makes all computers look alike so that Java programs can run identically on all of them.

Java's runtime environment hides the underlying operating system from the programmer

The platform consists of multiple programs, each of which provides a distinct portion of its overall capabilities. The essential components in the platform are the Java source code compiler, the Java class libraries, and the Java runtime environment. The Java source code compiler converts Java source code (files with an extension of .java) into Java bytecode (files with an extension of .class). The runtime environment is a special program that takes as input Java intermediate bytecode (.class files) for execution according to the rules laid out in the JavaTM Virtual Machine Specification, Second Edition[2].

The Java platform does not necessarily include an integrated development environment (IDE), although there is a Java runtime environment bundle available from Sun that includes the free NetBeans IDE. Several other free IDE's exist, including the widely used, free Eclipse IDE (which is open-source and can be used for several other languages besides Java).

Bytecode and JIT compilation

JITcompilation.jpg

Java bytecode is an intermediate language; Java bytecode programs are loaded and run by a Java Virtual Machine (JVM), also known as a Java Runtime Environment (JRE). JREs tend to be sophisticated; most of them implement the JVM specification by means of a just-in-time (JIT) compiler that, at runtime, converts intermediate bytecode into native machine code. JIT compilation occurs on a per method basis only the first time each method is called, after which the native code for that method remains cached in memory; this means that subsequent executions of that method run as fast as native programs. Java programs tend to "warm up" after they have been executing for awhile, and in some cases they execute as efficiently as native code after an initial startup period.

The Java platform also includes extensive libraries (pre-compiled into Java bytecode) containing reusable code, as well as numerous ways for Java applications to be deployed, including being embedded in a web page as an applet, on a desktop machine for a single user, on a web server as a servlet (returning "dynamic" information to web browsers), or on a web server as a web service endpoint (procedure callable across a network from any kind of platform). There are several other components as well.

Editions

Java programs may execute as applications on a desktop, on a web server as part of web applications, or as applets in a browser (where they are restricted from changing the file system). Java is thus delivered in one of three bundle types:[3]

  1. Java Standard Edition or Java SE (formerly J2SE) for desktop machines
  2. the Java Enterprise Edition or Java EE (formerly J2EE) for web servers
  3. the Java Micro Edition or Java ME (formerly J2ME) for hand-held devices such as smart phones.

Furthermore, when downloading Java, users must select either the Java Runtime Edition (JRE) or Java Development Kit (JDK) version. The JRE contains only the runtime (virtual machine) and pre-compiled libraries. The JDK also contains the Java source code compiler and other utilities needed by programmers when developing Java programs.

Versions

  • 1.0
  • 1.1
  • 1.2
  • 1.3
  • 1.4
  • 5.0 - Java version 1.5 adheres to the Java Language Specification, 3rd Edition[4].
  • 6.0

Associated file extensions

  • Java source files have an extension of .java
  • Java bytecode files (also called class files) have an extension of .class
  • Java executable programs have an extension of .jar (Java ARchive); they must be loaded at runtime by a Java Runtime Environement (JRE)
    • .jar files may contain byte codes, resources such as images, metadata, and they may even contain source code
    • To view and separate the contents of a .jar file, make a copy of it and rename the copy to have a .zip extension. Then open it like any .zip file.
  • when people say "component" or library, they usually mean a .jar file that does not have an entry point--it has methods that we can call, but it doesn't run "standalone"
  • Enterprise Java (on a web server) uses two additional file archive extensions: .war and .ear . A .war file can be used to install a web application into a servlet container (a Java Virtual Machine, or runtime, that collaborates with a web server). An .ear file is used to install and encapsulate Enterprise Java Beans.

Classes and objects

The Java programming language is fully object-oriented, which means code is always bundled into one or more classes. A class may contain methods--the operations of the class (like functions or procedures in older languages). A class may also contain data--the fields of the class (like variables in older programming languages). The class is a recipe, written by a programmer, which tells the virtual machine how to create an object at runtime. Classes, and objects created using them, have been compared to structs in C or C++, but classes and objects (unlike structs) can be extended and modified without recompilation.

A Java program consists of cooperating objects of different types. Some of the classes (types) are made from classes coded by the application programmer. Some types are precompiled, from the standard Java libraries (written by Sun programmers); other types may be libraries that the programmer has modified (extended).

Strong typing

Prior to Java, C++ was the dominant programming language in the industry. Compared with C++, Java code is typically more robust because the Java platform prevents direct pointer manipulation and and performs strong type checking at both compile- and run-time.

The Java Class Libraries

Also called the Base Class Library, these libraries ("packages") are available to every program written in Java, regardless of operating system platform. They consist of ~2500 or more reusable classes.

Competition with C# and the .NET platform

In 2000, Microsoft introduced the .NET framework, a new platform with a Java-like language (C#) and associated development tools. The Java platform and the .NET framework have been competing vigorously on the desktop, but especially in the area of server technology. Many software developers (programmers) become expert on one or the other, but few have time to learn both. The schism of understanding the two platforms has been widened due to misinformation and disinformation, with a fair amount of zealotry on the part of each system's defenders.

From a historical viewpoint, the two systems may be seen as having different goals. A primary goal for Java was to enable a program to run on several different operating systems; this was accomplished by providing implementations of the Java virtual machine for all prevalent operating systems, including members of the Unix family, Linux, Max OS X and most versions of Windows.

Microsoft has been widely criticized for only implementing its .NET runtime "only on Windows." Such criticism does not take into account that Windows is not a single operating system (at least not from the viewpoint of a programmer who must call routines in the operating system). Even before Microsoft Vista appeared in 2007, there were already approximately 35 versions of Windows, all with slightly different application programming interfaces (API's). The difficulty of developing software for these many different Windows systems had led to a situation called "DLL Hell", where the wrong versions of dynamic link libraries (DLL's) were encountered by programs trying to run. Creating the .NET framework solved this huge problem for Microsoft by making all versions of Windows alike to programmers.

In fact, some .NET programs can run on non-Windows platforms. Miguel de Icaza (co-creator of GNOME) has created an open source implementation of the .NET framework for Unix-like operating systems; it runs on Mac OS X, Linux and Sun's Solaris). Called Mono, this independent implementation of a "common language runtime" is based on .NET's ECMA/ISO standards[5] and is not under the jurisdiction or ownership of Microsoft.

The .NET framework and the Java platform have diverged in various other ways, including that .NET was designed to allow many different programming languages to use its runtime and libraries (whereas the Java platform was not used fpr multiple languages until very recently). There was no theoretical reason for Java being the only language that initially used the Java runtime. It was only since perhaps 2006, in response to Microsoft's multi-language .NET strategy, that Sun finally began a push to get additional languages "targeting" the Java runtime.

Platform comparison

  • Java was the model for Microsoft when it created C# in 2002
    • Java and C# code look very similar; it is fairly easy to switch between the two
  • Java is cross-platform; .NET is cross-language:
    • Java provides freedom from all OS differences, by making necessary cross-platform compromises; Java does not provide cross-language calling
    • .NET makes 36 versions of Windows alike for programmers; it eliminates the "DLL hell" which formerly occurred when installing Windows applications
    • .NET libraries can be used by any of the .NET compiled languages (of which there are dozens); libraries can be written in any .NET language
  • the two platforms compete fiercely in the world wide web
    • JSP's require Apache web servers (Linux or Unix); these are HTML interlaced with code
    •     called "servlets" if all code
    • ASP's require Microsoft's IIS6 web server; these are HTML interlaced with code
    •     called "web handlers" if all code
    • both Linux and Microsoft web servers use load-balancing across mirrored web farms to scale up
    • so-called "dynamic" languages such as Ruby are seen by some as the next stage beyond Java and .NET
  • it's an arms race!

External Links

References