(Parte 2 de 5)

Depois vieram o Java2 1.3 e 1.4, e o Java 1.5 passou a se chamar Java 5, tanto por uma questão de marketing e porque mudanças significativas na linguagem foram incluídas. É nesse momento que o “2” do nome Java desaparece. Repare que para fins de desenvolvimento, o Java 5 ainda é referido como Java 1.5.

Capítulo 2 - O que é Java - Java lento? Hotspot e JIT - Página 6

Material do Treinamento Java e Orientação a Objetos

Até a versão 1.4, existia a terceira numeração (1.3.1, 1.4.1, 1.4.2, etc), indicando bug fixes e melhorias. A partir do Java 5 existem apenas updates: Java 5 update 7, por exemplo.

Hoje a última versão disponível do Java é a 6.0, lançada em 2006. Da versão 1.4 para a 5.0, a linguagem sofreu muitas modificações, o que de certa forma fomentou a mudança no versionamento do Java. Já o Java 6.0 não trouxe nenhuma mudança na linguagem, mas trouxe mais recursos na API e muitas melhorias de performance na VM.

Existe compatibilidade para trás em todas as versões do Java. Um class gerado pelo javac da versão 1.2 precisa necessariamente rodar na JVM 6.0. Por isso, recomendamos sempre usar a última versão do Java para usufruir das tecnologias mais modernas mas sem correr o risco de quebrar aplicações antigas.

2.5 - JVM? JRE? JDK? O que você vai baixar no site do java?

• JVM = apenas a virtual machine, esse download não existe

• JRE = Java Runtime Environment, ambiente de execução Java, formado pela JVM e bibliotecas, tudo que você precisa para executar uma aplicação Java.

• JDK = Java Development Kit: Nós, desenvolvedores, faremos o download do JDK do Java SE (Standard Edition).

2.6 - Onde usar e os objetivos do Java

No decorrer do curso, você pode achar que o Java tem baixa produtividade, que a linguagem com a qual você está acostumado é mais simples para criar os pequenos sistemas que estamos vendo aqui.

Queremos deixar claro que a premissa do Java não é a de criar sistemas pequenos, onde temos um ou dois desenvolvedores, mais rapidamente que linguagens como php, perl, entre outras.

O foco da plataforma é outro: aplicações de médio a grande porte, onde o time de desenvolvedores tem várias pessoas e sempre pode vir a mudar e crescer. Não tenha dúvidas que criar a primeira versão uma aplicação usando Java, mesmo utilizando IDEs e ferramentas poderosas, será mais trabalhoso que usar uma linguagem script ou de alta produtividade. Porém, com uma linguagem orientada a objetos e madura como o Java, será extremamente mais fácil e rápido fazer alterações no sistema, desde que você siga as boas práticas, recomendações e design patterns.

Além disso, a quantidade enorme de bibliotecas gratuitas para realizar os mais diversos trabalhos (tais como relatórios, gráficos, sistemas de busca, geração de código de barra, manipulação de XML, tocadores de vídeo, manipuladores de texto, persistência transparente, impressão, etc) é um ponto fortíssimo para adoção do Java: você pode criar uma aplicação sofisticada, usando diversos recursos, sem precisar comprar um componente específico, que costuma ser caro de acordo com sua especialização.

Cada linguagem tem seu espaço e seu melhor uso. O uso do Java é interessante em aplicações que virão a crescer, em que a legibilidade do código é importante, onde temos muita conectividade e se temos plataformas (ambientes e sistemas operacionais) heterogêneos (Linux, Unix, OSX e Windows misturados).

Você pode ver isso pela quantidade enorme de ofertas de emprego procurando desenvolvedores Java para trabalhar com sistemas web e aplicações de integração no servidor.

Capítulo 2 - O que é Java - JVM? JRE? JDK? - Página 7

Material do Treinamento Java e Orientação a Objetos

Apesar disto, a Sun empenha-se em tentar popularizar o uso do Java em aplicações desktop, mesmo com o fraco marketshare do Swing/AWT/SWT em relação às tecnologias concorrentes (em especial Microsoft .NET).

2.7 - Especificação versus implementação

Outro ponto importante: quando falamos de Java Virtual Machine, estamos falando de uma especificação.

Ela diz como o bytecode deve ser interpretado pela JVM. Quando fazemos o download no site da Sun, o que vem junto é a Sun JVM. Em outras palavras, existem outras JVMs disponíveis, como a Jrockit da BEA, entre outras.

Isso é outro ponto interessante para as empresas. Caso não estejam gostando de algum detalhe da JVM da

Sun ou prefiram trabalhar com outra empresa, pagando por suporte, elas podem trocar de JVM com a garantia absoluta de que todo o sistema continuará funcionando, tendo em vista que a JVM é certificada pela Sun, precisando aceitar o mesmo bytecode. Você nem precisa recompilar nenhuma de suas classes.

Além de independência de hardware e sistema operacional, você tem a independência de vendor: graças a idéia da JVM ser uma especificação e não um software.

2.8 - Como o FJ-1 está organizado

Java é uma linguagem simples no sentido de que as regras não são muitas. Quebrar o paradigma procedural para mergulhar na orientação a objetos não é simples. Esse é o objetivo do FJ-1.

O começo pode ser um pouco frustrante: exemplos banais, controle de fluxo simples com o if, for, while e criação de pequenos programas que nem ao menos captam informação do teclado. Apesar de isto tudo ser necessário, é só nos 20% finais do curso que estaremos utilizando bibliotecas para, no final, criarmos um chat entre duas máquinas que transferem Strings por TCP/IP. Neste ponto, teremos tudo que é necessário para entender completamente como a API funciona, quem estende quem, e o porquê.

Depois desse capítulo onde o Java, a JVM e primeiros conceitos são passados, veremos os comandos básicos do java para controle de fluxo e utilização de variáveis do tipo primitivo. Criaremos classes para testar esse pequeno aprendizado, sem mesmo saber o que realmente é uma classe. Isso dificulta ainda mais a curva de aprendizado, porém cada conceito será introduzido no momento considerado mais apropriado pelos autores.

Passamos para o capítulo de orientação a objetos básico, mostrando os problemas do paradigma procedural e a necessidade de algo para resolvê-los. Atributos, métodos, variáveis do tipo referência e outros. Depois, um rápido pulo pelos arrays.

Os capítulos de modificadores de acesso, herança, classes abstratas e interfaces demonstram o conceito fundamental que o curso quer passar: encapsule, exponha o mínimo de suas classes, foque no que elas fazem, no relacionamento entre elas. Com uma modelagem boa a codificação fica fácil e a modificação e expansão do sistema também.

Enquanto isso, o Eclipse é introduzido de forma natural, evitando-se ao máximo wizards e menus, e sim o code assist e seus quick fixes. Isso faz com que o Eclipse trabalhe de forma simbiótica com o desenvolvedor, sem se intrometer e fazer mágica.

Pacotes, javadoc, jars e java.lang apresentam os últimos conceitos fundamentais do Java, dando toda a fundação para, então, passarmos a estudar as principais e mais utilizadas APIs do Java SE.

Java.util, java.io e java.net são essas APIs. Todas elas usam e abusam dos conceitos vistos no decorrer do curso, ajudando a sedimentá-los. Juntamente, temos os conceitos básicos do uso de Threads, e os problemas

Capítulo 2 - O que é Java - Especificação versus implementação - Página 8

Material do Treinamento Java e Orientação a Objetos

e perigos da programação concorrente quando dados são compartilhados.

Resumindo: o objetivo do curso é apresentar o Java ao mesmo tempo que os fundamentos da orientação a objetos são introduzidos. Bateremos muito no ponto de dizer que o importante é como as classes se relacionam e qual é o papel de cada uma, e não em como elas realizam as suas obrigações. Programe voltado à interface, e não à implementação.

No final do curso, a utilização dos pacotes java.io, java.util e java.net, e de uma biblioteca de desenho de gráficos (JFreeChart) reforçarão todo nosso aprendizado, tendo em vista que essas bibliotecas foram desenvolvidas com o objetivo de reutilização e extensão, portanto abusam dos conceitos previamente vistos.

2.9 - Compilando o primeiro programa

Vamos para o nosso primeiro código! O programa que imprime uma linha simples!

Notação

Todos os códigos apresentados na apostila estão formatados com recursos visuais para auxiliar a leitura e compreensão dos mesmos. Quando for digitar os códigos no computador, trate os códigos como texto simples. A numeração das linhas não faz parte do código e não deve ser digitada; é apenas um recurso didático. O Java é case sensitive: tome cuidado com maiúsculas e minúsculas.

Após digitar o código acima, grave-o como MeuPrograma.java em algum diretório. Para compilar, você deve pedir para que o compilador de Java da Sun, chamado javac, gere o bytecode correspondente ao seu código Java.

Depois de compilar, o bytecode foi gerado. Quando o sistema operacional listar os arquivos contidos no diretório atual, você poderá ver que um arquivo .class foi gerado, com o mesmo nome da sua classe Java.

Assustado com o código?

Para quem já tem uma experiência com Java, esse primeiro código é muito simples. Mas, se é seu primeiro código em Java, pode ser um pouco traumatizante. Não deixe de ler o prefácio do curso, que deixará você mais tranqüilo.

Capítulo 2 - O que é Java - Compilando o primeiro programa - Página 9

Material do Treinamento Java e Orientação a Objetos

Preciso sempre programar usando o Notepad ou similar?

Não é necessário digitar sempre seu programa em um simples aplicativo como o Notepad. Você pode usar um editor que tenha syntax highlighting e outros benefícios. Mas, no começo, é interessante você usar algo que não possua ferramentas, para que você possa se acostumar com os erros de compilação, sintaxe e outros. Depois do capítulo de polimorfismo e herança sugerimos a utilização do Eclipse http://www.eclipse.org a IDE líder no mercado, e gratuita. Existe um capítulo a parte para o uso do Eclipse nesta apostila. No Linux, recomendamos o uso do gedit ou do kate. No Windows, você pode usar o Notepad++ ou o TextPad. No Mac, TextWrangler ou TextMate.

2.10 - Executando seu primeiro programa

Os procedimentos para executar seu programa são muito simples. O javac é o compilador Java, e o java é o responsável por invocar a máquina virtual para interpretar o seu programa.

Ao executar, pode ser que a acentuação resultante saia errada devido a algumas configurações que deixamos de fazer. Sem problemas.

1 class MeuPrograma { 2 public static void main(String[] args) { 3 // miolo do programa começa aqui! 4 System.out.println("Minha primeira aplicação Java!!"); 5 // fim do miolo do programa 6 } 7 }

O miolo do programa é o que será executado quando chamamos a máquina virtual. Por enquanto, todas as linhas anteriores, onde há a declaração de uma classe e a de um método, não importam para nós. Mas devemos saber que toda aplicação Java começa por um ponto de entrada, e este ponto de entrada é um método main.

Ainda não sabemos o que é método, mas veremos no capítulo 4. Até lá, não se preocupe com essas declarações. Sempre que um exercício for feito, o código sempre estará nesse miolo.

No caso do nosso código, a linha do System.out.println faz com que o conteúdo entre aspas seja colocado na tela.

O MeuPrograma.class gerado não é legível por seres humanos (não que seja impossível). Ele está escrito no formato que a virtual machine sabe entender e que foi especificado que ela entendesse.

Capítulo 2 - O que é Java - Executando seu primeiro programa - Página 10

Material do Treinamento Java e Orientação a Objetos

É como um assembly, escrito para esta máquina em específico. Podemos ler os mnemônicos utilizando a ferramenta javap que acompanha o JDK:

javap -c MeuPrograma

E a saída:

MeuPrograma();

Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]);

Code: 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Minha primeira aplicaão Java!! 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return

É o código acima, que a JVM sabe ler. É o “código de máquina”, da máquina virtual.

Um bytecode pode ser revertido para o .java original (com perda de comentários e nomes de variáveis locais). Caso seu software vá virar um produto de prateleira, é fundamental passar um ofuscador no seu código, que vai embaralhar classes, métodos e um monte de outros recursos (indicamos o http://proguard.sf.net).

2.13 - Exercícios: Modificando o Hello World

1) Altere seu programa para imprimir uma mensagem diferente. 2) Altere seu programa para imprimir duas linhas de texto usando duas linhas de código System.out.

3) Sabendo que os caracteres \n representam uma quebra de linhas, imprima duas linhas de texto usando uma única linha de código System.out.

2.14 - O que pode dar errado?

Muitos erros podem ocorrer no momento que você rodar seu primeiro código. Vamos ver alguns deles:

Código:

Erro:

Capítulo 2 - O que é Java - Exercícios: Modificando o Hello World - Página 1

Material do Treinamento Java e Orientação a Objetos

Esse é o erro de compilação mais comum: aquele onde um ponto e vírgula fora esquecido. Outros erros de compilação podem ocorrer se você escreveu palavras chaves (as que colocamos em negrito) em maiúsculas, esqueceu de abrir e fechar as {}, etc.

Durante a execução, outros erros podem aparecer:

- Se você declarar a classe como X, compilá-la e depois tentar usá-la como x minúsculo (java x), o Java te avisa:

Exception in thread "main" java.lang.NoClassDefFoundError: X (wrong name: x)

- Se tentar acessar uma classe no diretório ou classpath errado, ou se o nome estiver errado, ocorrerá o seguinte erro:

Exception in thread "main" java.lang.NoClassDefFoundError: X

- Se esquecer de colocar static ou o argumento String[] args no método main:

Exception in thread "main" java.lang.NoSuchMethodError: main

Por exemplo:

- Se não colocar o método main como public:

Main method not public.

Por exemplo:

2.15 - Um pouco mais...

1) Procure um colega, ou algum conhecido, que esteja em um projeto Java. Descubra porque Java foi escolhido como tecnologia. O que é importante para esse projeto e o que acabou fazendo do Java a melhor escolha?

Material do Treinamento Java e Orientação a Objetos

2.16 - Exercícios adicionais

1) Um arquivo fonte Java deve sempre ter a extensão .java, ou o compilador o rejeitará. Além disso, existem algumas outras regras na hora de dar o nome de um arquivo Java. Experimente gravar o código deste capítulo com OutroNome.java ou algo similar. Compile e verifique o nome do arquivo gerado. Como executar a sua aplicação agora?

Curiosidade

Tente compilar um arquivo sem nada dentro, nem uma letra, nem uma quebra de linha. O que acontece?

Capítulo 2 - O que é Java - Exercícios adicionais - Página 13

CAPÍTULO 3

Variáveis primitivas e Controle de fluxo

“Péssima idéia, a de que não se pode mudar” – Montaigne

Aprenderemos a trabalhar com os seguintes recursos da linguagem Java:

• declaração, atribuição de valores, casting e comparação de variáveis; • controle de fluxo através de if e else;

• instruções de laço for e while, controle de fluxo com break e continue.

(Parte 2 de 5)

Comentários