Los componentes de java pueden ser de distintos proveedores y versiones y pueden convivir simultáneamente usando la arquitectura de update-alternatives.

Los programas que nos interesan son java para ejecutar y javac, el compilador. Para ver que versiones hay instaladas, use –list

update-alternatives --list java

Una salida de ejemplo, consistente con los siguientes ejemplos es:

/opt/java/jdk1.7.0_71/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

Para consultar el compilador:

update-alternatives --list javac

Siendo la salida

/opt/java/jdk1.7.0_71/bin/javac
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac

Si bajamos la nueva versión y la descomprimimos en /opt/java/jdk1.8.0_102, tendríamos que ver algo como

ls /opt/java/ -1
jdk1.7.0_71
jdk1.8.0_102

Hay que instalar las alternativas:

sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.8.0_102/jre/bin/java 3
sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_102/bin/javac 3

Siendo el formato:

update-alternatives --install EJECUTABLE NOMBRE RUTA_REAL_EJECUTABLE PRIORIDAD

Controlar tras instalar que estén y seleccionarlas, primero el java:

sudo update-alternatives --config java

Hay que seleccionar con el número la opción deseado si no es la que está actualmente marcada con *

There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /opt/java/jdk1.7.0_71/bin/java                   1         manual mode
* 2            /opt/java/jdk1.8.0_102/jre/bin/java              3         manual mode
  3            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode

Press enter to keep the current choice[*], or type selection number: 

Luego, el compilador, javac:

sudo update-alternatives --config javac
There are 3 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/bin/javac   1071      auto mode
  1            /opt/java/jdk1.7.0_71/bin/javac               1         manual mode
* 2            /opt/java/jdk1.8.0_102/bin/javac              3         manual mode
  3            /usr/lib/jvm/java-7-openjdk-amd64/bin/javac   1071      manual mode

Press enter to keep the current choice[*], or type selection number: 

Se puede comprobar que versión está activa con

java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

Tras cambiar a otra versión:

java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)