Boa tarde a todos.
Só mais um esclarecimento conceitual a todos.
Pra começar, o Java não gera arquivos executáveis. Como é que é :?:
Mas quando eu clico em cima de um arquivo com a extensão “*.jar” o Java não executa ele :?:
A resposta é sim, isto porque com as novas versões das IDES (NetBeans e Eclipse), permitem que o Sistema Operacional peguem arquivos com a extensão “.jar" e os associem ao compilador Java cuja versão do JDK esteja instalada em sua máquina, em outras palavras, é exatamente clicar em cima de um arquivo de documento do Word e ele abrir o Word cuja versão do Office esteja instalada em sua máquina. Antigamente voce teria que executar o arquivo ".jar” invocando o compilador Java através do prompt do DOS.
Quer fazer um teste :?: Desinstale o JDK de sua máquina e depois clique em cima de uma arquivo “*.jar”, se ele executar, então ele é um arquivo executável, caso contrário, não.
Diferença de aplicações executáveis e aplicações interpretadas. (Compilação X Interpretação)
As linguagens que eu conheço que geram e geravam executáveis são: Basic, Cobol, Clipper, C, o Pascal, e seus derivados C++, C# e Object Pascal do Delphi, ou seja, o compilador destas linguagens não precisam ser instalados nas máquinas clientes onde irão rodar, pois eles são auto interpretáveis pelo sistema operacional onde foi desenvolvido.
Já o Java que é uma das linguagens Interpretadas, as outras não lembro agora, é também um linguagem híbrida, ou seja, é tanto compilada quanto interpretada pelo seu compilador, e a diferença entre compilação e interpretação está ai, na compilação, ele só transforma em código objeto intelegível a máquina, podendo ser binário ou não, já a interpretação, a medida que ele vai compilando cada linha de código, vai executando na hora, ou seja é uma compilação e execução ao mesmo tempo, a medida que ele vai lendo cada linha.
E isto que faz o Java seja multiplataforma, em primeira mão ele compila o seu código fonte em um código binário universal chamado de ByteCode, acho que isto todo mundo já está cansado de saber, só que à este código não são anexadas as bibliotecas do sistema operacional (Linkedição), se não, não seria multiplataforma. Depois o bytecode é interpretado em cada sistema operacional da máquina com a versão do JDK específica para aquele sistema operacional instalado, fazendo com que o Java seja multiplataforma.
Compilação X Linkedição.
Pouca gente sabe, somente aqueles que já programaram em Cobol, C, Clipper e até mesmo no Pascal antigo sabem o que estou dizendo.
Para tornar um arquivo executável, primeiro o código fonte era transformado (compilado) em um código objeto cuja máquina entendia, após a compilação, o desenvolvedor teria que Linkeditar (Anexar) o código objeto as bibliotecas do sistema operacional, invocando programas como RTLink, Link, PLink86 e etc., bibliotecas do sistema onde exatamente o código fonte foi desenvolvido, criando assim o arquivo executável, tornando-o independente do compilador, entretanto a aplicação era monoplataforma.
É claro que o Delphi que utilza o Object Pascal, faz tudo isto de uma tacada só, onde fazia crer aos novos desenvolvedores que a compilação já consistia em criar o código executável, quando na verdade ele fazia as duas operações ao mesmo tempo.
Em meados de 2000, o Delphi 7 incorporou as bibliotecas do Kylix, para desenvolvimento de aplicações para rodar em Linux, entretanto, era necessário escolher em que biblioteca desenvolver para gerar uma aplicação monoplataforma.
Já o Java inovou quando criou a sua linguagem multiplataforma com o slogam “Make once run everywhere (Faça uma vez, rode em qualquer lugar)”, construindo um compilador híbrido (Compilação e Interpretação), cujo mecanismo de execução já for abordado acima.
Espero ter ajudado e acrescentado ao conceito de voces.
Caso tenha escrito alguma coisa errado, aceito críticas construtivas, pois estou aqui também para aprender.