Sie sind auf Seite 1von 129

PEE - COPPE/UFRJ

JAVA
2001, 2003, 2005, 2008 by Jorge L. de Souza Leo maro de 2008

Sumrio
1. Introduo 2. O ambiente jdk 6 3. A linguagem bsica

JAVA

1. Introduo
Histrico e Motivao A linguagem Java um produto de desenvolvimento da SUN Microsystems. O trabalho original que levou linguagem Java foi conduzido por James Gosling e uma equipe que desenvolviam software de aplicao e sistemas operacionais para produtos eletrnicos de consumo. Eles utilizavam C++, at que a equipe de Gosling decidiu criar uma linguagem completamente nova.
JAVA 3

1. Introduo
Pode-se supor que eles desejavam consertar algumas caractersticas de C++ e introduzir outras. A esta altura, a equipe e o projeto ainda no estavam voltados para a WWW. De qualquer modo, hoje sabido que a equipe desejava atingir um bom compromisso de projeto que produzisse: uma linguagem fcil de utilizar uma linguagem poderosa uma linguagem flexvel
JAVA 4

1. Introduo
A tnica da abordagem parece ter sido: quando em dvida, deixe fora da linguagem, isto , antes de tudo, produzir uma linguagem simples. No final, pode-se dizer que eles chegaram a uma linguagem com as seguintes caractersticas:
simples, interpretada, porm com bom desempenho, portvel, independente da arquitetura hospedeira, orientada a objetos, multitarefa, distribuda, robusta, segura, com ligao dinmica, com coleta de lixo automtica, fortemente tipada.
JAVA 5

1. Introduo
Outras caractersticas importantes de Java so: - possui um conjunto de tipos bsicos concebido para uma linguagem de alto nvel (arrays, strings, booleanos), - no possui ponteiros para uso pelo programador, - possui uma interface com mtodos nativos.

JAVA

1. Introduo
A deciso por uma linguagem interpretada deveu-se a duas razes principais:
- diminuir o tempo de desenvolvimento de sistemas, acelerando o ciclo compilar-ligarcarregar-testar-falhar-depurar; - obter portabilidade imediata.

JAVA

1. Introduo
O Modelo de Execuo Java uma linguagem interpretada. Isto significa que o cdigo gerado pelo compilador java (javac) no o cdigo de mquina do processador da mquina hospedeira. Este cdigo vai ser interpretado por um programa (java) que funciona como se fosse um processador. A especificao deste interpretador conhecida como a mquina virtual java (JVM Java Virtual Machine).
JAVA 8

1. Introduo
Por isto, cada tipo de computador precisa ter um interpretador prprio. Entretanto, todos os interpretadores vo interpretar o mesmo cdigo (bytecode) gerado pelo compilador. o interpretador java que acessa o sistema operacional nativo para permitir que o programa que est sendo interpretado utilize a interface grfica, o teclado, o mouse, os arquivos, os dispositivos de acesso rede, etc. O interpretador java deve fazer isto de uma maneira consistente em todas as plataformas.
JAVA 9

2. O ambiente jdk-se
Vamos analisar o ambiente de execuo da prpria SUN conhecido como JDK (Java 2 Development Kit). A verso bsica atualmente distribuda pela SUN a: JDK 6 update 5

JAVA

10

2. O ambiente jdk-se
Este ambiente pode ser obtido gratuitamente (ler o copyright !) de um site da SUN na Internet:
http://java.sun.com

Este site possui vrias verses para as plataformas mais populares, tais como Microsoft Windows (9X, NT, etc), Apple MacIntosh e vrios tipos de Unix.

JAVA

11

2. O ambiente jdk-se
A instalao do JDK cria uma subrvore no diretrio escolhido (.../java ou outro nome) com vrios subdiretrios:
bin, demo, include, include-old, jre, lib, src

Em .../java/bin ficam os executveis tais como javac, java, jar, javadoc, appletviewer e outros. Normalmente, coloca-se este caminho na varivel PATH (do shell que for usado).
JAVA 12

2. O ambiente jdk-se
No caso do MS-Windows, poderamos ter:
set PATH=c:\PROGRA~1\java\bin;%PATH%

No caso do Unix/Linux com bash, poderamos ter:


PATH=/usr/bin/java/bin:$PATH

JAVA

13

2. O ambiente jdk-se
Uma outra varivel essencial a varivel CLASSPATH, que deve conter os caminhos de onde o interpretador Java vai carregar os arquivos das classes necessrias. As classes padro do JDK esto em .../lib/rt.jar e o compilador j as procura automaticamente. Normalmente coloca-se o diretrio atual ( . ) e alguma outra localizao que possua classes teis:
set CLASSPATH=c:\minhas_classes
JAVA 14

2. O ambiente jdk-se
Um Exemplo Os programas fonte so editados em editores de texto comuns (ASCII puro) e devem possuir a terminao .java . Vamos ento supor, por exemplo, um programa fonte chamado: EleEscreve.java

JAVA

15

2. O ambiente jdk-se
O arquivo deve ter o mesmo nome da nica classe pblica declarada (adicionado da terminao .java). Os nomes de classes devem comear com uma letra maiscula (embora isto no seja obrigatrio) :
public class EleEscreve{ public static void main(String[] args){ System.out.println(Ele escreve !); } }
JAVA 16

2. O ambiente jdk-se
O compilador, chamado javac ou javac.exe, invocado atravs de um interpretador de comandos (shell), vai gerar um arquivo compilado para cada classe existente no arquivo fonte.

Ento, teramos:
$ javac EleEscreve.java

JAVA

17

2. O ambiente jdk-se
No nosso exemplo, ele geraria um arquivo de nome EleEscreve.class, com o cdigo intermedirio conhecido como bytecode. este cdigo intermedirio que vai ser interpretado.

JAVA

18

2. O ambiente jdk-se
O interpretador, chamado java ou java.exe, tambm chamado atravs do interpretador de comandos. Ele recebe como parmetro de linha de comando o nome da classe (no nosso exemplo, o nome do arquivo com o cdigo intermedirio, mas agora sem a terminao .class ! )

JAVA

19

2. O ambiente jdk-se
No nosso caso teramos:

$ java EleEscreve Ele escreve ! $

JAVA

20

3. A linguagem bsica
Java uma linguagem orientada a objetos e, por isto, vamos comear com os conceitos bsicos de orientao a objetos. Os conceitos de objetos e classes podem ser vistos, respectivamente, como extenses dos conceitos de variveis e tipos.

JAVA

21

3. A linguagem bsica
Uma varivel , antes de tudo, simplesmente um nome. Associada a cada varivel, ainda existem: (i) um conjunto de valores, chamado a sorte da varivel; (ii) uma funo chamada estado da varivel (ou atribuio), que mapeia cada varivel do programa em um valor da sua sorte; (iii) um conjunto de funes, ou operadores, que mapeiam valores das variveis, e outros valores, em um outro conjunto de valores.
JAVA 22

3. A linguagem bsica
Exemplo: Seja uma varivel de nome contador. Suponhamos que a sorte desta varivel seja o conjunto dos nmeros inteiros de -2.147.483.648 a +2.147.483.647 . Suponhamos que os operadores associados a esta varivel sejam: a soma (+), a subtrao (-), a multiplicao(*), a diviso inteira (/), o resto (%), a troca de sinal (-), etc. Humm, acho que j vi isto antes.
JAVA

23

3. A linguagem bsica
Imaginemos agora o conjunto de todas as variveis, possveis e imaginveis, com a mesma sorte de contador e com os mesmos operadores associados.

Este conjunto, infinito, chamado de tipo das variveis correspondentes. Em C, C++ e Java, o tipo do exemplo o nosso velho e conhecido tipo int (ou long).
JAVA 24

3. A linguagem bsica
Quando declaramos uma varivel:

int contador;
estamos dizendo que escolhemos, ou instanciamos, uma varivel com este nome do conjunto infinito de variveis que o tipo int. Em geral, a maioria das linguagens no permite que, para um dado programa, se escolham variveis com o mesmo nome de uma outra j escolhida, em situaes que possa haver ambigidade.
JAVA 25

3. A linguagem bsica
Um objeto, ao contrrio de uma varivel, no tem nome. Os objetos so annimos ! Um objeto um conjunto que possui basicamente as seguintes espcies de membros: - variveis (tambm chamadas de campos / fields); - mtodos, que so funes definidas pelo programador (correspondentes aos operadores das variveis);
26

JAVA

3. A linguagem bsica
Assim como um tipo um conjunto infinito de variveis, uma classe um conjunto infinito de objetos com as mesmas variveis e mtodos.

A declarao de uma classe (no confundir com a classe propriamente dita) pode ser vista como um gabarito, modelo ou descrio dos objetos que a constituem. No jargo do dia a dia, confundem-se os termos classe e declarao de classe...
JAVA 27

3. A linguagem bsica
Em Java, devido a flagrante semelhana entre o que acabamos de chamar tipos de variveis e classes de objetos, as classes tambm so chamadas de tipos.

Temos ento oito (8) tipos primitivos de variveis:


boolean byte short char int long float double

e os tipos criados pelo programador: classes, interfaces e arrays


JAVA 28

3. A linguagem bsica
Alm disto, existem: regras que vo controlar a visibilidade externa de uma classe (ou objeto) e seus componentes, ou regras de encapsulamento; regras que vo permitir definir outras classes a partir de uma classe, ou regras de herana; regras que vo permitir utilizar o mesmo nome para objetos diferentes sem que haja ambigidade, ou para relaxar os requisitos de tipagem forte, as regras de polimorfismo.
JAVA 29

3. A linguagem bsica
Vejamos o seguinte exemplo: class Point{ double x,y,z; } Point agora um novo tipo, criado pelo programador.

JAVA

30

3. A linguagem bsica
Como os objetos no tm um nome a priori, eles vo ser identificados e manipulados atravs o nono tipo de varivel, as variveis de referncia. Por exemplo:

Point p1, p2;

JAVA

31

3. A linguagem bsica
A declarao de uma varivel de referncia, ou simplesmente referncia, no instancia um objeto. Um objeto tem que ser instanciado explicitamente, seja separadamente ou em conjunto com a declarao da referncia.

JAVA

32

3. A linguagem bsica
Por exemplo, um objeto da classe Point poderia ser instanciado da forma abaixo: p2 = new Point(); A declarao da referncia e a instanciao do objeto tambm poderiam ser feitas em conjunto: Point p3 = new Point();

JAVA

33

3. A linguagem bsica

Observao: Os exemplos mostrados at aqu foram simplesmente esquemticos. No foram utilizados modificadores como public ou private, como seria mais realstico.

JAVA

34

3. A linguagem bsica
Vistos os conceitos mais bsicos, podemos ver alguns detalhes a mais. Os detalhes que vamos ver envolvem os conceitos de: packages; modificadores de classes, variveis e mtodos; herana e interfaces;
35

JAVA

3. A linguagem bsica : packages


Pacotes, ou packages, so conjuntos de declaraes de classes e interfaces. Todo programa Java organizado como um conjunto de pacotes.

A maior parte dos sistemas armazena os pacotes em sistemas de arquivos, mas tambm h previso para que os pacotes sejam armazenados em outros tipos de bases de dados.
JAVA 36

3. A linguagem bsica : packages


Um pacote, por sua vez, composto por unidades de compilao, que no nosso caso so simplesmente os arquivos com o cdigo fonte java. Cada arquivo que pertence ao mesmo pacote deve obrigatoriamente comear com a declarao package: package meuExemplo; ...
37

JAVA

3. A linguagem bsica : packages


Vejamos o seguinte exemplo:

package meuExemplo; public class MinhaClasse{ public static int contador; public static void main (String[] args){ } }
JAVA 38

3. A linguagem bsica : packages


Isto significa que todos os nomes declarados em unidades deste pacote devem ser precedidos do nome do prprio pacote, separado por ponto. Os nomes completos declarados neste arquivo so: meuExemplo.MinhaClasse meuExemplo.MinhaClasse.contador meuExemplo.MinhaClasse.main()

JAVA

39

3. A linguagem bsica : packages


Se precisarmos referenciar a varivel contador num mtodo de uma outra classe, o correto seria escrever: package outroPacote; public class Outra{ void metodoA(){ meuExemplo.MinhaClasse.contador++; } }
JAVA 40

3. A linguagem bsica : packages


Mas, se no quisermos escrever o nome completo, podemos usar a declarao import: package outroPacote; import meuExemplo.*; public class Outra{ void metodoA(){ MinhaClasse.contador++; } }
JAVA 41

3. A linguagem bsica : packages


Supomos que a varivel de ambiente CLASSPATH possua a localizao do diretrio onde esto as classes do pacote meuExemplo. Por exemplo:

CLASSPATH=/home/leao/javaprogs/
Neste diretrio estariam subdiretrios com os vrios pacotes existentes, inclusive o diretrio do pacote meuExemplo.

JAVA

42

3. A linguagem bsica : packages


Quando o metodoA da classe Outra do pacote outroPacote comeasse a execuo e precisasse da classe meuExemplo.MinhaClasse, ele usaria a varivel CLASSPATH para procurar no diretrio /home/leao/javaprogs/ , concatenado com o nome do diretrio meuExemplo , um arquivo chamado MinhaClasse.class, que pertencesse ao pacote meuExemplo.

JAVA

43

3. A linguagem bsica : packages


CLASSPATH import
/home/leao/javaprogs/ + meuExemplo/ + MinhaClasse.contador

cdigo fonte Nome completo:


meuExemplo.MinhaClasse.contador

Localizao completa:
/home/leao/javaprogs/meuExemplo/MinhaClasse.class

JAVA

44

3. A linguagem bsica : packages


Podemos ver que a declarao import no importa nada, no sentido de trazer uma biblioteca, ligar ou carregar o que quer que seja ! A nica coisa que o import faz permitir que o programador no tenha que escrever o nome completo em todas as ocorrncias do nome no texto do programa fonte. Isto, desde que no haja ambigidade nos nomes dos tipos, mtodos e variveis.
JAVA 45

3. A linguagem bsica : packages


Se um arquivo fonte (unidade de compilao) no possuir uma declarao de package, ele passa automaticamente a pertencer a um pacote default sem nome.

Os pacotes tambm podem possuir uma estrutura hierrquica como a dos diretrios. Assim sendo, um pacote pode possuir subpacotes, que so mapeados em subdiretrios do pacote pai.
JAVA 46

3. A linguagem bsica : packages


A SUN chega mesmo a sugerir que as pessoas utilizem o sistema de nomes da Internet, na ordem invertida, para criar nomes inconfundveis. Por exemplo, o package BR.UFRJ.GTA.simul; estaria mapeado em uma estrutura de subdiretrios abaixo de um diretrio constante na varivel CLASSPATH.

JAVA

47

3. A linguagem bsica : packages


Supondo a varivel abaixo, CLASSPATH=C:\javaprogs teramos: C:\ javaprogs BR UFRJ

GTA
simul
JAVA 48

3. A linguagem bsica : modifiers


Os modificadores de classes e de interfaces permitem definir a visibilidade e as possibilidades de estender classes. Se uma classe ou uma interface so declaradas public, elas so acessveis por todo o cdigo que pode acessar o pacote onde elas foram declaradas. Se elas no foram declaradas public, elas s podem ser acessadas por cdigo do prprio pacote onde elas foram declaradas.
JAVA 49

3. A linguagem bsica : modifiers


Alm disto, s pode haver uma classe public em cada arquivo. Uma classe declarada final no pode ser estendida, isto , no possvel declara uma nova classe que estenda uma classe final. Uma classe declarada abstract, por outro lado, nunca pode ter um objeto instanciado. Ela serve para ser a classe pai de outras que vo ser estendidas a partir dela.
JAVA 50

3. A linguagem bsica : modifiers


Variveis declaradas public so visveis por todo o cdigo da aplicao (desde que se use o nome completo, claro !) e so sempre herdadas. Podem ser chamadas de variveis globais e, por isto, devem ser usadas com conscincia. Variveis declaradas private esto no lado oposto do espectro: s so visveis pelo cdigo da prpria classe, no so visveis nem pelo cdigo de subclasses da sua classe e nem so herdadas ! Elas esto completamente encapsuladas, sob todos os aspectos.
JAVA 51

3. A linguagem bsica : modifiers


Se uma varivel declarada sem um modificador de visibilidade, ela tomada como do tipo default (embora este modificador no exista de maneira explcita). Variveis default so visveis pelas classes do prprio pacote e por subclasses que pertenam ao prprio pacote, mas elas no so visveis nem so herdadas por subclasses que pertenam a outros pacotes.

JAVA

52

3. A linguagem bsica : modifiers


Variveis declaradas protected so semelhantes s variveis default, mas ao contrrio destas, elas so herdadas por subclasses que pertenam inclusive a outros pacotes. Variveis tambm podem ser declaradas final, o que significa que, uma vez iniciadas, no podem mais ser alteradas e, para todos os efeitos, so constantes.
JAVA 53

3. A linguagem bsica : modifiers


Podemos ento resumir estas regras na tabela abaixo:
Modificadores Acesso intrapacote Herana interpacotes Acesso interpacotes

public protected default private

S S S N

S S N N

S N N N

JAVA

54

3. A linguagem bsica : modifiers


Pergunta: Se uma classe um conjunto de objetos com a mesma estrutura, isto , variveis e mtodos, ser que as variveis so realmente as mesmas ou so clones independentes ? Resposta: Existem os dois tipos, e isto pode ser escolhido pelo programador. Se uma varivel declarada static, ela uma s para todos os objetos da classe. Qualquer modificao feita por um cdigo ser visvel por todo cdigo que acessa-la aps.
JAVA 55

3. A linguagem bsica : modifiers


Diz-se ento que as variveis static so variveis de classe. Se uma varivel no declarada static, ento ela dita uma varivel de instncia, e cada objeto possui na verdade uma instncia independente desta varivel.

JAVA

56

3. A linguagem bsica : modifiers


Mtodos tambm podem ser declarados com o uso de modificadores. No tocante visibilidade, o significado basicamente o mesmo. Um mtodo declarado static, por outro lado, s pode atuar sobre a classe e no pode ser usado para atuar sobre uma instncia da classe.

JAVA

57

3. A linguagem bsica : herana


Pergunta: Porque a abordagem orientada a objetos vantajosa em relao a abordagem procedural tradicional ? Resposta: Provavelmente, a maior vantagem vem da possibilidade de se criar hierarquias de classes baseadas em relaes escolhidas pelo programador.

JAVA

58

3. A linguagem bsica : herana


Exemplo: Vamos supor que estamos projetando um sistema de simulao de movimento de trens. No topo da hierarquia, podemos supor que existe uma classe de objetos genricos, no especficos, chamada Object. Abaixo de Object, vamos criar uma classe que uma extenso desta, chamada MaterialRodante.
JAVA 59

3. A linguagem bsica : herana


Abaixo desta, vamos criar outras classes chamadas TremDePassageiros, TremDeMinerio, TremDeCargaVariada, VagoneteDeServico, etc A classe MaterialRodante possui algumas propriedades (variveis e mtodos) que Object no possui. Mas MaterialRodante -um (is-a) Object .

Da mesma forma, TremDePassageiros, TremDeMinerio, TremDeCargaVariada e VagoneteDeServico so (is-a) MaterialRodante .


JAVA 60

3. A linguagem bsica : herana


Alm da relao -um (is-a), tambm so muito comuns relaes como tem-um (has-a), faz-um (makes-a), usa-um (uses-a) e outras. Os mecanismos disponveis em Java para criar estas hierarquias de classes so: estender uma classe e implementar uma ou mais interfaces.

Estes mecanismos tambm so conhecidos como mecanismos de herana.


JAVA 61

3. A linguagem bsica : herana


Como j foi mencionado, existe uma classe que est no topo de todas as hierarquias de classes: a classe java.lang.Object . Esta classe possui vrios mtodos que so herdados por todas as classes que a estendem. A maneira de definir novas classes usando a palavra reservada extends .

JAVA

62

3. A linguagem bsica : herana


Exemplo:
class MaterialRodante extends Object{ ... } class TremDeMinerio extends MaterialRodante{ ... }
JAVA 63

3. A linguagem bsica : herana


Antes de tudo, no necessrio escrever que uma classe estende Object. Assim, seria mais normal e subentendido, escrever: class MaterialRodante{ . . . } Um outro ponto importante que uma classe s pode estender uma nica classe, isto , Java s possui herana simples (para classes).
JAVA 64

3. A linguagem bsica : herana


Quanto s variveis e mtodos da nova classe (subclasse), ela possui aqueles da superclasse que puderem ser herdados, dependendo dos modificadores public, private, protected e o default. Na declarao da nova classe, o programador pode acrescentar novas variveis e novos mtodos,

JAVA

65

3. A linguagem bsica : herana


Ele pode inclusive utilizar os mesmos nomes, o que d origem s situaes de: - sobrecarga / overloading (de mtodos) - sobreposio ou substituio / overriding (de mtodos), e - ocultao / hiding (de campos) A palavra reservada super, usada como uma referncia para as implementaes de mtodos no estticos de objetos da superclasse da classe atual.
JAVA 66

3. A linguagem bsica : herana


Uma classe que possui pelo menos um mtodo declarado abstract, tem que ser declarada abstract. Obviamente, uma classe abstract no pode ter objetos instanciados, mas usada para declarar subclasses.

JAVA

67

3. A linguagem bsica : herana


O conjunto dos campos e mtodos acessveis de fora de uma classe, junto com a descrio do comportamento esperado destes, conhecido como o contrato da classe. Quando se estende uma superclasse, considerada uma boa prtica no alterar o contrato ou s alterar a implementao do contrato da superclasse, na subclasse que se est declarando.

JAVA

68

3. A linguagem bsica : herana


Quando se tem uma classe na qual todos os mtodos so abstract temos o que se chama a expresso pura de um projeto. Quer dizer que no se fornece nenhuma implementao para o contrato da classe. Uma forma de declarar tal tipo de classe como uma interface.

Embora Java s permita herana simples para classes, para interfaces, Java permite herana mltipla.
JAVA 69

3. A linguagem bsica : herana


Como as interfaces so na verdade um tipo de classe, elas tambm podem ser estendidas. Pelo mesmo motivo, tambm possvel definir uma referncia para uma interface.

JAVA

70

3. A linguagem bsica : herana


Exemplos:
interface A { void metodo1( ); } interface B extends A { void metodo2( ); } interface EstoqueIF { int nro; }

EstoqueIF v;
herana mltipla :

class D implements B,C { . . . }

JAVA

71

3. A linguagem bsica
Na verdade, a prpria declarao da classe poderia ser feita em conjunto com a declarao da referncia e a instanciao do objeto, dispensando ento o uso de um nome para a classe (classe annima): Point p4 = new Point(){ boolean fixado = true; }

JAVA

72

3. A linguagem bsica
O objeto referenciado por p4 pertence a uma classe annima que descende da, ou estende a classe Point, acrescentando primeira a varivel fixado. O acesso a variveis e mtodos de uma classe ou objeto feito atravs a notao pontuada tradicicional: p4.x = 1.0; p4.y = 1.2; p4.z = 1.4;
JAVA 73

3. A linguagem bsica : procedural


A parte lxica de Java: A maior parte das linguagens de programao utiliza como conjunto de caracteres o ASCII e suas extenses, como o Latin-1.

Java utiliza o conjunto Unicode, um conjunto de caracteres de 16 bits que suporta lnguas e alfabetos, como o cirlico, o rabe, o chins e outras.
Em particular, o conjunto de carcteres ASCII um subconjunto do Unicode.
JAVA 74

3. A linguagem bsica : procedural


Alm dos lexemas, o compilador Java reconhece alguns caracteres e conjuntos de carcteres que tm funo de espaadores (white space) ou de comentrios. Os espaadores so: space, newline, tab, ff, Segundo alguns autores ( ! ), os comentrios so a parte mais importante de uma linguagem de programao.

JAVA

75

3. A linguagem bsica : procedural


Quem tem dvida disto, deve tentar entender um cdigo em uma linguagem que no se usa mais, escrito a 30 anos atrs, antes que o bug do milnio faa a empresa ir falncia Em Java, h trs formas de comentrios: 1) A forma que comea com // em qualquer lugar de uma linha e acaba no final da linha. Exemplo;
int nform; // contador de formularios recebidos // atualizado a cada recepcao de um formulario
JAVA 76

3. A linguagem bsica : procedural


2) A forma que comea com /* em qualquer lugar de uma linha e termina com */ em qualquer lugar da mesma ou de outra linha. Exemplo:
/* Nome do arquivo: FormAval.java Funcao: applet da IFHM do form de avaliacao Autor: JLSL */ public class FormAval { . . .

JAVA

77

3. A linguagem bsica : procedural


3) A forma chamada de comentrios doc, usada por um programa utilitrio (javadoc) para gerar uma documentao padronizada para as classes, interfaces, campos e mtodos, extrada de comentrios semelhantes segunda forma, mas que comeam com /**. Estes comentrios devem preceder as declaraes de classes, interfaces, campos e mtodos.

JAVA

78

3. A linguagem bsica : procedural


Exemplo:
/** Classe principal da aplicacao de * formularios de avaliacao */ public class FormAval { /** Metodo principal da aplicacao */ public static void main(String[] args){ . . .

Observao: Os trs tipos de comentrios no podem ser ainhados ou sobrepostos.


JAVA 79

3. A linguagem bsica : procedural


Os lexemas (tokens) de Java podem ser classificados nos seguintes conjuntos: - palavras reservadas - separadores (operadores, pontuao) - literais - identificadores

JAVA

80

3. A linguagem bsica : procedural


O analisador lxico de Java do tipo guloso, isto , havendo mais de uma posssibilidade, ele sempre vai procurar identificar o maior lexema. Exemplo: A expresso A +++++ B;

vai ser interpretada como A ++ ++ + B; que invlida,


ao invs de A ++ +

++ B; que seria vlida !

JAVA

81

3. A linguagem bsica : procedural


Identificadores Um identificador comea com uma letra, um cifro ($) ou uma sublinha (_ , underscore). Os caracteres seguintes do identificador podem ser letras, dgitos (0..9), sublinhas ou cifres. Um identificador deve estar separado de outros lexemas por espaadores (que no so lexemas) ou por separadores (que so lexemas), bom observar que, como Java usa Unicode, o conjunto das letras bem maior do que simplemente a..z e A..Z.
JAVA 82

3. A linguagem bsica : procedural


Os identificadores so definidos pelo programador e usados para dar nomes s classes, interfaces, variveis e mtodos. Exemplos: v1 , v2 , _x1 , thisCase , ifOpened ,

JAVA

83

3. A linguagem bsica : procedural


Palavras reservadas Alguns lexemas que se encaixariam na definio de identificadores so na verdade palavras reservadas para dar nome a construes da linguagem e no podem ser usados pelo programador como identificadores.

JAVA

84

3. A linguagem bsica : procedural


So elas (47):
abstract boolean break byte case catch char class const continue default do
JAVA

double else extends final finally float for goto if implements import instanceof

int interface long native new package private protected public return short static

super switch synchronized this throw throws transient try void volatile while
85

3. A linguagem bsica : procedural


Separadores

A terceira categoria de lexemas de Java constituda de caracteres e conjuntos de caracteres que no precisam obrigatoriamente estar separados dos outros lexemas por espaadores.
So sinais de pontuao e os operadores.

JAVA

86

3. A linguagem bsica : procedural


Os sinais de pontuao so: ( ) usados para delimitar argumentos de mtodos, o tipo em expresses de converso de tipo e dar uma precedncia em expresses; [ ] usados para delimitar o ndice de um array; { } usados para delimitar blocos de instrues; . usado para separar componentes dos nomes de campos, mtodos, classes, interfaces (tambm usado, mas no como separador em literais de float e double); , usado para separar os argumentos de um mtodo; ; usado para terminar uma instruo.
JAVA 87

3. A linguagem bsica : procedural


Os operadores, que representam funes usadas para construir expresses lgicas e aritmticas, so
Operador + * / % ++ -& | ^
JAVA

Funo adio subtrao multiplicao diviso mdulo(resto) incremento decremento E dos bits Ou dos bits Xordos bits

Operador && || >> >>> << <<< + ?: = ==

Funo E lgico Ou lgico Desl.p/dir. c/sinal Desl.p/dir. c/zero Desl.p/esq.. c/sinal Desl.p/esq. c/zero Concat. de cadeias Condicional ternrio Atribuio Igual

Operador < > >= <= != += -= *= /= %=

Funo Menor que Maior que Maior ou igual Menor ou igual Diferente incr. e atrib. decr. e atrib mult. e atrib. div. e atrib. mod. e atrib.
88

3. A linguagem bsica : procedural


Literais Literais so os lexemas que representam os valores que as variveis de um certo tipo pode assumir, isto , representam os elementos de uma sorte. Os literais do tipo boolean so: true e false. Os literais dos tipos byte, short, int e long so numerais que podem ser expressos em octal, decimal ou hexadecimal.
JAVA 89

3. A linguagem bsica : procedural


Caso um literal numrico comece com 0, ele est representado em octal, caso ele comece com 0x, ele est representado em hexadecimal e caso ele comece com qualquer outro dgito ele est representado em decimal. Na falta de outra informao, Java assume por default que um literal numrico do tipo int. Se um literal numrico terminar com a letra L (ou l), ele ser tratado como um long.

JAVA

90

3. A linguagem bsica : procedural


Se, por outro lado, o literal estiver dentro dos limites de short e for atribudo a uma varivel (ou argumento) short, ento ele ser tratado como short. A mesma regra se aplica ao tipo byte. Em todos os outros casos, o programador deve usar explicitamente a converso de tipo (type casting) para fazer uma atribuio de um literal int a um short ou a um byte.
JAVA 91

3. A linguagem bsica : procedural


Exemplos: int n = 0xFFFFFFFF; short m = -1; if (m == (short)(-1)) ...

JAVA

92

3. A linguagem bsica : procedural


Os literais do tipo float e double so expressos como nmeros decimais com um ponto decimal (opcional) e um expoente (tambm opcional). Deve haver pelo menos um dgito em um literal (!). Exemplos: 1 .3E-2 -1 1.0E+3D .05 1F (que no se confunde com (0x1F !)
JAVA 93

3. A linguagem bsica : procedural


Os literais do tipo char podem ser expressos por um caractere entre apstrofos: A No caso de caracteres do conjunto Unicode que no possam ser usados no editor disponvel e no caso de alguns caracteres especiais, usa-se uma sequncia de escape (comeada por \). Algumas das sequncias so: \udddd caractere Unicode, onde dddd a representao hexadecimal (sem 0x) do cdigo correspondente;
JAVA 94

3. A linguagem bsica : procedural


\ddd caractere ASCII (ddd a representao octal, sem o 0, menor ou igual a 377, ou seja, 0x00FF); \b backspace (\u0008) \t tab (\u0009) \n newline (LF ou linefeed, \u000A) \f formfeed (\u000C) \r return (CR, carriage return, \u000D) \ double quote (aspas, \u0022) \ single quote (apstrofo, \u0027) \\ backslah (o prprio, \u005C)
JAVA 95

3. A linguagem bsica : procedural


Detalhando um pouco mais os tipos bsicos,
Tipo Sorte
Valores lgicos Inteiros de 8 bits Inteiros de 16 bits Caracteres codificados em Unicode de 16 bits Inteiros de 32 bits Inteiros de 64 bits Pto. Flut. de 32 bits Pto. Flut. de 64 bits

Valor mnimo

Valor mximo

Valor inicial default


false 0 0

boolean byte short

true -128 -32.768

false +127 +32.767

char

\u0000

\uFFFF

\u0000

int long float double

-2.147.483.648 -9.223.372.036.854.775.808 NEGATIVE_INFINITY NEGATIVE_INFINITY

+2.147.483.647 +9.223.372.036.854.775.807 POSITIVE_INFINITY POSITIVE_INFINITY

0 0 0 0

JAVA

96

3. A linguagem bsica : procedural


As declaraes A forma mais simples de declarao de variveis muito semelhante da linguagem C e dada pelo seguinte esquema:

<tipo da varivel> <nome da varivel> ;


A varivel tambm pode ser iniciada, com um valor diferente do default, na sua declarao: <tipo da varivel> <nome da varivel> = <valor>;
JAVA 97

3. A linguagem bsica : procedural


Exemplos: int n; float x,y; double raio = 10.0; char letra = A;

JAVA

98

3. A linguagem bsica : procedural


Um array, tipo indexado, na verdade um tipo especial de objeto, ou quasi-objeto. A declarao de uma referncia para um array pode ser feita de duas maneiras:

<tipo da varivel> [ ] <nome da varivel> ;


ou <tipo da varivel> <nome da varivel> [ ] ; Alm disto, pode-se declarar um ou mais ndices.
JAVA 99

3. A linguagem bsica : procedural


Exemplo:

float[][] matriz;
ou float matriz [][];

(forma preferida)

Observe que o tamanho do array no declarado. Este s vai ser definido quando da instanciao do array propriamente dito: matriz = new float[20][20];
JAVA 100

3. A linguagem bsica : procedural


As instrues Uma instruo simples em Java terminada por um ; (ponto-e-vrgula). Outras linguagens, como Pascal, usam o ; para separar, e no para terminar as instrues. Por outro lado, as chaves ( { } ) formam uma instruo composta, ou bloco, e portanto no so terminadas por um ; . Podemos dizer que existem 8 instrues em Java, sujeitas a variaes.
JAVA 101

3. A linguagem bsica : procedural


As instrues so:

- atribuio - if-else - switch - for - while - label-break-continue - return - try-catch-finally


JAVA 102

3. A linguagem bsica : procedural


atribuio: Tem a forma do esquema abaixo <varivel> <operador> <expresso> ; ou <varivel> <operador> ; ou <operador> <varivel> ;

JAVA

103

3. A linguagem bsica : procedural


Exemplos: n = n+1; permetro = 2.0 * PI * raio; total += deposito; saldo -= saque; contagem++;

JAVA

104

3. A linguagem bsica : procedural


if-else: A instruo if segue o seguinte esquema:
if ( <expresso lgica> ) <instruo>

ou
if ( <expresso lgica> ) <instruo> else <instruo>

JAVA

105

3. A linguagem bsica : procedural


Exemplo: Pode-se aninhar vrias construes if, como no exemplo abaixo: if (cond1) { . . . } else if (cond2) { . . . } else if (cond3) { . . . } else { . . . }
JAVA 106

3. A linguagem bsica : procedural


switch: Segue o seguinte esquema: switch ( <seletor> ) { case <valor> : <instruo> . . . case <valor> : <instruo> default : <instruo> }
JAVA 107

3. A linguagem bsica : procedural


Exemplo:
switch ( digitoHex ) { case 1: case 2: case 3: case 5: case 6: case 7: case 9: case 0: { n = (int)(digitoHex - 0); case A: case B: case C: case E: case F: n = (int)(digitoHex - A); }
JAVA

case 4: case 8: break; } case D:

108

3. A linguagem bsica : procedural


while: Segue o seguinte esquema: while ( <expresso booleana> ) <instruo> ou do <instruo> while ( <expresso booleana> )

JAVA

109

3. A linguagem bsica : procedural


Exemplos: while ( n < 10){ n++; . . . } do { . . . n++; } while ( n < 9 );
JAVA 110

3. A linguagem bsica : procedural


for: Segue o seguinte esquema: for (<iniciao> ; <cond_iterao> ; <atualizao>) <instruo> Exemplo: for (int i=1; i<=10 ; i++) {. . .}

JAVA

111

3. A linguagem bsica : procedural


label-break-continue: Java possui um conjunto de recursos para controlar a sada de blocos de instrues ou da iterao em laos de repetio de uma maneira estruturada. Inicialmente, qualquer instruo pode receber um rtulo (label). Por exemplo:
coluna:for (int col = 1; col<=10; col++) linha:for (int lin = 1; lin<=10; lin++) a[lin,col] /= a[col,col];
JAVA 112

3. A linguagem bsica : procedural


O comando break permite saltar as instrues at o final do bloco. Se tratar-se de um lao, a sua execuo terminada e, de qualquer modo, a execuo sai do bloco.
coluna:for (int col = 1; col<=10; col++) linha:for (int lin = 1; lin<=10; lin++) if(a[col,col]==0) break linha; else a[lin,col] /= a[col,col];
JAVA 113

3. A linguagem bsica : procedural


O comando continue permite saltar as instrues at o final do lao e sua execuo continua, dependendo do prprio lao.
coluna:for (int col = 1; col<=10; col++) linha:for (int lin = 1; lin<=10; lin++) if(a[col,col]==0) continue coluna; else a[lin,col] /= a[col,col];

JAVA

114

3. A linguagem bsica : procedural


return: O comando return termina a execuo de um mtodo, retornando-a ao mtodo chamador. Eventualmente, a instruo pode retornar o valor calculado, do tipo apropriado. public boolean eh_par(int n){ if((n % 2) == 0) return true; else return false; }

JAVA

115

3. A linguagem bsica : procedural


goto: Embora Java possua a palavra reservada goto, no existe uma instruo goto !

JAVA

116

3. A linguagem bsica : procedural


try-catch-finally: O comando try-catch-finally permite dar um tratamento estruturado para condies excepcionais, detetadas pela prpria mquina ou pelo cdigo do programador. O primeiro ponto importante a existncia da classe java.lang.Throwable, que possui duas extenses: java.lang.Exception e java.lang.Error
117

JAVA

3. A linguagem bsica : procedural


Alm disto, existe ainda a classe java.lang.RuntimeException que estende java.lang.Exception Throwable Exception RuntimeException
JAVA 118

Error

3. A linguagem bsica : procedural


A ocorrncia de uma condio excepcional vai ser sinalizada pela instanciao e lanamento de um objeto de uma classe que, possivelmente, estende Throwable ou, mais frequentemente, Exception, RuntimeException ou Error. O compilador Java verifica se o cdigo declara e trata a maioria das excesses. So as excesses verificadas (checked exceptions).

JAVA

119

3. A linguagem bsica : procedural


Por outro lado, as excesses padro geradas pelo sistema de execuo (standard runtime exceptions), que estendem RuntimeException ou Error, podem acontecer em muito mais pontos do programa e, por isto, no so verificadas pelo compilador (unchecked exceptions). O lanamento de uma excesso feito pela instruo throw.

JAVA

120

3. A linguagem bsica : procedural


Exemplo: class MinhaExcessao extends Exception{. . .} . . . MinhaExcessao e; e = new MinhaExcessao(); throw e;

ou, de uma forma mais simples:


throw new MinhaExcessao();
JAVA 121

3. A linguagem bsica : procedural


Nos dois casos, um objeto, sem nome, lanado para ser capturado no escopo do prprio throw ou relanado novamente para o escopo de cdigo que chamou o mtodo do primeiro escopo. A captura feita na estrutura try-catchfinally, enquanto o relanamento declarado pela clusula throws.

JAVA

122

3. A linguagem bsica : procedural


Exemplo:

try{ . . . throw new MinhaExcessao(); . . . }catch(MinhaExcessao me){ . . . }

JAVA

123

3. A linguagem bsica : procedural


Se a excesso for efetivamente lanada, a execuo desviada da instruo throw para o bloco da clusula catch. A instncia da excesso passada para este bloco como se fosse um argumento de um mtodo, recebendo o nome formal (neste exemplo, me). Aps a execuo do bloco catch, o programa continua com a prxima instruo (no retorna para o bloco try ! ).
JAVA 124

3. A linguagem bsica : procedural


Opcionalmente, pode haver a clusula finally: try{ throw new MinhaExcessao; }catch(MinhaExcessao me){ . . . }finally{ . . . } A clusula finally, se existir, sempre executada, quer haja a excesso ou no.
JAVA 125

3. A linguagem bsica : procedural


Por outro lado, se o programador no colocar um bloco try-catch-finally, ele deve declarar a excesso no mtodo em cujo contexto a excesso pode ser lanada: void metodoA()throws MinhaExcessao{ . . . throw new MinhaExcessao(); . . . }
JAVA 126

3. A linguagem bsica : procedural


Para todos os trechos em que podem ser lanadas as checked exceptions, o compilador Java verifica se o cdigo possui um bloco trycatch ou, caso no haja este bloco, ele verifica se o mtodo declara a excesso com a clusula throws. Neste caso, a excesso vai ser relanada, ou propagada, para o cdigo chamador. No caso das unchecked exceptions, o compilador no obriga o tratamento, mas o programador tem a opo de faze-lo.
JAVA 127

3. A linguagem bsica : procedural


Exemplo:
//============================================= public class TstEx{ //--------------------------------------------public static void main(String[] argumento) throws MinhaExcessao{ throw new MinhaExcessao(); } //--------------------------------------------} (continua)
JAVA 128

3. A linguagem bsica : procedural


(continuao)

//============================================= class MinhaExcessao extends Exception{ //--------------------------------------------public MinhaExcessao(){ super(); } //--------------------------------------------} //=============================================

JAVA

129