![]() |
![]() |
|
![]() |
![]() |
Encyclopedia :
J :
JA :
JAV :
Java programming language |
|
|
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 oak trees outside Gosling's office), was intended to replace C++, although the feature set better resembles that of Objective C. Java should not be confused with JavaScript, which shares only the name and a similar C-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. HistoryMain article: History of Java 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 would be including support for it in their Navigator browser. OverviewThere were four primary goals in the creation of the Java language: Especially for the latter part, however sometimes extensions are required, like Corba or OSGi. Language characteristicsObject orientationThe first characteristic, object orientation ("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 objects. 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 independenceof a Java GUI is independent of the platform it is running on The second characteristic, platform independence, means that programss 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 compilers by compiling the Java language code "halfway" to bytecode—simplified machine instructions specific to the Java platform. The code is then run on a 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, threading and networking) 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 decided to no longer ship Java with Windows, and stock versions of Internet Explorer in such versions of Windows will break for Web sites using Java applets. However, Sun and others have made available Java run-time systems at no cost for those versions of Windows without Java. 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 just-in-time compilation (JIT), compiles the Java bytecodes into native code at the time that the program is run. 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 collectionOne major problem with languages such as C++ is the need for manual memory management. In C++, memory must be allocated by the programmer to create an object, then deallocated to delete the object. Often a programmer forgets or is unsure when to deallocate, leading 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 crash. In Java, this problem is solved by automatic garbage collection. 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 still occur but at higher conceptual levels. But on the whole, Java's automatic garbage collection makes creation and deletion of objects in Java much easier and safer than in C++. Interfaces and classesOne thing that Java accommodates is creating an interface which classes can then implement. For example, you can create an interface like this: public interface Deleteable {
void delete();
}
This code says that any class that implements the interface public class Fred implements Deleteable { //Must include the delete () method to satisfy the Deleteable interface public void delete() { } //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 The purpose is to separate the details of the implementation of the interface from the code that uses the interface. For example, the The feature is a result of compromise. The designers of Java decided not to support multi-inheritance but Interfaces in Java work differently than in other object-oriented programming languages — Java interfaces behave much more like the concept of the Objective-C protocol. Encoding independenceThe language distinguishes between bytes and characters. Characters are stored internally using UTF-16, and Java program source may contain any Unicode character. MiscellaneousAlthough the language has special syntax for them, arrays and strings are not primitive types: they are objects. CriticismMost consider Java technology to deliver reasonably well on all these promises. The language is not, however, without drawbacks. 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. Some programmers miss multiple inheritance, which is available in many other languages. 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. GUI applications written using Java's AWT and/or Swing components and running on older JREs usually don't look like native applications due to the use of a Java-specific cross platform look and feel. Alternative widget components such as SWT or GTK employ native widgets on some platforms for a look and feel that is closer to native GUI applications. Recent JRE versions (from 1.5 onwards) also use native widgets on some platforms. Some parts of the standard Java libraries are considered excessively complicated, or badly designed, but can't be changed due to the need for backward compatibility. Advocates of scripting languages tend to think Java code is excessively verbose due to type declarations and casts. Non-object-oriented programming has to be simulated using static methods. This is more awkward than in languages that directly support it. The division between primitive types and objects is disliked by programmers familiar with languages such as Smalltalk and Ruby where everything is an object. The JDK 5.0 releases blurs this a little with the introduction of automatic boxing and unboxing of primitive types. Versions of Java before JDK 5.0 required many explicit casts to be written due to the lack of support for generic types. The implementation of generic types is also considered controversial by some but was approved by the Java Community Process. Input/OutputVersions 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 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). 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. APIsSun has defined three platforms targeting different application environments and segmented many of its APIss so that they belong to one of the platforms. The platforms are:
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, but Sun retains ownership and control 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. Version historyby clicking a desktop icon The Java language has undergone several changes since JDK 1.0 as well as numerous additions of packages to the standard library: for (Widget w: box) {
System.out.println(w);
}
This example iterates over 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 and Java2D, have been introduced, and many of the original 1.0 classes and methods have been deprecated. Java Runtime EnvironmentThe Java Runtime Environment or JRE is the software required to run any application deployed on the Java platform. 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, Javadoc, and debugger. Components of the JREExtensions and related architecturesExtensionss and architectures closely tied to the Java programming language include: Hello World// 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!"); } } Related free softwareCompilers and JVMsIDEssDeveloper ToolsSee alsoExternal linksSunFrameworksGeneralHistoricalCriticismThird-party softwareJava portals, magazines and content sitesArticles, Java Blogs, Java Groups and Java Forums.
|
|
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License. |
|
| © 2008 Chamas Enterprises Inc. |