The developerWorks Java™ technology zone contains hundreds of articles, tutorials, and tips to help software developers make the most of the Java platform and related technologies. But when you're looking for a place to get started, sifting through the volume of resources available on the Web today can be overwhelming. developerWorks offers this page to provide an overview of Java technology basics within the overall context of the language. It includes starting points for further investigation in the form of links to relevant introductory developerWorks content, other educational resources, and IBM downloads and products.
Java technology is both a high-level, object-oriented programming language and a
platform. Java technology is based on the concept of a single Java Virtual Machine (JVM) -- a translator between the language and the underlying software and hardware. All implementations of the programming language must emulate the JVM, enabling Java programs to run on any system that has a version of the JVM.
The Java programming language is unusual because Java programs are both compiled (translated into an intermediate language called Java bytecode) and interpreted (bytecode parsed and run by the JVM). Compilation occurs once, and interpretation happens each time the program runs. Compiled bytecode is a form of optimized machine code for the JVM; the interpreter is an implementation of the JVM.
The Java platform is a software-only platform that runs on top of various
hardware-based platforms. It comes in three versions (see Multiple
editions of the Java platform, below). It consists of the JVM and the Java Application
Programming Interface (API), a large collection of ready-made software components
(classes) that ease the development and deployment of applets and applications,
including robust, secure, and interoperable enterprise applications. It spans everything from basic objects to networking and security and XML generation and Web services. The Java API is grouped into libraries of related classes and interfaces; the libraries are known as packages.
Along with the Java API, every full implementation of the Java platform includes:
Development tools for compiling, running, monitoring, debugging, and documenting applications.
Standard mechanisms for deploying applications to users.
User interface toolkits that make it possible to create sophisticated graphical user interfaces (GUIs).
Integration libraries that enable database access and manipulation of remote objects.
Java technology was developed by Sun Microsystems. The Java Community Process (JCP), an
open organization of international Java developers and licensees, develops and revises Java technology specifications, reference implementations, and technology compatibility kits. In 2007, Sun made the bulk of its core Java technology available as open-source software under the GNU general public license version 2 (GPLv2). (For more information, see How does Java technology relate to open source software development? below.)
The main benefit of the Java language is the portability of Java applications across hardware platforms and operating systems -- possible because the JVM installed on each platform understands the same bytecode.
The Java language and platform are impressively scalable. At the low end, existing applications can easily be adapted for devices with limited-memory resources. Scaling up, the language is an ideal framework for server-side Web programming. Because it was designed to run in a secure manner over networks, it affords this level of security when operating over the Internet. In essence, Java technology extends a user's computing power from the desktop to the resources of the Web. Web components are supported by runtime platforms called Web containers, whose services include request dispatching, security, concurrency, life-cycle management, and access to APIs such as naming, transactions, and e-mail. At the high end, Java application servers serve as Web containers for Java components, XML, and Web services that can interact with databases and provide dynamic Web content; they also provide an application-deployment environment for enterprise applications, with capabilities for transaction management, security, clustering, performance, availability, connectivity, and scalability.
The Java language was one of the first technologies to support open standards in the enterprise, opening the door to using XML and Web services to help share information and applications across business lines (see How does Java technology relate to SOA/Web services? below). Java technology serves as the backbone of many IBM products and technical consulting services (see What IBM tools and products are available for Java programmers? below) and is critical to key IBM initiatives:
Learn more about the IBM Service Oriented Architecture - SOA philosophy and how SOA helps users build composite applications that draw upon functionality from multiple sources within and beyond the enterprise to support horizontal business processes.
IBM's Business Process Management enabled by SOA offers a component-based, comprehensive approach to strategic change. Offerings are based on a flexible, extensible, open standards-based software -- including Java technology -- and hardware infrastructure.
Multiple editions of the Java platform
Three editions of the Java platform make it easier for software developers, service providers, and device manufacturers to target specific markets:
Java SE (Java Platform, Standard Edition). Formerly called J2SE, Java SE lets you develop and deploy Java applications on desktops and servers, as well as embedded and real-time environments. Java SE includes classes that support the development of Java Web services and provides the foundation for Java Platform, Enterprise Edition (Java EE). Java SE 6 ("Mustang") is the current major release of the Java SE platform. Many Java developers use Java SE 5, also known as Java 5.0 or "Tiger."
The Taming Tiger columns provide an excellent overview of Java SE 5.
The Magic with Merlin series covers the previous Java SE platform version, known as J2SE 1.4 or "Merlin." Many existing Java applications are based on J2SE 1.4, and most of the concepts in this series are relevant to Java SE 5 and Java SE 6 programming.
Java EE (Java Platform, Enterprise Edition). Formerly called J2EE, the enterprise version assists in the development and deployment of portable, robust, scalable, and secure server-side Java applications. Building on the foundation of Java SE, Java EE provides Web services, component-model, management, and communications APIs for implementing enterprise class SOA and Web 2.0 applications.
The J2EE pathfinder columns add to your knowledge of Java EE.
Java ME (Java Platform, Micro Edition). Formerly called J2ME, Java ME provides a robust, flexible environment for applications running on a broad range of mobile and embedded devices, such as mobile phones, PDAs, TV set-top boxes, and printers. The Java ME platform includes flexible user interfaces, a robust security model, a broad range of built-in network protocols, and extensive support for networked and offline applications that can be downloaded dynamically. Applications based on Java ME specifications are written once for a wide range of devices yet exploit each device's native capabilities.
Learn more in the comprehensive four-part series of two tutorials and two companion articles that focus on J2ME and the Mobile Information Device Profile (MIDP).
The developerWorks Java technology zone maintains a complete glossary of the standard Java component technologies. The following is a partial list of components, optional packages, and extensions for each edition of the platform -- the intricate parts that make up the whole -- complete with a short description and a link to a resource to demonstrate its place in the Java development world. Note that many of the following resources are available across the three editions.
JavaHelp is a platform-independent, extensible help system that enables developers and authors to incorporate online help in applets, components, applications, operating systems, and devices and to deliver Web-based online documentation. (See "Lend a helping hand to your Java applications.")
Java Native Interface (JNI) lets Java code that runs inside a JVM interoperate with applications and libraries written in other programming languages. (See "Handling events from native objects in Java code.")
Java Platform Debugger Architecture (JPDA) is the debugging support infrastructure for Java SE. (See "The future of software development.")
Java 2D API is a set of classes for advanced 2D graphics and imaging that provides extensive support for image compositing and alpha channel images, a set of classes to provide accurate color space definition and conversion, and a set of display-oriented imaging operators. (See the tutorial "Introduction to Java 2D.")
Java Web Start helps you simplify deployment of Java applications by letting users download and launch full-featured applications (such as spreadsheets) with a single click, without going through installation procedures. (See "Java Web Start.")
Certification Path API provides a set of APIs for creating, building, and verifying certification paths (also known as "certificate chains") for securely establishing the mapping of a public key to a subject. (See "Generate certificate chains for testing Java applications.")
Java Database Connectivity (JDBC) is an API that lets you access most tabular data sources from within Java code, providing cross-DBMS connectivity to a wide range of SQL databases and access to other tabular data sources, such as spreadsheets or flat files. (See "What's new in JDBC 3.0" and the tutorial "Understanding JDBC.")
Java Advanced Imaging (JAI) is an API that provides a set of object-oriented interfaces that support a simple, high-level programming model that lets developers manipulate images easily. (See "Govern your images with JSP code.")
Java Cryptography Extension (JCE) is a set of packages that provides a framework and implementations for encryption, key generation and agreement, and Message Authentication Code (MAC) algorithms. It provides encryption support for symmetric, asymmetric, block, and stream ciphers, and it supports secure streams and sealed objects. (See the tutorial "Java security: Crypto basics.")
Java Data Objects (JDO) is a standard interface-based Java model abstraction of persistence that lets programmers directly store their Java domain model instances into the persistent store (database), potentially replacing such methods as direct file I/O, serialization, JDBC, and EJB Bean Managed Persistence (BMP) or Container Managed Persistence (CMP) Entity Beans. (See the tutorial "Hands-on Java Data Objects"; for a deeper examination, try "Object-relation mapping without the container.")
Java Management Extensions (JMX) provides tools for building distributed, Web-based, modular and dynamic applications for managing and monitoring devices, applications, and service-driven networks. (See "Using Java platform management beans.")
Java Media Framework (JMF) enables audio, video, and other time-based media to be added to Java applications and applets. (See the tutorial "Java Media Framework basics.")
Java Naming and Directory Interface (JNDI) provides Java applications with a unified interface to multiple naming and directory services in the enterprise, enabling seamless connectivity to heterogeneous enterprise naming and directory services. (See "Industrial-strength JNDI optimization"; also try "Navigate the JNDI maze.")
Java Secure Socket Extensions (JSSE) is a set of packages that enables secure Internet communications, implementing a Java version of SSL (Secure Sockets Layer) and TLS (Transport Layer Security) protocols and including functionality for data encryption, server authentication, message integrity, and optional client authentication. (See "Java security with JAAS and JSSE"; also try the tutorial "Using JSSE for secure socket communication.")
Java Speech API (JSAPI) includes the Grammar Format (JSGF) and Markup Language (JSML) specifications and lets Java applications incorporate speech technology into user interfaces. JSAPI defines a cross-platform API to support command and control recognizers, dictation systems, and speech synthesizers. (See this section of "The Java 2 user interface.")
Java 3D is an API developers can use to incorporate scalable, platform-independent 3D graphics into Java applications easily by providing a set of object-oriented interfaces that support a simple, high-level programming model. (See the tutorial "Java 3D joy ride.")
Metadata Facility lets you mark classes, interfaces, fields, and methods as having particular attributes so that they can be processed in special ways by development tools, deployment tools, or runtime libraries. (See "Annotations in Tiger, Part 1: Add metadata to Java code.")
Java Content Repository API is an API for accessing content repositories in Java SE independently of implementation. A content repository is a high-level information-management system that is a superset of traditional data repositories. (See "Introducing the Java Content Repository API.")
Enumerations are a type that lets you represent specific pieces of data as constants, all in a type-safe manner. (See "Getting started with enumerated types.")
Concurrency Utilities are a set of medium-level utilities that provide functionality commonly needed in concurrent programs. (See the tutorial "Concurrency in JDK 5.0.")
Java API for XML Processing (JAXP) lets Java applications parse and transform XML documents independently of a particular XML processing implementation and gives you the flexibility to swap between XML processors without making application code changes. Java API for XML Binding (JAXB) lets you automate the mapping between XML documents and Java objects. (See the three-part tutorial "XML programming in Java technology"; dig deeper into JAXP with "All about JAXP, Part 1" and "All about JAXP, Part 2"; explore further in the Practical data binding article series; also check out the developerWorks XML zone.)
SOAP with Attachments API for Java (SAAJ) enables developers to produce and consume messages conforming to the SOAP 1.1 specification and SOAP with Attachments note. (Start with "Send and receive SOAP messages with SAAJ"; "Get ahead with Java Web services" will help you get up to speed with the Java Web Services Developers Pack.
JavaMail is an API that provides a set of abstract classes that model a mail system. (See the tutorial "Fundamentals of JavaMail API.")
Java Message Service (JMS) is an API that enables the development of portable, message-based applications for the Java platform by defining a common set of messaging concepts and programming strategies for all JMS technology-compliant messaging systems. (See the tutorial "Introducing the Java Message Service.")
JavaServer Faces (JSF) provides a programming model that helps developers craft Web applications by assembling reusable UI components in a page, connecting these components to an application data source, and wiring client-generated events to server-side event handlers. (See the JSF for nonbelievers column series and the tutorial "UI development with JavaServer Faces.")
JavaServer Pages (JSP) lets Web developers rapidly develop and easily maintain dynamic, platform-independent Web pages with separate user interfaces and content generation so designers can change the page layout without altering the dynamic content. The technology uses XML-like tags that encapsulate the logic that generates the content for the page. (See the tutorial "Introduction to JavaServer Pages technology"; also see the series JSP best practices.)
Standard Tag Library for JavaServer Pages (JSTL) is a collection of custom tags that enable many common Web site functions in a standardized format. (See "Update your JSP pages with JSTL" and try the four-part article series "A JSTL primer.")
Java Servlets extend and enhance the reach of Web servers by providing a component-based, platform-independent method for building Web-based applications without the performance limitations of CGI programs. (The tutorial "Introduction to Java Servlet technology" should get you started.)
J2EE Management Specification (JMX) defines a management information model for the J2EE platform. The J2EE Management Model is designed to be interoperable with many management systems and protocols and includes standard mappings of the model to the Common Information Model (CIM), an SNMP Management Information Base (MIB), and to the Java object model through a server resident EJB component, the J2EE Management EJB Component (MEJB). (See "From black boxes to enterprises: Management, JMX 1.1 style.")
Java Transaction API (JTA) is a high-level, implementation- and protocol-independent API that lets applications and application servers access transactions. Java Transaction Service (JTS) specifies the implementation of a Transaction Manager that supports JTA and implements the Java mapping of the OMG Object Transaction Service (OTS) 1.1 specification at the level below the API. JTS propagates transactions using the Internet Inter-ORB Protocol (IIOP). (See "Understanding JTS -- An introduction to transactions.")
Connected Device Configuration (CDC) is a standards-based framework for building and delivering applications that can be shared across a range of network-connected consumer and embedded devices. (See "Securing wireless J2ME.")
Mobile 3D Graphics API for J2ME (M3G) is a lightweight, interactive 3D graphics API that sits alongside J2ME and MIDP as an optional package. (See the two-part article "3D graphics for Java mobile devices.")
A service-oriented architecture is a component model that relates the functional units of an application (known as services, hence Web services) through well-defined interfaces and contracts between the services. The interface is defined in a neutral manner independently of the hardware, operating system, and programming language in which the service is implemented, letting services constructed on different systems interact with one another in a uniform, universal manner. SOAs are a loosely coupled alternative model to the more traditional, tightly coupled, object-oriented models.
The resulting Web services let business rules and processes be defined in XML so software applications can communicate in a platform- and programming language-independent manner. XML technology makes data portable and facilitates the creation of messages, while Java technology makes code portable. The fact that XML and the Java language work well together makes them an ideal combination to build and deploy Web services.
Myriad open source projects extend Java technology with libraries, tools, frameworks, applications, and application servers to help programmers harness this powerful technology. Various open source technologies have been incorporated into the Java platform itself, and others are perennial favorites (and in some cases de facto standards) for Java developers.
Learn more about some of the prominent open source technologies for Java programming:
The Apache Software Foundation is the umbrella organization for a panoply of open source projects that are predominantly Java language-based. Here's a sampling:
Apache Shale is a modern Web application-development framework -- the successor to Apache Struts -- based on JavaServer Pages technology. (The All hail Shale article series introduces Shale.)
Eclipse is a vendor-neutral open development platform and set of application frameworks for building software. The Eclipse platform is written in the Java language and provides a plug-in based framework that makes it easier to create, integrate, and use software tools. (IBM is a founding member of Eclipse and actively participates on the Eclipse.org Board of Stewards and its working subcommittees.) Learn more about some of the platform's component technologies for Java development:
AspectJ is an aspect-oriented extension to the Java language that can be used to modularize crosscutting concerns such as logging and exception handling. (See the tutorial "An introduction to AOP.")
You can take two routes to improving your skills: take a course (for certification or just for the learning) or teach yourself (and of course, practice by writing code). Besides tapping the knowledge of experienced developers, the coursework or certification path can offer tangible proof to prospective employers that you possess the skills needed to build the technology they require. And by experimenting on your own and using available resources, you sharpen your skills in various areas of Java technology. The following resources should help either endeavor:
If you're a C/C++ programmer new to Java programming, the "Java programming for C/C++ developers" tutorial can help get you up to speed by comparing and contrasting Java programming concepts with those of C/C++.
If you haven't heard of Extreme Programming or XP, a philosophy of application design that incorporates continuous-stage testing, writing tests before the code, on-site customer input, refactoring (improving code without changing functionality), and more, this article can deliver a good tool for writing Java applications. (The practices are detailed in "Demystifying Extreme Programming: "XP distilled" revisited, Part 2.")
Translating design theory into practical application(s) is the focus of the Java theory and practice series.
Java programmers are wise to design applications with integrated bug detection and testing. developerWorks offers a collection of columns on Java debugging (focusing on a tool known as bug patterns) called Diagnosing Java code. Other helpful articles on this topic include the Testing with leverage articles from Brian Goetz, as well as "Kill bugs dead" by the same author.
You've probably heard a lot about a programming methodology called Ajax. If you're wondering how it applies to you as a Java developer, read Phil McCarthy's series Ajax for Java developers.
Robocode is an easy-to-use robotics battle simulator built on Java technology that teaches you to program while providing hours of pure entertainment. For an introduction to Robocode, read "Rock 'em, sock 'em Robocode!"
Choose among a wide variety of online, classroom, and multimedia-based Java courses offered by IBM Global Services.
Certification training
If you're thinking about certifying your Java skills, you can take several exams. To help you prep for the exams, our friends at Whizlabs have developed the four-part tutorial "Java Certification Success," which covers Sun Certified Java Programmer (SCJP) 1.4, Sun Certified Web Component Developer (SCWCD), Sun Certified Business Component Developer (SCBCD), and Sun Certified Enterprise Architect (SCEA). For an update on the SCJP exam for Java SE 5, see the "Are you SCJP 5 certified? article." "Preparing for the Mobile Application Developer Certification" helps you prep for the Sun Certified Mobile Application Developer (SCMAD) certification.
IBM offers professional certification in such related technologies as WebSphere development (for enterprise Java applications), IBM Rational software, DB2, XML, and SOA.
Forums
For an even more interactive approach to learning how to use the Java language, dive into the Java discussion forums, moderated by noted experts with years of real-world experience in crafting Java-related technology.
IBM is on the front lines as one of the leading innovators in the use of Java technology. The section below highlights tools and products IBM offers to Java developers.
Free downloads:
The Kick-start Your Java Apps suite -- DB2 Express-C, WebSphere Application Server Community Edition, and the Eclipse IDE -- gives you everything you need to get simple Java Web applications and Web services up and running today.
Java Developer Kits are offered by IBM for creating and testing Java SE applets and applications and Java ME applications on popular platforms, including Windows, Linux, and AIX.
IBM Development Package for Eclipse is an unsupported Eclipse-based development tool that enables developers to build and run Java applications with its ready-to-run development environment out of the box.
Callisto Simultaneous Release project provides one-stop access to two value-added Eclipse 3.2 bundles, helpful if you're developing Java EE applications using the Eclipse integrated development environment.
Java technology on alphaWorks is a virtual warehouse of emerging IBM-generated Java-related technologies, including APIs, integrated development environments and devkits, components, reference implementations, and utilities. Here are just a few:
Toolkit for MPEG-4. A set of Java classes and APIs with sample applications for generating MPEG-4 content for use with MPEG-4-compliant devices.
Secure Shell Library for Java. A lightweight implementation of the Internet Engineering Task Force (IETF) Secure Shell (SSH-2) protocol for secure remote log-in and other secure network services over an insecure network.
Fluid Sync. A Java framework that facilitates the development of collaborative and multidevice applications. Fluid Sync is one of the technologies in the Emerging Technologies Toolkit, which offers advanced tools for Web services development in grid computing, asynchronous Web services, business processes, autonomic computing, and other services.
IBM Rational Software Delivery Platform tools are built on the Eclipse 3.0 platform and can help make it easier to develop, test, and deploy high-quality applications. Rational tools for Java developers include:
Rational Application Developer for WebSphere Software, a rapid application development tool for developing, analyzing, testing, profiling, and deploying Web, SOA, Java, J2EE, and portal applications on the IBM WebSphere platform.
WebSphere Application Server is a fully featured Java EE-certified application server that delivers the secure, scalable, resilient application infrastructure enterprises need for a service-oriented architecture. Learn more about Java development tools for the WebSphere family:
Visit the WebSphere development tools area for latest technical and how-to information for using WebSphere tools to create, test, and deploy enterprise-scale Java EE applications.
Rational Application Developer for WebSphere Software is a rapid application development tool for developing, analyzing, testing, profiling, and deploying Web, SOA, Java, J2EE, and portal applications on IBM's WebSphere platform.
The WebSphere Portal zone provides portlets, tools, tutorials, and news for developers who use the WS Portal technology.
WebSphere MQ is an application programming service that enables application programs to communicate.
WebSphere MQ Everyplace allows access to enterprise data for mobile workers and remote devices with assured message delivery.
Branch Transformation Toolkit for WebSphere Studio is an application framework and a set of specialized Eclipse-based tools that accelerate the build phase for multitiered front office transactional applications.
WebSphere Message Broker delivers an advanced Enterprise Service Bus providing connectivity and universal data transformation for both standard and nonstandards-based applications and services to power SOAs.
IBM Information Management software is a powerful family of relational database management system (RDBMS) servers along with software for data warehousing, data analysis, data mining, media asset management, enterprise content management, and information integration. IBM Information Management software supports Java programming, including client applications, server-side capabilities, and tools to make development and deployment easier:
DB2 UDB is a natural fit for an open, standards-based business.
IBM Cloudscape a lightweight, relational database engine (powered by the open source Apache Derby database) that supports complex SQL transactions, is easy to use, and requires no user administration.
IBM Informix software delivers superior database performance for transaction-intensive environments.