Hola, te contesto yo ( con este pie roto me paso el día aquí XDD).
Bueno, cuando tu creas un array mediante esta declaración:
String [] listaDeMeses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
Siempre estas creando un array estatico porque si te fijas.... ¿ Que hay a la izquierda? "String [] listaDeMeses" es un array estático, esa sentencia que esta arriba es lo mismo que decir:
String [] listaDeMeses=new String[12];
listaDeMeses[0]="enero";
...
listaDeMeses[11]="diciembre";
Por lo tanto es un array estático como tu bien dices. Siempre tendrá un tamaño de 12 elementos de tipo String.
Para poder modificar su tamaño tienes dos opciones, la primera es volver a inicializar el array con el nuevo tamaño y volver a rellenarlo, cosa que es bastante engorrosa,
o lo transformas a un ArrayList y ya tienes un array dinámico, añades los elementos que quieras añadir y lo volverías a transformar a un array estático, si es que te interesa un array estático, o ya te quedas con el dinámico, eso ya depende de lo que necesitaras.
Te expongo un ejemplo de como realizar la conversión hacia un lado y hacia otro:
Convertir de array estático a ArrayList dinámico:
public class Prueba {
public static void main(String[] arg){
String [] listaDeMesesEstatica={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
ArrayList<String> listaDeMesesDinamica=new ArrayList<>(Arrays.asList(listaDeMesesEstatica));
listaDeMesesDinamica.add("mes13");
for(String s:listaDeMesesDinamica){
System.out.println(s);
}
}
}
Como convertir de ArrayList dinámico a array estático:
public class Prueba {
public static void main(String[] arg){
String [] listaDeMesesEstatica={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
ArrayList<String> listaDeMesesDinamica=new ArrayList<>(Arrays.asList(listaDeMesesEstatica));
listaDeMesesDinamica.add("mes13");
String[] listaDeMesesEstatica2=new String[listaDeMesesDinamica.size()];
listaDeMesesDinamica.toArray(listaDeMesesEstatica2);
for(String s:listaDeMesesEstatica2){
System.out.println(s);
}
}
}
Como ves, pasar de una dinámica a estática es un poco mas engorroso, ya que tendremos que inicializar el array que va a ser estático al tamaño del array dinámico que queremos convertir y una vez lo tenemos, invocamos el método toArray(T[] array) del objeto ArrayList que estamos convirtiendo.
También te comento que hay mas formas de inicializar arrays dinámicos, como por ejemplo:
public class Prueba {
public static void main(String[] arg){
ArrayList<String> lista = new ArrayList<String>() {{
add("elemento1");
add("elemento2");
add("elemento3");
}};
lista.add("elemento4");
for(String s:lista){
System.out.println(s);
}
}
}
Es cosa de investigar, de todas formas te comento que para una lista de meses no tiene sentido porque a no ser que un meteorito nos impacte y nos cambie de orbita dudo que aparezcan nuevos meses. XDD
De todas formas conforme vayas trabajando con las distintas estructuras veras las capacidades y limitaciones de cada una.
Me ha gustado el uso que haces del bucle do{ } while( ) <---> no es muy común usarlo.
Y nada, siento extenderme tanto pero es que esto es un mundo muy extenso y hay muchas formas de hacer las cosas. Espero al menos haberte abierto un poco mas el campo de arrays estáticos y dinámicos.
Un Saludo!