|
Java is an object-oriented programming language developed by James
Gosling
and colleagues at Sun Microsystems in the early 1990s. Unlike
conventional languages which are generally designed to be compiled to
native code, Java is compiled to a bytecode which is then run (generally
using JIT compilation) by a Java virtual machine.
The language itself borrows much syntax from C and C++ but has a much
simpler object model and does away with low level tools like programmer-manipulable
pointers. Java is only distantly related to JavaScript, though they have
similar names and share a C-like syntax.
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
operating systems.
- It should contain built-in support for using computer networks.
- 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++.
To achieve the goals of networking support and remote code execution,
Java programmers sometimes find it necessary to use extensions such as
CORBA, Internet Communications Engine, or OSGi.
Object orientation
The 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.
Another primary goal of OO programming is to develop more generic
objects so that software can become more reusable between projects. A
generic "customer" object, for example, should in theory have
roughly the same basic set of behaviors between different software
projects, especially when these projects overlap on some fundamental
level as they often do in large organizations. In this sense, software
objects can hopefully be seen more as pluggable components, helping the
software industry build projects largely from existing and well tested
pieces, thus leading to a massive reduction in development times.
Software reusability has met with mixed practical results, with two main
difficulties: the design of truly generic objects is poorly-understood,
and a methodology for broad communication of reuse opportunities is
lacking. Some open source communities want to help ease the reuse
problem, by providing authors with ways to disseminate information about
generally reusable objects and object libraries.
Platform independence
The look and feel of Java Swing GUIs is independent of the platform
on which they are runningThe second characteristic, platform
independence, means that 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 Java compilers by compiling the Java
language code "halfway" to bytecode (specifically Java
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 interprets and executes
generic Java bytecode. Further, standardized libraries are provided to
allow access to features of the host machines (such as graphics,
threading and networking) in unified ways. Note that, although there's
an explicit compiling stage, at some point, the Java bytecode is
interpreted or converted to native machine instructions by the JIT
compiler.
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) 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 poor performance. More recent JVM
implementations produce programs that run significantly 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 good performance, but at the expense of portability. Another
technique, known as just-in-time compilation (JIT), translates 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
optimise critical parts of the program. Dynamic recompilation can
achieve optimizations superior to static compilation because the dynamic
compiler can base optimizations on knowledge about the runtime
environment and the set of loaded classes. JIT compilation and dynamic
recompilation allow Java programs 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, and Enterprise JavaBeans,
as well as with Embedded systems based on OSGi, using Embedded Java
environments.
Automatic garbage collection
One possible argument against languages such as C++ is that
programmers should be spared the burden of having to perform manual
memory management. In C++, the programmer must allocate memory to create
any object stored on the heap, and deallocate memory to delete any such
objects. If a programmer forgets to deallocate memory or writes code
that fails to do so in a timely fashion, a memory leak can occur: the
program will consume a potentially arbitrarily large amount of memory.
In addition, if a region of memory is deallocated twice, the program can
become unstable and may crash.
In Java, this potential problem is avoided by automatic garbage
collection. The programmer determines when objects are created and the
Java runtime is responsible for managing the objects' lifecycle. The
program or other objects can reference an object by holding a reference
to it (which, from a low-level point of view, is its address on the
heap). When no references to an object remain, the Java garbage
collector automatically deletes the unreachable object, freeing memory
and preventing a memory leak. Memory leaks may 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. On the whole, Java's automatic garbage collection makes creation
and deletion of objects in Java simpler, potentially safer, and often
faster than in C++.
Garbage collection in Java is virtually invisible to the developer.
That is, developers may have no notion of when garbage collection will
take place as it may not necessarily correlate with any actions being
explicitly performed by the code they write.
Note that memory is only one of many resources which must be
managed. [source: Wikipedia
]
Links
Java.Sun.com
: The Java 2 Platform provides robust end-to-end solutions for networked
applications as well as a trusted standard for embedded applications. It
includes three editions.. Browse through the latest information and
technology developments from the Home page of Sun Micro Systems.
O'Reilly
Java Java Cryptography teaches you how to write secure programs using
Java's cryptographic tools. It includes thorough discussions of the
java.security package and the Java Cryptography Extensions (JCE), showing you
how to use security providers and even implement your own provider. It discusses
authentication, key management, public and private key encryption, and includes
a secure talk application that encrypts all data sent over the network. If you
work with sensitive data, you'll find this book indispensable
EarthWeb:
Java The internet.com and EarthWeb.com Network is a comprehensive source for
the latest global Internet news and information about the Internet. They allow
users to evaluate, compare and purchase Internet-related products and services.
The internet.com and EarthWeb.com Network attracts an experienced Internet
community looking for Real-time Internet industry news, Tutorials, training and
skills development Internet market research and more.
Sun's Java
Developer Connection Use this site to find the latest technical
information about JavaTM technology. Registration is required to access certain
areas. Search the database, submit new bugs and vote on what bugs you want
fixed. Subscribe to Bug Watch for notification on bug fixes.
Java
Tutorial, The : The Tutorial is organized into trails--groups of lessons on
a particular subject. This Tutorial contains information on the 1.0, 1.1, 1.2,
1.3, and 1.4 versions of the Java Platform, Standard Edition. Release
information is provided on an individual trail/lesson basis. All of the material
in The Java Tutorial is copyright-protected and may not be published in other
works without express written permission from Sun Microsystems.
Microsoft
Technologies for Java This release includes the latest versions of the
Java compiler (JVC), development tools, samples, and full documentation.
Although this SDK is targeted for Microsoft Windows 2000 developers, it is fully
backward compatible with the Microsoft Windows 95, Windows 98, Microsoft Windows
Millennium Edition (Me), Microsoft Windows NT® 4.0 and Microsoft Windows XP
developer environments.
Java
Applet Rating Service (JARS) JARS rates Java based applets and
applications and other Internet related software. We also rate commercial and
personal Web pages containing the use of these technologies, although policy
dictates that these be scored as a general "rated" rating unless they
have distinguished themselves with quality, unique, and innovative applets. The
JARS Java resource section contains a wide selection of Java resources submitted
to JARS. You can browse the various sub-sections to find what you may be looking
for or you can try locating it through the JARS search engine.
Java Boutique
Offers a good collection of Tutorials for the experienced and the novice
and Reviews containing summaries of the latest Java books, IDEs, and other tools
and products for programmers and non-programmers alike. The Development Tools
section contains up-to-date listing of Integrated Development Environments and
other development tools. The FAQ section contains answers to java related
questions.
Java
Foundation Classes The Java Foundation Classes (JFC) software extends
the original Abstract Window Toolkit (AWT) by adding a comprehensive set of
graphical user interface class libraries. The most recent supported release
containing JFC API is Java 2 SDK, Standard Edition, (J2SE) v 1.4. If you must
use JDK 1.1, you can get old implementations of some of the JFC features by
downloading JFC 1.1.
Forte
for Java Developer Resources Contains Downloads, Code Samples, Search,
bug tracking, early access program, downloads, and documentation for Java
developers.
Anfy
Java: Anfy 2.0 includes 52 applets using Java™ technology, ultimate
effects and navigational menu for web sites. Usable also as screensaver.
Download Anfy for Windows, Mac, Linux. On this site you can download and
use FOR FREE a couple of programs for graphic artists and web designers. Usable
as screen saver too!
Java
Grande The goal of the Java Grande Forum (JGF) is to develop community
consensus and recommendations for either changes to Java or establishment of
standards (frameworks) for Grande libraries and services. These language changes
or frameworks are designed to realize the best ever usability of Grande
programming environment.
Java-Linux
Porting Project We each are dedicated to the professional development
of the Java platform for Linux based on the community source concept. We see
participation in the Blackdown project as a cutting-edge opportunity for
intellectual cooperation between the open source community and the commercial
software industry. We each are committed to abiding by the agreements we've made
with Sun and other technology vendors.
Java
Advanced Imaging API The JavaTM Advanced Imaging application
programming interface (API) enables developers to easily incorporate
high-performance, network-enabled, scalable, platform-independent image
processing into Java technology-based applications and applets. By using the
inherent stengths of the Java language, Java Advanced Imaging extends the
concept of "Write Once, Run AnywhereTM" to image processing
applications.
Java
Cryptography: Java Cryptography teaches you how to write secure programs
using Java's cryptographic tools. It includes thorough discussions of the
java.security package and the Java Cryptography Extensions (JCE), showing you
how to use security providers and even implement your own provider. It discusses
authentication, key management, public and private key encryption, and includes
a secure talk application that encrypts all data sent over the network.
Java
Telnet Applet: The Java(tm) Telnet Applet is a fully featured telnet program
that allows users to connect and login to remote hosts via Internet or Intranet
using their WWW-Browser only. Not only it includes telnet compliant connection
services, but also the ability to dynamically load additional Terminal
Emulations and Modules. Look at our test page to see how the applet works or
download the package. This software is available under the terms of the GNU
General Public License as documented in the file COPYING. The site has a new url
and is under construction but already usable.
Java
Naming and Directory Interface (JNDI): The Java Naming and Directory
InterfaceTM (JNDI) is a standard extension to the JavaTM platform, providing
Java technology-enabled applications with a unified interface to multiple naming
and directory services in the enterprise. As part of the Java Enterprise API
set, JNDI enables seamless connectivity to heterogeneous enterprise naming and
directory services. Developers can now build powerful and portable
directory-enabled applications using this industry standard.
jCIFS:
CIFS in Java: This project is dedicated to the design and implementation of
CIFS solutions using the Java programming language. A complete, robust, and
extensible thread-safe client library has been implemented. This client will
enable any Java VM to access resources on CIFS/SMB networks. The java.io.File-like
interface is easy to use and has proven to be quite efficient, particularly in a
multi-threaded environment.
JPowered.com: If
you want to improve your web site then you have come to the right place. We have
high quality Java™ applets, servlets and DHTML JavaScript which will add a
dynamic feel to your site and make your pages far more interactive. Whether you
are looking for an applet to plug into your web page or an applet programmer
looking for a little inspiration then why not check out our pre-built applets.
We provide a fully functioning trial version for every applet listed below and
the source is also available.
CodeBrain.com:
The CodeBrain site is comprised of some 450+ pages, devoted to JAVA, Perl,
JavaScript, and web site development resources and issues. Contains very useful
ready to use java applets for your use. Some of the applets are for sale and
some are free to download. CodeBrain is constantly adding new scripts, applets,
and software. If you do not receive our newsletter, now might be a good time to
subscribe.
FreeJava:
FreewareJava is well organized website with quality applets. The list is
constantly updated, and many new featuers and appletes are added to make it ever
interesting and useful. If you are looking for some rare applets search this
website.
CodeGuru:
Welcome to the CodeGuru website, the online community of software developers.
While you are here you can also browse the online version of Thinking in Java.
You can also post your programming questions on the discussion board. We welcome
code submissions: If you've written a cool piece of code, please share it with
others.There are 675 links for you to choose from!
ColdBeans :
Formerly ColdJava, Coldbeans Software* implemented next version of servlets
office suite (JSOS). This product is a collection of servlets for Java(tm)
technology "out of the box" ready for building web-pages. JSOS plays
the same role as a set of CGI scripts and can be used by webmasters for adding
dynamic capabilities to their sites. JSOS has a rich set of servlets such as
Message Board, Chat, File Manager, Calendar etc. And now WAP/WML is also
supported.
FreewareJava :
Welcome to Freewarejava.com, an excellent starting point to everything Java™
technology on the net! Java applets of various types to add Java power to your
site. If you're a Java developer, learn from their source codes. Tutorials and
online courses on Java learning. (Commercial) sites devoted exclusively to Java.
Great way to keep up with the latest happenings in the Java Community. Java
books, complete online versions of Java books.
HotScripts.com
HotScripts.com is an Internet directory that compiles and distributes Web
programming-related resources. HotScripts.com is geared toward webmasters and
programmers who are looking to enhance their Web sites and intranets with
dynamic development tools. With thousands of Web programming resources available
on the Internet today, our mission is to provide Web developers with the best
collection of quality programming information and resources in the most
convenient fashion.
Java
Applet Collection by Sirius. If you want to improve your web site then
you have come to the right place. We have high quality Java™ applets, servlets
and DHTML JavaScript which will add a dynamic feel to your site and make your
pages far more interactive. Whether you are looking for an applet to plug into
your web page or an applet programmer looking for a little inspiration then why
not check out our pre-built applets. We provide a fully functioning trial
version for every applet listed below and the source is also available.
|