Java (linguaxe de programación)

**Java** é unha linguaxe de programación orientada a obxectos desenvolvida por Sun Microsystems a principios dos anos noventa. A linguaxe Java toma moita da súa sintaxe da C e C++, pero ten un modelo de obxectos máis simple e elimina ferramentas de baixo nivel como punteiros.

As aplicacións Java están tipicamente compiladas nun *bytecode*, aínda que a compilación en código máquina nativo tamén é posible. No tempo de execución, o *bytecode* é normalmente interpretado ou compilado a código nativo para a execución, aínda que tamén é posible a execución directa por hardware do *bytecode* por un procesador Java.

A implementación orixinal e de referencia do compilador, a máquina virtual e as librerías de clases de Java foron desenvoltos por Sun Microsystems en 1995. Dende entón, Sun controlou as especificacións, o desenvolvemento e evolución da linguaxe a través do Java Community Process, aínda que outros desenvolveron tamén implementacións alternativas destas tecnoloxías de Sun, algunhas ata baixo licenzas de software libre.

Entre novembro de 2006 e maio de 2007, Sun Microsystems liberou a maior parte das súas tecnoloxías Java baixo a licenza GNU GPL, de acordo coas especificacións do Java Community Process, de tal forma que practicamente todo o Java de Sun é agora software libre (aínda que a biblioteca de clases de Sun que se require para executar os programas Java aínda non é software libre).
## Historia 
Desenvolvida inicialmente por James Gosling na empresa Sun Microsystems. A linguaxe chamábase ao comezo Oak (*carballo*), e tentaba substituír o C++.
Hoxe en día, as especificacións da linguaxe Java, así como as de *JVM* (Java Virtual Machine: Máquina virtual Java) e as APIs de Java API por Sun a través do *Java Community Process*.

A linguaxe de programación Java foi creada por James Gosling en xuño do 1991 para usarse nun proxecto de consumibles domésticos. A linguaxe chamábase ao comezo *Oak*, en referencia a un carballo que había nas proximidades das oficinas de Gosling, posteriormente chamouse *Green* e finalmente chamaríase Java.

Os obxectivos de Gosling eran implementar unha máquina virtual e unha linguaxe cunha sintaxe similar a C/C++. A primeira versión pública de Java data de 1995. Tiña como lema *Escribe código unha vez, execútao onde queiras* (*Write Once, Run Anywhere*), proporcionando contornas de execución gratuítas en varias plataformas. Era bastante seguro e a súa seguridade era configurable, permitindo restrinxir o acceso a redes e arquivos. A maior parte dos navegadores web pronto incorporaron a posibilidade de executar applets Java dentro de páxinas web. Java pronto se fixo popular. Coa chegada de Java 2, creáronse distintas especificacións para distintos tipos de plataformas. Por exemplo, J2EE era para aplicacións empresariais e J2ME era para aplicacións móbiles. J2SE era a denominación para a edición estándar. En 2006, debido a razóns de mercadotecnia as diferentes versións de Java se denominaron Java EE, Java ME, e Java SE.

O 13 de novembro de 2006, Sun Microsystems liberou a maior parte das súas tecnoloxías Java baixo a licenza GNU GPL. O 8 de maio de 2007 Sun finalizou o proceso, facendo que todo o núcleo de Java fose software libre, coa excepción de pequenas porcións de código das que Sun non é dono do copyright.

## Características principais 
No deseño de Java seguíronse cinco obxectivos principais:

# Uso do paradigma de programación orientada a obxectos.
# O mesmo programa pode executarse en distintos sistemas operativos (portabilidade).
# Contén soporte para a programación de aplicacións en rede.
# Pode executar código de fontes externas de xeito seguro.
# Doado de empregar escollendo as mellores características das linguaxes de programación orientadas a obxectos do momento.

## Linguaxe semi-interpretada 
A linguaxe Java naceu co obxectivo fundamental de universalidade en canto á súa execución do código compilado en calquera sistema operativo. Para acadar esta característica de universalidade (en canto ao sistema operativo), xera un código compilado estándar (*byte code*), que é executado por un programa intérprete chamado *JVM* (Java Virtual Machine: Máquina virtual Java). É polo tanto semi-interpretada, xa que require compilación.

## Sintaxe 
A sintaxe de Java deriva en gran medida de C++. A diferenza de C++, que combina a sintaxe para programación estruturada, xenérica e orientada a obxectos, Java foi deseñado exclusivamente como unha linguaxe orientada a obxectos. Como resultado, case todo é un obxecto e todo o código escríbese dentro de clases. Como excepcións a este feito temos os tipos de datos intrínsecos (números enteiros e en coma flotante, booleanos, e caracteres), que non son clases por motivos de prestacións.

### Exemplo: Ola Mundo 
```java
// ollo!: o ficheiro fonte débese chamar OlaMundo.java
 public class OlaMundo
 {
     public static void main(String[] args)
     {
         System.out.println("Ola Mundo!");
     }
 }
```

## Java vs JavaScript 
Java non debe confundirse coa linguaxe JavaScript, coa que comparte soamente o nome e unha sintaxe parecida. Existe unha implementación de JavaScript denominada Rhino que está escrita completamente en Java e forma parte do proxecto Fundación Mozilla.
## Extensións e arquitecturas relacionadas 
En canto a extensións e arquitecturas estreitamente relacionadas coa linguaxe Java inclúense:
* J2EE (Java Enterprise edition: relacionada con compoñentes).
* J2ME (Micro-Edición para PDAs & móbiles).
* JMF (Java Media Framework).
* JNDI (Java Naming and Directory Interface).
* JSML (Java Speech API Markup Language).
* JDBC (Java Database Connectivity).
* JAIN (Java API for Integrated Networks).
* JDMK (Java Dynamic Management Kit).
* Jini (unha arquitectura de rede para a construción de sistemas distribuídos).
* Jiro .
* JXTA (infraestrutura inter-pares (peer-to-peer) de fonte aberta (open source)).
* JavaSpaces.
* JMI (Java Metadata Interface).
* JMX (Java Management Extensions).
* JSP (JavaServer Pages).
* JSF (JavaServer Faces).
* JNI (Java Native Interface).
* J3D (API para programación gráfica en 3D).
* JOGL (API de baixo nivel para programación gráfica en 3D usando OpenGL).
* OSGi Xestión dinámica de Servizos e Mantemento Remoto.
## Véxase tamén 
### Outros artigos 
* Java SE.
* python.
* perl.
* TCL.

### Ligazóns externas 
* Sitio oficial de Java 
* The Java Language Specification 
* O'Reilly ONJava 
* JavaWorld