O que é Dynamic em Java?
"Dinâmico" significa apenas mudar, o que geralmente (em linguagens de programação) significa mudar algo em tempo de execução que não está explicitamente codificado no código fonte. Então uma declaração "se" seria um tipo muito menor de dinâmica. Gerar código em tempo de execução que não esteja presente em tempo de compilação seria muito dinâmico: LISP e Tcl e Forth são todas linguagens onde essa é a forma normal de os programar. Se a sua linguagem de programação pode ser pensada como "continue estendendo o que o compilador pode fazer até que o problema que você quer resolver seja resolvido por uma operação interna", então você tem uma linguagem muito dinâmica.
Lotes de linguagens interpretadas, como Python e Ruby, são dinâmicas também. Você pode carregar novos arquivos fonte à medida que você executa, você pode corrigir com código que já foi compilado, etc.
Linguagens compiladas tendem a ser (obviamente) bastante não-dinâmicas. Em Java, há "dynamic dispatch", também conhecido como "late binding", também conhecido como "method overrides". Quando você tem uma superclasse com várias subclasses, você não pode dizer olhando para o código fonte qual código executável será invocado por uma chamada para a superclasse. (Por exemplo, se Manager e Peon são ambas subclasses de Employee, então você não pode dizer qual código será invocado por Employee.grantRaise() olhando o código fonte em tempo de compilação.)
Uma outra forma na qual Java é dinâmico é o carregador de classes. Você pode carregar novas classes já compiladas em tempo de execução, de uma forma padrão e suportada por linguagem. (Você pode fazê-lo em C, mas o padrão C não o suporta; você tem que passar pelo sistema operacional e é diferente para cada sistema e compilador e etc.)
A última maneira na qual o Java é dinâmico é o reflexo. Você pode usar os métodos de reflexão para operar em classes e instâncias especificadas por strings. Em outras palavras, mesmo sem carregar novo código, você pode decidir qual classe já carregada você pode usar Class.forName() para obter a classe e instanciar uma instância. Se a string contendo o nome for lida em tempo de execução, não há como saber qual classe você estaria instanciando em tempo de compilação.
Artigos semelhantes
- O que eu tenho que instalar, Java 10 ou Java 8? Existe alguma diferença?
- Se eu conheço Java, e como criar aplicativos Android usando Java, quais são os passos para publicar um aplicativo meu próprio?
- What is the difference between Java 1.8 and Java 1.7?
- Fazer um editor de texto em Java é um bom projeto para aprender Java?