Los arreglos se declaran solamente con su límite súperior dado que el límite ínferior siempre es cero (0).
El código
crea un vector de números enteros de longitud 15.
Java comprueba si los accesos a arreglos con índices quedan dentro de los límites permitidos (diferencia con C++ donde no hay una comprobación). Si se detecta un acceso fuera de los límites se produce una excepción IndexOutOfBoundsException.
Los arreglos son objetos implícitos que siempre conocen sus propias longitudes (values.length) (diferencia con C++ donde un arreglo no es nada más que un puntero) y que se comportan como clases finales.
No se puede declarar los elementos de un arreglo como constantes (como es posible en C++).