Considere as seguintes afirmações acerca da linguagem de programação Java.

I. Esta linguagem de programação combina características de linguagens tipadas estatica e dinamicamente. Como em uma linguagem de tipagem estática, cada variável e elemento de programação em Java têm um tipo que é conhecido a tempo de compilação, de modo que, a tempo de execução, não há necessidade, normalmente, de se verificar a validade de atribuições entre tipos enquanto o código está sendo executado. Ao contrário das linguagens tradicionais C ou C++, Java também mantém informações a tempo de execução sobre objetos e usa isso para permitir comportamento verdadeiramente dinâmico. O código Java pode carregar novos tipos em tempo de execução e usá-los de forma totalmente orientada a objetos, permitindo polimorfismo.
II. Variáveis declaradas como membros de uma classe são definidas com valores default, se não forem inicializadas explicitamente. Nesse caso, o default para os tipos numéricos é zero; para caracteres, é o caractere nulo (\0); e, para as variáveis booleanas, é o valor falso.
III. Objetos são alocados com o operador NEW usando um construtor de objeto. Um construtor é um método especial com o mesmo nome de sua classe e com nenhum tipo de retorno. É chamado quando uma nova instância da classe é criada, o que dá à classe uma oportunidade para definir o objeto para uso. Construtores, como ocorre com outros métodos, podem aceitar argumentos e podem ser sobrecarregados, embora não sejam herdados como os outros métodos.

Quais estão corretas?