|
|
Java programming languageJava is an object-oriented programming language developed initially by James Gosling and colleagues at Sun Microsystems. The language, initially called Oak (named after the Oaks outside Gosling's office), was intended to replace C Plus Plus, although the feature set better resembles that of Objective C programming language. Java should not be confused with JavaScript, which shares only the name and a similar C programming language-like syntax. Sun Microsystems currently maintains and updates Java regularly. Specifications of the Java language, the JVM (Java Virtual Machine) and the Java API are community-maintained through the Sun-managed Java Community Process. Java was developed in 1991 by James Gosling and other Sun engineers, as part of the ''Green Project''. After first being made public in 1994, it achieved prominence following the announcement at 1995's SunWorld that Netscape Communications Corporation would be including support for it in their Netscape Navigator browser. ==History== ===Early history=== The Java platform and language began as an internal project at Sun Microsystems in the December 1990 timeframe. Patrick Naughton, an engineer at Sun, had become increasingly frustrated with the state of Sun's C Plus Plus and C programming language APIs and tools. While considering moving to NeXT, Patrick was offered a chance to work on new technology and thus the Stealth Project was started. The Stealth Project was soon renamed to the Green Project with James Gosling and Mike Sheridan joining Patrick Naughton. They, together with some other engineers, began work in a small office on Sand Hill Road in Menlo Park, California to develop a new technology. The team originally considered C++ as the language to use, but many of them as well as Bill Joy found C++ and the available APIs problematic for several reasons. Their platform was an embedded platform and had limited resources. Many members found that C++ was too complicated and developers often misused it. They found C++'s lack of garbage collection (computer science) to also be a problem. Security, distributed programming, and Thread (computer science)ing support was also required. Finally, they wanted a platform that could be easily ported to all types of devices. According to the available accounts, Bill Joy had ideas of a new language combining the best of Mesa programming language and C. He proposed, in a paper called Further, to Sun that its engineers should produce an object-oriented environment based on C++. James Gosling's frustrations with C++ began while working on Imagination, an SGML editor. Initially, James attempted to modify and extend C++, which he referred to as C++ ++ -- (which is a play on the name of C++ meaning 'C++ plus some good things, and minus some bad things'), but soon abandoned that in favor of creating an entirely new language, called Oak named after the oak tree that stood just outside his office. Like many stealth projects working on new technology, the team worked long hours and by the summer of 1992, they were able to demo portions of the new platform including the Green operating system, Oak the language, the libraries, and the hardware. Their first attempt focused on building a Personal Digital Assistant-like device having a highly graphical interface and a smart agent called Duke to assist the user. The device was named Star7 after a telephone feature activated by *7 on a telephone keypad. The feature enabled users to answer the telephone anywhere. The PDA device itself was demonstrated on September 3, 1992. In November of that year, the Green Project was spun off to become a wholly owned subsidiary of Sun Microsystems: FirstPerson, Inc. The team relocated to Palo Alto. The FirstPerson team was interested in building highly interactive devices and when Time Warner issued an RFP for a set-top box, FirstPerson changed their target and responded with a proposal for a set-top box platform. However, the cable industry felt that their platform gave too much control to the user and FirstPerson lost their bid to Silicon Graphics. An additional deal with The 3DO Company for a set-top box also failed to materialize. FirstPerson was unable to generate any interest within the cable TV industry for their platform. Following their failures, the company, FirstPerson, was rolled back into Sun. ===Java meets the Internet=== In June and July of 1994, after a three-day brainstorming session with John Gage, James Gosling, Bill Joy, Patrick Naughton, Wayne Rosing, and Eric Schmidt, the team re-targeted yet again its efforts, this time to use the technology for the Internet. They felt that with the advent of the Mosaic (web browser) browser, the Internet was on its way to evolving into the same highly interactive vision that they had had for the cable TV network. Patrick Naughton wrote a small web browser, WebRunner, as a prototype. WebRunner would later be renamed HotJava. It was also in 1994 that Oak was renamed Java. An IP (intellectual property) search revealed that Oak had already been trademarked by a video adaptor card manufacturer so the team searched for a new name. The name Java was coined at a local coffee shop frequented by some of the members. It is not clear whether the name is an acronym or not. Most likely, it is not, however some accounts claim that it stands for the names of James Gosling, Arthur Van Hoff, and Andy Bechtolsheim. Others, that it is an acronym for Just Another Vague Acronym. In October of 1994, HotJava and the Java platform was demoed for Sun executives. Java 1.0a was made available for download in 1994, but the first public release of Java and the HotJava web browser came on May 23, 1995, at the SunWorld conference. The announcement was made by John Gage, the Director of Science for Sun Microsystems. His announcement was accompanied by a surprise announcement by Marc Andreessen, Executive Vice President of Netscape_Communications_Corporation, that Netscape would be including Java support in its browsers. In January of 1996, the JavaSoft business group was formed by Sun Microsystems to develop the technology. The College Board currently administers an Advanced Placement Program exam in Computer Science, which tests knowledge in Java and object oriented programming. The exam also tests knowledge on the Marine Biology Simulation Case Study a program written in Java. The exam switched from C++ to Java as its featured programming language in the 2003-2004 school year. ===Version history=== [[Image:Java WebStartApplicationMan.png|thumb|Java Web Start, introduced in Java 2, allows provisioning applications over the World Wide Web by clicking a Icon (computing) or a link on a website.]] The Java language has undergone several changes since JDK 1.0 as well as numerous additions of packages to the standard library: *1.0 (1996) — Initial release. *1.1 (1997) — Major additions, notably inner classes. *1.2 (December 4, 1998) — Codename ''Playground''. Major changes were made to the API (where reflection was introduced) and Sun's JVM (which was equipped with a JIT compiler), but these had little impact on the language itself: the only change to the Java language was the addition of the keyword ''strictfp''. This and subsequent releases were rebranded "Java 2", but this had no effect on any software version numbers. *1.3 (May 8, 2000) — Codename ''Kestrel''. Minor changes and fixes. *1.4 (February 13, 2002) — Codename ''Merlin''. As of 2004, the most widely used version. Added the Assertion (computing) keyword. *5.0 (September 29, 2004) — Codename ''Tiger''. (Originally numbered 1.5, which is still used as the internal version number.) Added a number of significant new language features. One in particular, Annotations, has been argued to be modeled on Microsoft's C sharp programming language, which was itself modeled on earlier versions of Java: **Generic programming — Provides compile-time type safety for collections and eliminates the need for most typecasting (programming). **Autoboxing/unboxing — Automatic conversions between primitive types (such as int) and wrapper types (such as Integer). **Metadata (computing) — also called Annotations, allows language constructs such as classes and methods to be tagged with additional data, which can then be processed by metadata-aware utilities **Enumeration (programming) — the enum keyword creates a type safety, ordered list of values (such as Day.monday, Day.tuesday, etc.). Previously this could only be achieved by non-typesafe constant integers or manually constructed classes (typesafe enum pattern). **Enhanced for program loop — the for loop syntax is extended with special syntax for iterating over each member of an array or Collection, using a construct of the form: for (Widget w: box) { System.out.println(w); } This example iterates over box, assigning each of its items in turn to the variable w, which is then printed to Standard streams#Standard output.
*6.0 (currently in development, estimated release date 2006) — Codename [https://mustang.dev.java.net/ ''Mustang'']. An early development version of the Java SDK version 6.0 (internal version number 1.6) was made available in November 2004. New builds including enhancements and bug fixes are released on a regular basis.
*7.0 — Codename ''Dolphin''. As of 2005, this is in the early planning stages.[http://weblogs.java.net/blog/editors/archives/2004/09/evolving_a_lang.html]
In addition to the language changes, much more dramatic changes have been made to the Java class library over the years, which has grown from a few hundred classes in version 1.0 to over three thousand in Java 5.0. Entire new APIs, such as Swing (Java) and Java2D, have been introduced, and many of the original 1.0 classes and methods have been deprecated.
==Language characteristics==
There were five primary goals in the creation of the Java language:
*It should use the object-oriented programming methodology.
*It should allow the same program to be executed on multiple computer platforms.
*It should contain built-in support for using Computer network.
*It should be designed to execute code from remote sources securely.
*It should be easy to use and borrow the good parts of older Object Oriented languages like C++.
Especially for the latter part, however sometimes extensions are required, like Corba or OSGi.
===Object orientation===
The first characteristic, object-oriented programming ("OO"), refers to a method of programming and language design.
Although there are many interpretations of OO, one primary distinguishing idea is to design software so that the various types of data it manipulates are combined together with their relevant operations. Thus, data and code are combined into entities called Object (computer science). An object can be thought of as a self-contained bundle of ''behavior'' (code) and ''state'' (data). The principle is to separate the things that change from the things that stay the same; often, a change to some data structure requires a corresponding change to the code that operates on that data, or vice versa. This separation into coherent objects provides a more stable foundation for a software system's design. The intent is to make large software projects easier to manage, thus improving quality and reducing the number of failed projects.
===Platform independence===
[[Image:SwingSet.png|thumb|The Look and Feel of a Java Graphical user interface is independent of the platform it is running on]]
The second characteristic, platform independence, means that computer programs written in the Java language must run similarly on diverse hardware. One should be able to write a program once and run it anywhere.
This is achieved by most compiler by compiling the Java language code "halfway" to bytecode—simplified machine instructions specific to the Java platform. The code is then run on a Java virtual machine (VM), a program written in native code on the host hardware that translates generic Java bytecode into usable code on the hardware. Further, standardized libraries are provided to allow access to features of the host machines (such as graphics, thread (computer science) and Computer network) in unified ways.
There are also implementations of Java compilers that compile to native object code, such as GCJ, removing the intermediate bytecode stage, but the output of these compilers can only be run on a single architecture.
Sun's license for Java insists that all implementations be "compatible". This resulted in a legal dispute with Microsoft after Sun claimed that the Microsoft implementation did not support the RMI and JNI interfaces and had added platform-specific features of their own. Sun sued and won both damages (some $20 million dollars) and a court order enforcing the terms of the license from Sun. In response, Microsoft no longer ships Java with Windows, and in recent versions of Windows, Internet Explorer cannot support Java applets without a third-party plugin. However, Sun and others have made available Java run-time systems at no cost for those and other versions of Windows.
The first implementations of the language used an interpreted virtual machine to achieve portability. These implementations produced programs that ran more slowly than programs written in C or C++, so the language suffered a reputation for producing slow programs. More recent implementations of the Java VM produce programs that run much faster than before, using multiple techniques.
The first technique is to simply compile directly into native code like a more traditional compiler, skipping bytecodes entirely. This achieves great performance, but at the expense of portability. Another technique, known as ''JIT compiler'' (JIT), compiles the Java bytecodes into native code at the time that the program is run.
More sophisticated VMs use ''dynamic recompilation'', in which the VM can analyze the behavior of the running program and selectively recompile and optimize critical parts of the program. Both of these techniques allow the program to take advantage of the speed of native code without losing portability.
Portability is a technically difficult goal to achieve, and Java's success at that goal has been mixed. Although it is indeed possible to write programs for the Java platform that behave consistently across many host platforms, the large number of available platforms with small errors or inconsistencies led some to parody Sun's "Write once, run anywhere" slogan as "Write once, debug everywhere".
Platform-independent Java is, however, very successful with server-side applications, such as web services, servlets, or Enterprise Java Beans - and meanwhile also with Embedded systems based on OSGi, using Embedded Java environments.
===Automatic garbage collection===
One argument against languages such as C Plus Plus is the burden of having to peform manual memory management. In C++, memory is allocated by the programmer to create an object, then deallocated to delete the object. If a programmer forgets or is unsure when to deallocate, this can lead to a memory leak, where a program consumes more and more memory without cleaning up after itself. Even worse, if a region of memory is deallocated twice, the program can become unstable and will likely crash.
In Java, this potential problem is avoided by garbage collection (computer science). Objects are created and placed at an address on the heap. The program or other objects can reference an object by holding a reference to its address on the heap. When no references to an object remain, the Java garbage collector automatically deletes the object, freeing memory and preventing a memory leak. Memory leaks, however, can still occur if a programmer's code holds a reference to an object that is no longer needed—in other words, they can still occur but at higher conceptual levels. But on the whole, Java's automatic garbage collection makes creation and deletion of objects in Java simpler and potentially safer than in C++.
It should be noted, however, that programmers have access to garbage collection in C++ via smart pointers, such as the ones provided by the Standard Template Library and Boost (programming)'s library. However, smart pointers have significant overhead in both speed and memory consumption, and fail when confronted by cyclical object graphs. Aside from that, common smart pointer implementations do not support polymorphic assignments combined with typesafety, as they are template-based.
===Interfaces and classes===
One thing that Java accommodates is creating an interface which classes can then implement. For example, an interface can be created like this:
public interface Deleteable {
void delete();
}
This code says that any class that implements the interface Deleteable will have a method named delete(). The exact implementation and function of the method are determined by each class. There are many uses for this concept; for example, the following could be a class:
public class Fred implements Deleteable {
//Must include the delete () method to satisfy the Deleteable interface
public void delete() { //code implementation goes here
}
//Can also include other methods
public void doOtherStuff() {
}
}
Then, in another class, the following is legal code:
public void deleteAll (Deleteable [] list) {
for (int i = 0; i < list.length; i++) {
list[i].delete();
}
}
because any objects in the array are guaranteed to have the delete() method. The Deleteable array may contain references to Fred objects, and the deleteAll() method needn't differentiate between the Fred objects and other Deleteable objects.
The purpose is to separate the details of the implementation of the interface from the code that uses the interface. For example, the Collection interface contains methods that any collection of objects might want to implement, like retrieving or storing objects, but a specific collection could be a resizeable array, a linked list, or any of a number of different implementations.
Methods defined by an interface are implicitly public and abstract. Fields defined by an interface are implicitly public, static, and final.
The feature is a result of compromise. The designers of Java decided not to support multiple inheritance because of the difficulty of C Plus Plus's multiple inheritance, but interfaces give some of the benefit of multiple inheritance with less complexity.
Java interfaces behave much like the concept of the Objective-C protocol.
===Input/Output===
Versions of Java prior to 1.4 only supported stream-based blocking I/O. This required a thread per stream being handled, as no other processing could take place while the active Thread (computer science) blocked waiting for input or output. This was a major scalability and performance issue for anyone needing to implement any Java network service. Since the introduction of NIO (New IO) in Java 1.4, this scalability problem has been rectified by the introduction of a non-blocking I/O framework (though there are a number of open issues in the NIO API as implemented by Sun Microsystems).
The non-blocking IO framework, though considerably more complex than the original blocking IO framework, allows any number of "channels" to be handled by a single thread. The framework is based on the Reactor Pattern.
===APIs===
Sun has defined three platforms targeting different application environments and segmented many of its application programming interfaces so that they belong to one of the platforms. The platforms are:
*Java 2 Platform, Micro Edition — targeting environments with limited resources,
*Java 2 Platform, Standard Edition — targeting workstation environments, and
*Java 2 Platform, Enterprise Edition — targeting large distributed enterprise or Internet environments.
The Class (computer science) in the Java APIs are organized into separate groups called packages in Java. Each package contains a set of related interfaces, classes and exception handling. Refer to the separate platforms for a description of the packages available.
The set of APIs is controlled by Sun Microsystems in cooperation with others through its Java Community Process program. Companies or individuals participating in this process can influence the design and development of the APIs. This process has been a subject of controversy.
In 2004, IBM and BEA publicly supported the notion of creating an official open source implementation of Java but as of 2005, Sun Microsystems has refused.
===Hello World example===
For an explanation of the tradition of programming "Hello World", see Hello world program.
// The source file must be named HelloWorld.java
public class HelloWorld
{
// The main method is passed an array of command-line parameters
public static void main(String[] args)
{
System.out.println("Hello world!");
}
}
===Miscellaneous===
The language distinguishes between bytes and character (computing)s. Characters are stored internally using UCS-2 (though as of Java 5, the language also supports using UTF-16, with surrogate (Unicode)s), and Java program source may contain any Unicode character. Although the language has special syntax for them, arrays and strings are not primitive types: they are reference types that can be assigned to java.lang.Object.
== Criticism ==
Most consider Java technology to deliver reasonably well on all these promises. The language is not, however, without drawbacks.
=== Language Issues ===
Java code is often more verbose than code written in other languages due to its frequent type declarations.
The division between primitive types and objects is disliked by programmers familiar with languages such as Smalltalk and Ruby_programming_language where everything is an object.
Non-object-oriented programming has to be simulated using static methods. This is more awkward than in languages that directly support it.
Some programmers miss multiple inheritance, which is available in many other languages.
Versions of Java before 5.0 required many explicit casts to be written due to the lack of generic types.
Java's generic types can be awkward to use because they are compile-time only constructs; generic type information is unavailable at runtime.
=== Library issues ===
The look and feel of GUI applications written in Java is often different from native applications.
Some parts of the standard Java libraries are considered excessively complicated, or badly designed, but cannot be changed due to the need for backward compatibility.
=== Performance issues ===
Java was designed with emphasis on security and portability, so low-level features like hardware-specific data types and pointers to arbitrary memory were deliberately omitted. These features must be accessed by calling C code using the Java Native Interface (JNI), which is inconvenient and can be a performance bottleneck.
Java array access can be slower than other languages due to range-checking.
The performance of Java programs can be difficult to predict due to dynamic compilation and garbage collection, and Java programs often use more memory than programs written in lower-level languages. Most major companies still use other languages for off the shelf software, as Java is typically considered too slow for major desktop applications.
==Java Runtime Environment==
The Java Runtime Environment or JRE is the software required to run any Application software deployed on the Java Platform (computing). End-users commonly use a JRE in software packages and plug-ins. Sun also distributes a superset of the JRE called the Java 2 SDK (more commonly known as the JDK), which includes development tools such as the Java compiler, documentation tool, and debugger.
;Components of the JRE
* Java Library (computer science) - which are the compiled byte codes of source developed by the JRE implementor to support application development in Java. Examples of these libraries are:
** The core libraries, which include:
*** Collection libraries which implement data structures such as lists, associative array, tree structure and Set (computer science)
*** XML Parsing libraries
*** Security
*** i18n libraries
** The integration libraries, which allow the application writer to communicate with external systems. These libraries include:
*** The Java Database Connectivity (JDBC) API for database access
*** Java Naming and Directory Interface (JNDI) for lookup and discovery
*** Java remote method invocation and CORBA for distributed application development
** User Interface libraries, which include:
*** The (heavyweight, or native mode) Abstract Windowing Toolkit (AWT), which provides graphical user interface components, the means for laying out those components and the means for handling events from those components
*** The (lightweight) Swing (Java) libraries, which are built on AWT but provide (non-native) implementations of the AWT widgetry
*** APIs for audio capture, processing, and playback
* A platform dependent implementation of Java virtual machine (JVM) which is the means by which the byte codes of the Java libraries and third party applications are executed
* Plugins, which enable Java applets to be run in web browsers
* Java Webstart, which allows Java applications to be efficiently distributed to end users across the Internet
* Licensing and documentation
== Extensions and related architectures ==
Extension (computing)s and architectures closely tied to the Java programming language include:
*J2EE (Enterprise edition)
*J2ME (Micro-Edition for PDAs and cellular phones)
*JMF (Java Media Framework)
*JNDI (Java Naming and Directory Interface)
*JSML (Java Speech API Markup Language)
*JDBC (Java Database Connectivity)
*JDO (Java Data Objects)
*JAIN (Java API for Integrated Networks)
*JDMK (Java Dynamic Management Kit)
*Jini (a network architecture for the construction of distributed systems)
*Jiro
*JXTA (open source-based peer-to-peer infrastructure)
*Java Card
*JavaSpaces
*JMI (Java Metadata Interface)
*Java Management Extensions (Java Management Extensions)
*JavaServer Pages (JavaServer Pages)
*JavaServer Faces (JavaServer Faces)
*JNI (Java Native Interface)
*J3D (A high level API for 3D graphics programming)
*JOGL (A low level API for 3D graphics programming, using OpenGL)
*OSGi (Dynamic Service Management and Remote Maintenance)
*SuperWaba (JavaVMs for handhelds)
*Modular Audio Recognition Framework (Modular Audio Recognition Framework)
==Related free software==
;Compilers and JVMs
*GCJ, a Java compiler that is part of GNU Compiler Collection, the GNU Compiler Collection
*Jikes, a Java compiler originally developed by IBM
*GNU Classpath, GNU's non-compatible replacement for Sun's implementation of the Java class libraries
*Kaffe, a clean room implementation, non-compatible of the Java virtual machine with associated class libraries
*SableVM, a Java Virtual Machine meant to be robust, efficient and portable
*IKVM
*SuperWaba, a Java-subset virtual machine, with a minimalistic design suitable for Personal digital assistant programming
*Groovy, a language similar to Java, that also compiles code that runs on the Java virtual machine
;Integrated Development Environments
* Free software IDEs
**NetBeans
**Eclipse (computing)
**JEdit
**BlueJ
* Non-free IDEs
**CodeGuide
**IntelliJ IDEA
**JBuilder
**JCreator
**JCreator LE (freeware)
**IBM Websphere Studio Application Developer
**BEA Weblogic
**JDeveloper
;Developer tools
*The Jakarta Project produces free software in Java, especially tools for building web applications
*JUnit, a widely used framework for creating automated unit testing
*JSwat, a standalone, graphical Java debugger
*Spring Framework, a framework for developing Java web applications
*Apache Ant, a Java written software tool for automating software build processes
*Struts, a framework for developing Java web applications
*Javassist
*Byte Code Engineering Library
*JMangler
*Geronimo (Apache), a compatible implementation of J2EE being created within the Apache Software Foundation
*Jarhoo helps [http://www.jarhoo.com/] resolve classpath issues by providing details of Jar files containing a class causing NoClassDefFoundError or ClassNotFoundException problems
* InterProlog ( http://www.declarativa.com/interprolog/ ) A programming library bridge between Java and Prolog, implementing bi-direccional predicate/method calling between both languages; Java objects are mapped into Prolog terms and vice-versa through serialization. Allows the development of Graphical user interface and other functionality in Java while leaving logic processing in the Prolog layer. Supports XSB and SWI Prolog.
==See also==
*Java virtual machine
*Comparison of Java to C Plus Plus
*Optimization of Java
*Java Platform Debugger Architecture
*List of Java-programs
*Java User Group
*Artefaktur
*Java XML
*Java Servlet
*Java 2 Platform, Standard Edition (J2SE)
*List of Java scripting languages
*Javapedia
*Java community
*JavaOS
*Java keywords
*zAAP (Java processor)
*Microsoft J Plus Plus
*Modular Audio Recognition Framework
==References==
* Jon Byous, [http://java.sun.com/features/1998/05/birthday.html ''Java technology: The early years'']. Sun Developer Network, no date [ca. 1998]. Retrieved April 22, 2005.
* James Gosling, [http://today.java.net/jag/old/green/ ''A brief history of the Green project'']. Java.net, no date [ca. Q1/1998]. Retrieved April 22, 2005.
* James Gosling, Bill Joy, Guy L. Steele, Jr., and Gilad Bracha, ''The Java language specification'', second edition. Addison-Wesley, 2000. ISBN 0201310082.
* James Gosling, Bill Joy, Guy L. Steele, Jr., and Gilad Bracha, ''The Java language specification'', third edition. Addison-Wesley, 2005. ISBN 0321246780.
* Tim Lindholm and Frank Yellin. ''The Java Virtual Machine specification'', second edition. Addison-Wesley, 1999. ISBN 0201432943.
==External links==
===Sun===
*[http://java.sun.com/ Official Java home site]
*[http://java.sun.com/docs/books/jls/ The Java Language Specification, Third edition] Authoritative description of the Java language
*[http://java.sun.com/j2se/1.4.2/docs/api/ J2SE API reference, v1.4.2]
*[http://java.sun.com/j2se/1.5.0/docs/api/ J2SE API reference, v5.0]
*[http://java.sun.com/docs/books/tutorial/ Sun's tutorial on Java Programming]
*[http://java.sun.com/docs/white/langenv/ Original Java whitepaper], 1996
*[http://www.java.com/en/download/help/testvm.xml Test your Java VM].
===Alternatives===
*[http://wiki.debian.net/?BlackDownJava Blackdown Java, includes] Mozilla plug-in
===Frameworks===
*[http://www.osgi.org OSGi: Dynamic Service Management]
===General===
*Newsgroup [news:comp.lang.java comp.lang.java] ([http://groups.google.com/groups?group=comp.lang.java Google Groups link]), and its [http://www.ibiblio.org/javafaq/javafaq.html FAQ]
*[http://wiki.java.net/bin/view/Javapedia/ Javapedia project]
*[http://jinx.swiki.net/ The Java Wiki]
*[http://mindprod.com/jgloss/jgloss.html A Java glossary]
*[http://www.cookienest.com/content/manual-javabasics.php Java Basics Manual]
*[http://www.bruceeckel.com/ Thinking in Java], by Bruce Eckel
*[http://en.pure-java.de/ Java-API with examples]
*[http://ei.cs.vt.edu/~history/Youmans.Java.html Java: Cornerstone of the Global Network Enterprise]
*[http://ibiblio.org/obp/thinkCS/ How to Think Like a Computer Scientist] Java version
*[http://www.illegalaccess.org/ Vulnerabilities in Java Environments]
===Historical===
*[http://java.sun.com/features/1998/05/birthday.html Java(TM) Technology: The Early Years]
*[http://java.sun.com/people/jag/green/ A Brief History of the Green Project]
*[http://www.cs.umd.edu/users/seanl/stuff/java-objc.html Java Was Strongly Influenced by Objective-C]
*[http://www.wired.com/wired/archive/3.12/java.saga.html The Java Saga]
*[http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html A history of Java]
===Criticism===
*Paul Graham, [http://www.paulgraham.com/javacover.html ''Java's Cover'']. Paulgraham.com, April 2001.
*Simson Garfinkel, [http://www.salon.com/tech/col/garf/2001/01/08/bad_java/ ''Java: Slow, ugly and irrelevant'']. Salon.com, January 8, 2001.
*[http://www.jwz.org/doc/java.html ''java sucks''], by Jamie Zawinski
*[http://www.gnu.org/philosophy/java-trap.html Free But Shackled — The Java Trap], by Richard Stallman, and [http://today.java.net/jag/page7.html#59 James Gosling's response] (third item down)
*[http://www.idinews.com/darkside.pdf The Dark Side of Java] (Portable Document Format) by Conrad Weisert ([http://66.102.7.104/search?q=cache:P_gdZzcIXy0J:www.idinews.com/darkside.pdf+&hl=en View as HTML])
*[http://magnonel.guild.net/~schwern/papers/Why_I_Am_Not_A_Java_Programmer/why.html Why I Am Not A Java Programmer] ([http://mungus.schwern.org/~schwern/papers/Why_I_Am_Not_A_Java_Programmer/why.html mirror])
===Third-party software===
*[http://www.beanshell.org/ beanshell] An interpreted implementation of Java, which may be used as a shell or an embedded extension language
*[https://cajo.dev.java.net/ cajo] A simple, powerful, and free framework; for transparent, dynamic cooperation, between Java Virtual Machines
*[http://www.superwaba.com.br/ SuperWaba, a Java-like virtual machine]
*[http://www.jdistro.com/ A pure java desktop]
*[http://www.vikdavid.com/mobile/ Java on PocketPC]
*[http://www.jcreator.com/ JCreator official website]
*[http://www.netbeans.org/ Netbeans official website]
*[http://www.nextapp.com/products/echo/ Echo Framework] An open source framework for developing object-oriented, event-driven, thin-client Web applications.
===Java portals, magazines and content sites===
*[http://www.esus.com Esus.com] A site containing thousands of categorized links and Q&A's
*[http://www.jexamples.com JExamples.com] A site to find examples of Java API's
*[http://www.theserverside.com/ TheServerSide.com] A popular Java J2EE portal
*[http://www.javalobby.org/ Javalobby] A popular forum for Java discussions
*[http://www.java.net/ Java.Net] A site for Java articles and upcoming projects
*[http://www.onjava.com/ OnJava.com] An oreilly site for Java with many good Java articles
*[http://www.indicthreads.com/ IndicThreads.com] An upcoming portal for Java and J2EE
*[http://www.javapro.com/ JavaPro magazine] A popular java magazine
*[http://www.java.sys-con.com/ Java Developer's Journal] Online edition of a popular java magazine
*[http://www.javaworld.com/ JavaWorld magazine] A popular java magazine
*[http://www.JavaKB.com/ Java KB] Offers Java discussions, news, articles, and an open source project directory.
*[http://www.javasight.com/ JavaSight.com] Java news & Books.
*[http://www.javarss.com/ JavaRSS.com] A Java portal of Java websites rich in Java & J2EE News, Articles, Blogs, Groups and Forums.
*[http://www.javagamedevelopment.net/ Java Game Development] Daily news and articles on Java game development
*[http://JavaToolbox.com JavaToolbox] List of the available development tools and libraries for Java/J2EE
Programming languages
Java platform
Java programming language
Sun Microsystems
lv:valoda Java
vi:Java
th:ภาษาจาวา
Java programming language----- ''An event mentioned in this article is a MediaWiki:May 23 selected anniversaries'' ----- ==Incorrect information== There's a paragraph regarding networking facilities that bridges the "platorm independent" goal and "networking libraries" goal. It's not a correct paragraph, but I don't know the best way to split it. Help, please... -User:Alan D I don't see the problem, if any. The only places those are mentioned together is where they are specifically mentioned as being the goals of the language, where "goals of the language" is the topic. --LDC If you don't see a problem with it, then I'm happy. -User:Alan D ---- == A few more topics to add == Any volunteer for : - the Java Security Model ? - the Java Community Process ? ==Java history== Some notes about the Java version history would be nice. An especially which version is included in which browser. Kwaku :Maybe you're confusing Java with JavaScript? ::Java 1.1 was included with IE at some point. It's since been taken out (?). But it plugs into the current browser, but you have to DL & install it. —User:Frecklefoot 16:19, Apr 16, 2004 (UTC) ::: I just added a sentence near the beginning in an effort to disambiguate Java and JavaScript. Which is more common in web pages, and how does their function differ in web pages? I would guess javascript is used more often, but I really don't know. It would be nice if someone with more knowledge in this area than me could help amplify the distinction, since I'm willing to guess they are quite often confused by us non-computer jocks. User:Spalding 14:49, Feb 19, 2005 (UTC) ---- ==Reviews== Lee, have a look at [http://groups.google.com/groups?hl=en&threadm=20010920001016.15115.00000873%40mb-fm.aol.com&prev=/groups%3Fnum%3D25%26hl%3Den%26group%3Dcomp.lang.java.programmer%26start%3D25%26group%3Dcomp.lang.java.programmer]. Good reviews so far! :-) --LMS ---- ==This is a "How To" article== This should be moved to a howto somewhere, as it doesn't describe the language at all. :One of the most confusing concept for those just starting to learn the Java language is the notion of a :ClassPath that needs to be set before anything can be either compiled or executed. ::With recent versions, Java features a ''-classpath'' parameter which makes it unnecessary to set a ''CLASSPATH'' environment variable. In fact, I haven't used the latter since then. --User:MaikSchreiber 17:46, 2004 Oct 13 (UTC) ---- ==Java a platform too== Hmm, I think this article would be helped with a look-thru of the old [http://java.sun.com/docs/white/langenv/ Java whitepaper]. For one thing, Java is a platform as well as a language. The article as it stands is confusing on this issue. Also a major design goal is a relatively safe language for average programmers, so fingers aren't cut on the difficult parts of programming. Still, this article is well-written, and I'd change it right now except that it would take a little time to not chop up the text terribly. Maybe I would get rid of the part that says there are "four" design decisions behind Java, and just turn it into a list. :The article is titled "Java programming language", and is about the language, not the platform. If the article doesn't make this clear, then perhaps it could be reworded a bit and linked to another article about the platform. And frankly, the whitepaper is a pretty awful source of information--it's mainly a publicity piece for Sun, that contains all of their goals and ideas, but none of the day-to-day realities of the majority of working Java programmers. This is an encyclopedia, not an advertising medium. --LDC ::Nonetheless, this article is currently the redirect for 'Java platform' and now we have Groovy it would be very useful to point to a summary article like the Java section in the Sun Microsystems page. I'll make the same comment on the Java platform page. User:webmink ::: I have made a start on this. User:Smyth">User:Smyth|– User:Smyth 13:11, 13 Nov 2004 (UTC) :::There is also a section on Platform_(computing)#Java as a platform on the Platform (computing) page.--User:Jondel 18:49, 25 Sep 2004 (UTC) ==Java: a platform and a middleware too== I'd like a description as platform too. Java is not only a 1)platform and 2) a language it is also a middleware. Some how thid categories or definitions must be inserted or made. User:Jondel ===Java is platform independent=== is a myth, misleading and misnomer. Rather, the JVM is ubiquitous on all types of devices and chips. When they say platform-independent it is really because the Java interpreter or JVM can be found almost everywhere(on all devices/chips/sw packages). The installation of an interpreter or JVM has become an industry standard. Java is not the platform independent, ''Java is the platform''( or the ubiquitous JVM or Java interpreter is the platform). User:Jondel 04:09, 13 May 2004 (UTC)~~ :I think of a programming language as its syntax, its semantics and its standard libraries. For Java, these three things are in large part platform-independent. In real life most Java applications will execute the same way on all platforms. :It's true that Java requires a platform-dependent interpreter, but I wouldn't characterise the interpreter as part of the "language". Just as I wouldn't regard the compiler as part of the language for a compiled language. :It's also true that there are platform-specific APIs in Java, but these tend to be discouraged or deprecated in the documentation. It is quite possible to avoid these APIs for almost all applications, and in practice they are avoided most of the time. The Java programming language isn't perfectly platform-independent but it does a very good job of it. :User:Ben Arnold 04:50, 13 May 2004 (UTC) ::Different category ? ::Agreed on the language and it does a pretty good job of being platform independent. You seem to be a programmer. ::I am targetting beginners and newbies. Also I wanted to focus on the platform aspect. ::The term 'platform independence' may lead to confusion. If Java is to be described, it is important to explain or examine its aspect as a platform and the Java interpreter. What if a new OS does not have a JVM? The programmer would need to know that all bytecode actually needs an interpreter. People tend to think that the platform is where program was compiled? ::Maybe this should be under a different category (Java software?Java platform? Java API?) as the interpreter really is not part of the Java programming language. User:Jondel 05:49, 13 May 2004 (UTC)~~ ::: I'm of the (extreme) opinon that the intrepreter or compiler is absolutely nothing to do with the language, and that languages should be thought of as abstractly as the colour red, rather than a pot of red paint. User:Cgs 19:20, 13 May 2004 (UTC). ==Removed instruction== This appeared in one of the articles, and I don't really think it is encyclopedia content. It's really more of an instruction for us writers, so I'll just leave it here in Talk for now: Java is a trademark of Sun Microsystems. Like all trademarks, "Java" is an adjective; when referring to Java technology, use a generic term after the word "Java". Correct: "program written in the Java language runs on the Java platform." Wrong: "*program written in Java runs on Java." For more information, visit [http://www.sun.com/policies/trademarks Sun trademark policies]. ---- == JDK versions == How do the JDK version below relate to the so called "Java 2 platform"? * JDK 1.0, 1995 * JDK 1.1 * JDK 1.2 * JDK 1.3 * JDK 1.4, 2002 * JDK 2.0, 2003 My understanding is that everything 1.2 and beyond is the "Java 2 Platform", but I can't find proof. Here's the Java 2 page: [http://java.sun.com/j2se/] What is this JDK 2.0???? The latest version is 1.5 User:Enochlau --JDK is SDK is API and a complete set is a platform-- Hi! Please correct me if I am wrong. For most software developers, JDK (Java Development Kit) are nothing more than SDKs but in Java. SDKs are ussually provided commercially by a company. They are also ussually called APIs. A complete set to allow you to program are ussually called platforms. It would be good to refer to java.sun.com. For the meantime, I believe that JDK 2 is Java 2 and is the same as Java 1.2 . User:Jondel *Java 2 is java 1.2 up, the change was made since there where significant changes to the java API's. User:dns_server JDK 1.5 is called Java 5.0 and J2SE 5.0 - confusing I know, but thats what the latest version is called. J2SE/J2ME/J2EE 5.0 actually.. The reason they changed their mind and called it J2SE 5.0 instead of J2SE 1.5 was that it was such a large improvement over the previous versions. So same idea as when they increased the platform from Java to Java 2 at 1.2.. {| border="1" |+ Versions |- ! JDK !! Java !! Platform |- | 1.0 || 1.0 || 1 |- | 1.1 || 1.1 || 1 |- | 1.2 || 1.2 || 2 |- | 1.3 || 1.3 || 2 |- | 1.4 || 1.4 || 2 |- | 1.5 || 5.0 || 2 |} Speaking of versions, I believe that Java Web Start was released in 2000 sometime, Ie at around 1.3.1 release, if that matters. [http://java.sun.com/features/2000/06/webstart.html Article: Announcing Java Web Start Technology] ---- ==Objectionable phrasing== I object to the phrase "actually the entities containing data" in the section on Object Orientation. It's meaningless and unhelpful. However, I have already deleted it once, and the author re-inserted it. I don't hate it enough to delete it again, so I'll leave it to the wise Wikipedia editors. ---- ==Language facilities== '' "It contains language facilities and libraries for networking (more or less)." '' - What "language facilities" are being referred to, here? :Perhaps dynamic class loading? --User:P3d0 21:51, 13 Aug 2003 (UTC) ::Which isn't really a part of the language, as defined in http://java.sun.com/docs/books/jls/index.html Reflection is provided entirely by the class libraries. If we open it up to that, then C can do the same. :::No, dynamic class loading is not reflection. Two different things. Dynamic class loading is very much a part of the Java language. See http://java.sun.com/docs/books/jls/second_edition/html/execution.doc.html#44459 It is far more pervasive and integral to Java than to C; in fact, all classes in Java are loaded dynamically. ::::Thats the way the Java virtual machine works, not the Java programming language. Sure they're muddled beyond belief, but I feel as though I can safely draw a line and say that the dynamic loading you're talking about isn't part of the language. (I certainly hope that native implementations of the Java programming language won't do the same thing!) :::::Ok, what about when I say "2+3" and the VM adds two numbers together? I guess that's also how the VM works, not the language? Honestly, we can argue about this all day, but if you really don't think dynamic class loading is a fundamental part of the Java language, then perhaps we must simply agree to disagree. As you say below, it's not like it really matters anyway. --User:P3d0 13:08, 19 Aug 2003 (UTC) :::Besides, the fact that a language feature is implemented in a library is just good design, and doesn't mean that feature isn't part of the language. For instance, would you say that variadic functions are not part of C just because you need to #include Java programming languageJava platform Sun Microsystems Object-oriented programming languages Class-based programming languages Imperative programming languages Major programming languages Programming languages Concurrent programming languages Curly bracket programming languages See other meanings of words starting from letter: JJA | JB | JC | JD | JE | JF | JG | JH | JI | JK | JL | JM | JN | JO | JP | JR | JS | JT | JU | JW | JX | JY | JZ |Words begining with Java_programming_language: Java_programming_language Java_programming_language Java_programming_language Java_programming_language_family |
These materials are based on Wikipedia and licensed under the GNU FDL
YouTube.com videos better site than Turbo Tax 2007 |
|
|