Podemos generar números aleatorios en Java de dos formas distintas:

1. Utilizando el método estático random de la clase Math: Math.random()
2. Utilizando la clase Random

1. Generar números aleatorios utilizando Math.random()

El método random() de la clase Math devuelve un número al azar positivo de tipo double mayor o igual que 0.0 y menor que 1.0

Por ejemplo, el siguiente for genera 5 números aleatorios

for(int i = 1; i<=5; i++)
     System.out.println(Math.random());

genera 5 números aleatorios que podrían ser estos:

0.6586423340678433
0.35474701449674206
0.9552201267900652
0.8309552833908893
0.05210677512170114

Para obtener un número entero entre 1 y un límite N, hay que multiplicar el número aleatorio obtenido por N, sumarle 1 y convertirlo a entero:

(int)(Math.random()*N + 1);

Por ejemplo, para obtener 5 números aleatorios enteros entre 1 y 6:
for(int i = 1; i<=5; i++)
     System.out.println((int)(Math.random()*6 + 1));

Para obtener un número entero entre dos valores DESDE , HASTA, ambos incluidos, debemos usar la fórmula:
 (int)(Math.random()*(HASTA-DESDE+1)+DESDE); 
Por ejemplo, para generar 5 números enteros al azar entre 8 y 15:
for(int i = 1; i<=5; i++)
     System.out.println((int)(Math.random()*(15-8+1)+8));



2. Generar números aleatorios utilizando la clase Random

La clase Random proporciona un generador de números aleatorios más flexible que el método random de la clase Math anterior.

Se encuentra en el paquete java.util.

Para obtener un número aleatorio utilizando la clase Random debes seguir estos pasos:

1. Importar la clase: import java.util.Random;
2. Crear un objeto de la clase Random
3. Utilizar uno de los métodos de la clase para obtener el número

Algunos métodos de la clase Random:

nextInt() devuelve un número entero positivo o negativo dentro del rango de enteros.

nextInt(int n) devuelve un número entero >=0 y menor que n.
nextDouble() Devuelve un número positivo de tipo double mayor o igual que 0.0 y menor que 1.0
Por ejemplo, para generar 5 enteros al azar:

Random rnd = new Random();
for(int i = 1; i<=5; i++)
            System.out.println(rnd.nextInt());

Un posible resultado de este for es:

-394395199
1133763686
-424454120
1147379979
-2049113297

Para generar 5 enteros entre 0 y 6:

for(int i = 1; i<=5; i++)
     System.out.println(rnd.nextInt(7));

Para generar 5 enteros entre 1 y 6:

for(int i = 1; i<=5; i++)
     System.out.println(rnd.nextInt(6)+1);

En general, para generar enteros al azar entre dos límites DESDE , HASTA, ambos incluidos:
rnd.nextInt(HASTA-DESDE+1)+DESDE

Por ejemplo, para generar 5 números aleatorios entre 10 y 20:

for(int i = 1; i<=5; i++)
     System.out.println(rnd.nextInt(20-10+1)+10);