Só corrigindo o seu:
o else é um "Unreacheable Code", ou seja, nunca iria aparecer a mensagem "Ops. esse numero ñ é valido".
E não entendi porque você usou um try, sendo que não dá um throw em nenhum momento do seu código, então corrigindo aqui:
public static void main(String [] args){
System.out.println("Vamos aprender loopings");
Scanner jo = new Scanner(System.in);
System.out.println("digite 1 para iniciar o looping infinito");
System.out.println("digite 2 para iniciar o looping algumas vezes");
System.out.println("Qual opçao iniciar?");
try{
int i = jo.nextInt();
if(i == 0 || i > 2) {
throw new Exception();
}
while(i == 1 || i == 2)
{
if(i == 1)
{
while(true)
{
System.out.println("Ola essa msg é infinita.");
}
}else if(i == 2)
{
while(i<=10)
{
i += 1;
System.out.println("Ola essa msg ñ é infinita.");
}
}
}
}catch(Exception e)
{
System.out.println("Digite apenas os numeros 1/2");
}
}
Edit:
E agora que vi, seu codigo nao faz o que ele pediu .-.
Tá dando a mesma coisa que o codigo que ele fez