Você está na página 1de 105

A linguagem JAVA

Programao na Web Lus Manuel Borges Gouveia

Motivao
incio de 1997
mais de 50 milhes de utilizador da Internet aumento de utilizadores a uma taxa de 100% ano estimam-se mais de 200 milhes de utilizadores em 2002 em 2010 estima-se existirem mais ligaes para uso da Internet do que linhas telefnicas!

Motivao
na Internet?
mais precisamente na World Wide Web introduzida no incio dos anos 90 uma das histrias de sucesso das TIs proporciona um meio de partilha de informao a baixo custo

Motivao
qual a vantagem?
ao alcance de uma chamada telefnica local possvel ler texto e grficos de qualquer parte do mundo informao organizada em pginas, com um nome nico, acessveis globalmente necessrio um navegador, mas fcil de utilizar (hipertexto)

Motivao
desvantagens?
um pouco lento infraestrutura sobrecarregada reduzida interactividade
pginas escritas em HTML que permite leitura de conteudos multimdia, saltos para outras pginas, carregamento de grficos o JAVA estende estas capacidades possibilitando a criao de pginas interactivas...

Motivao
porqu usar JAVA?
pela interactividade globalmente aceite como a linguagem de programao para a Web tornou-se uma norma para a indstria de software possui poucos concorrentes para o desenvolvimento de aplicaes na Web

O que o JAVA
uma linguagem de programao
orientada a objectos proveniente da Sun Microsystems permite o desenvolvimento de dois tipos de programas
APPLETS, que se destinam a ser executados em conjunto com um navegador da web Aplicaes, que constituem os tradicionais programas (e sem recurso a um navegador para serem executados)

O que o JAVA
so os APPLETS que nos interessam
so multiplataforma permitem o desenvolvimento de pginas interactivas para a web
jogos formulrios visualizadores demos o que a imaginao poder e o trabalho concretizar!

Desenvolvimento de software
enquanto o hardware comporta-se sempre de uma forma previsvel (quando no h avaria!), o software j no mesmo para a aplicao perfeita seria virtualmente impossivel de provar esse facto inumeras metodologias de projecto de programao foram desenvolvidas programao orientada a objectos (OOP) uma delas!

POO
POO uma das melhores formas de desenvolver software com o mnimo de erros
o JAVA uma OOP deve-se tirar partido desse facto! Necessrio saber o que so:
objectos diferena entre objectos e classes atributos herana e sua importncia

O que so objectos
mundo exterior como um conjunto de objectos
o carro , a casa, os animais, as plantas; num programa: os botes, as imagens, as caixas de textos,

a maioria dos objectos feito de outros objectos


os automoveis so concebidos como agrupamentos de objectos cuja concepo est entregue a vrias equipas no existe necessidade de possuir o conhecimento de como determinado objecto est estruturado ou funciona para se poder combinar com outros

O que so objectos
na POO, com objectos que se comportam de forma bem determinada, possvel realizar a sua combinao sem ser necessrio saber o que acontece no seu interior
para um objecto que ordene nmeros, s necessrio fornecer os nmeros a esse objecto e esperar at que este retorne os nmeros ordenados; no preciso saber como estes so ser ordenados

o ponto fulcral da POO ver uma aplicao como um conjunto de objectos que interagem entre si
permite a concentrao no projecto interno de um objecto sem a preocupao do efeito que este ter noutros objectos (o interface entre objectos tem de ser claramente definido)

Classes
em POO, classes e objectos so coisas diferentes! no mundo real existem muitos objectos que so do mesmo tipo
a partilha de caractersticas um modo til de agrupar objectos todos os livros no mundo so membros da mesma classe livro, que possui caractersticas ou atributos: os livros tem pginas, uma capa e contm palavras ou imagens a Biblia um objecto livro, que um membro da classe livro. em termos POO, diz-se que a Biblia uma instncia da classe livro

Classes
uma linguagem OO permite criar classes e objectos que pertencem a essas classes (outro exemplo):
a classe construo, existem muitas construes, mas s estamos numa, num dado momento construo a classe, isto , o formulrio para todas as construes, mas a construo onde nos encontramos uma instncia dessa classe; cada instncia um objecto a classe no se refere a uma dada construo em particular; apenas o formulrio que descreve todas as construes. Uma instncia da classe contruo uma construo particular, um objecto; uma instncia de uma classe um objecto uma moradia, um prdio e uma igreja so diferentes, mas todos os objectos partilham um conjunto comum de atributos; portas, paredes e uso

Atributos e comportamento
todas as instncias de uma classe (os objectos dessa classe) partilham os mesmos atributos.
alguns dos atributos para a classe construo podem ser: o n de pisos, o n de janelas, a rea coberta, o uso da construo

os valores dos atributos so diferentes para diferentes construes e so designados por variveis de instnciao
as variveis podem permanecer constantes para a vida do objecto (o nmero de pisos da construo) ou podem mudar (o uso da construo)

Atributos e comportamento
as classes definem conjuntos de operaes que so feitas em cada um dos objectos para mudar o valor das variveis ou proporcionar informao sobre estas
operao para modificar o uso da construo de trabalho para lazer; igualmente devem existir operaes que reportem o seu estado

as classes fornecem uma referncia que define tanto as variveis como as operaes que podem ser realizadas; estas operaes so designadas por mtodos
aps um a classe ser definida, os objectos pertencentes a essa classe (instncias) podem ser criados JAVA oferece vrias classes para uso, constituindo a base de trabalho, mais elaborada, para esforos de programao

Herana
til dividir uma classe em subclasses, para assim partilharem algumas caractersticas
a classe construo pode ser dividida em subclasses: habitao, escritrio, loja. Construo a superclasse das subclasses habitao, escritrio, loja

uma subclasse herda os atributos da superclasse e todos os mtodos que operam essa superclasse
as subclasses habitao, escritrio, loja partilham o atributo que define o uso da construo e os respectivos mtodos para visualizar e alterar esse atributo

Herana
as subclasses podem possuir atributos adicionais aos da superclasse a que pertencem
a subclasse habitao pode possuir um atributo que especifica o nmero mximo de pessoas que l podem viver e alguns mtodos associados

as subclasses tambm podem alterar, para si prprias, mtodos herdados das superclasses
a subclasse loja pode modificar o mtodo que altera o nmero de pisos de forma a que o total de pisos especificado seja inferior a um dado valor.

possvel ter muitos nveis de herana numa estrutura em rvore de heranas ou hierarquia de classes

Herana, porqu utilizar


reutilizar cdigo j existente ou usar bibliotecas de classes, o que permite aumentar a produtividade e desenvolver cdigo com menos erros (uso de classes j testadas) vantagem POO: a reutilizao de cdigo; subclasses herdam os atributos e mtodos da superclasse e basta apenas acrescentar mtodos e variveis para conseguir o comportamento especializado para a aplicao

Herana, porqu utilizar


o JAVA faz uso intensivo de classes abstractas
superclasses que proporcionam comportamentos genricos; todas as classes em JAVA so subclasses de uma superclasse uma classe abstracta deixa muita da definio de classe no implementada de modo a que as subclasses possam definir comportamentos prprios

O toolkit de JAVA proporciona vrios grupos de classes JAVA (packages)


os pacotes so grupos de classes que realizam operaes semelhantes. O AWT (Abstract Windowing Toolkit) package que oferece um grupo de classes que podem ser usadas para visualizar e controlar janelas, botes, caixas de listagem, menus, entre outros.

A linguagem JAVA
orientada a objectos
semelhante, em sintaxe, ao C++ desenvolvimento de aplicaes stand alone desenvolvimento de aplicaes para a Internet e multiplataforma as aplicaes para a Internet (Applets) so corridos pelos navegadores Web

A linguagem JAVA
limitaes
os applets JAVA so carregados de um host e corridos localmente acesso a ficheiros locais restringido em funo da organizao do sistema de ficheiros acessos no autorizados de aplicaes externas podem contaminar o disco local (vrus, )

Applets e aplicaes
os applets diferem das aplicaes por poderem ser executados pginas HTML, quando visualizados em navegadores web que suportam JAVA
possibilita aos programadores maior flexibilidade no contedo das pginas web. Os applets podem correr em qualquer computador

as aplicaes s correm no computador especfico (ou famlia de computadores) para que foram compilados; no correm com o navegador
o JAVA semelhante para desenvolver aplicaes ou applets, mas existem diferenas criadas pelo ambiente no qual correm applets e aplicaes

Limitaes dos applets


podem no ser capazes de ler ou escrever ficheiros no computador local
alm das questes de segurana, tambm existem questes de compatibilidade entre diferentes sistemas de ficheiros

no podem carregar ou correr programas locais ou efectuar referncias a DLLs no podem comunicacar com o servidor

Benefcios dos applets


um bom interface de utilizador acesso manipulao de acontecimentos acesso a um ambiente em rede capacidades grficas melhoradas

Diferenas dos applets


A estrutura das aplicaes tradicionais:
Fich1.pas Fich2.pas Fich3.c compilao Fich1.obj Fich2.obj Fich3.obj Biblioteca .lib linkagem

Ficheiro Ficheiro executvel executvel .exe .exe

Diferenas dos applets


A estrutura dos applets

Fich1.java Fich2.java compilao

Fich1.class Fich2.class fich1.html

executvel executvel em qualquer em qualquer computador computador

Um applet simples
estrutura de um applet
existem 5 mtodos principais no JAVA (se no for incluida uma verso prpria destes mtodos, ser usada a por defeito) os mtodos so:
init start stop destroy paint
...no existe um mtodo main!

Inicializar um applet
o primeiro mtodo a ser executado quando se corre um applet
usado para inicializar valores, carregar imagens para posterior uso,... o JAVA possui um mtodo init que pode ser substitudo por um a desenvolver
public void init( ) { }

Iniciar um applet
o mtodo a ser executado a seguir ao init
pode ser chamado as vezes que se pretender, durante a vida do programa quando se troca de pgina o applet pra de correr e quando se retorna pgina, o mtodo start novamente executado public void start( ) { }

Parar um applet
o mtodo stop o complemento do mtodo start
pra de correr um applet sempre que se sair da pgina, o applet continua a correr, no entanto pode-se parar a sua execuo at se retornar pgina public void stop( ) { }

Destruir um applet
destruir o applet significa parar todos threads criados e libertar os recursos de computador que lhe foram alocados
normalmente, estas operaes so realizadas pelo mtodo por defeito e no existe necessidade de o modificar public void destroy( ) { }

Visualizar texto e grficos


Usado quando se visualiza texto ou grficos
tambm chamado quando se redesenha o ecran, como no caso de ser necessrio redesenhar a janela do navegador por ter sido sobreposta outra janela de uma qualquer aplicao mtodo muitas vezes chamado durante a vida do programa de um applet tpico (deve possuir bom desempenho) public void paint(Graphics g ) { }

O mtodo paint
possui um argumento; uma instncia da class Graphics
o objecto criado automaticamente necessrio assegurar que a classe Graphics importada para o applet, colocando no inicio do applet
import java.awt.Graphics

caso se queiram incluir subclasses (Color, por exemplo), utiliza-se


import java.awt.Graphics.*

HTML
As pginas web so escritas em HTML. Os items da linguagens, designados por tags, encontram-se entre < e >:
<html> <head> <title> A primeira pagina </title> </head> <body> <h1> Bem vindo ao mundo da Web </h1> </body> </html>

Tags HTML
Cada um dos tags interpretado pelo navegador:
<HTML>, indica o inco de um documento HTML </HTML>, indica o fim de um documento HTML <! >, contm um comentrio no visualizado pelo navegador <HEAD> e </HEAD> so o inco e fim da parte de metainformao do documento e contm informao sobre este, como o caso do seu ttulo <TITLE> </TITLE>, visualiza o texto entre estes dois tags no topo da janela do navegador <BODY> e </BODY> indica o incio e o fim do documento a ser visualizado pelo navegador

O tag Applet
os applets so incluidos nas pginas web recorrendo ao tag <APPLET>
quando o navegador carrega uma pgina que possui o tag <APPLET>, o applet tambm carregado e executado o tag <APPLET> possui diversas opes que controlam o seu tamanho e posio na pgina web, o alinhamento com o resto do texto e grficos e os parmetros a serem fornecidos ao applet

O tag Applet
o tag <APPLET>
tem de estar entre o <BODY> e </BODY>
<BODY> >APPLET CODE = olamundo.class WITH = 150 HEIGHT = 25> </APPLET> </BODY>

o cdigo fonte para o applet o ficheiro olamundo.java; quando compilado cria o ficheiro de classe olamundo.class os tags WITH e HEIGHT definem a rea utilizada pelo applet, quando executado

O tag Applet
Se se definir mais de uma classe no cdigo fonte, produzido um ficheiro com a extenso .class para cada classe definida
compilao Fich1.java define: classe fich1 classe fich2 classe fich3 fich1.class

fich2.class fich3.class

O tag Applet
o nome do ficheiro HTML deve ser o mesmo do ficheiro classe que inicia o applet
olamundo.java, ficheiro cdigo fonte olamundo.class, ficheiro classe produzido pela compilao do ficheiro olamundo.java olamundo.html, ficheiro html, com o tag <APPLET>

Criao de um applet
applet para colocar texto no navegador
import java.awt.*; public class olamundo extends java.applet.Applet { public void paint(Graphics g){ Font escolha= new Font("TimesRoman", Font.ITALIC, 32); g.setFont(escolha); g.drawString("Ol mundo!",5,30); } }

Processo de produo do applet


O cdigo fonte, olamundo.java, compilado da seguinte forma: javac olamundo.java javac: ferramenta do jdk - java development kit, java compiler produzido o cdigo objecto: olamundo.class
este ficheiro que referido na pgina HTML, no tag <APPLET> e que executado

o ficheiro olamundo.html criado com o tag descrito e pode ser visualizado num navegador, juntamente com o resultado da execuo do applet

O ficheiro olamundo.html
<html> <head> <title> A primeira pagina </title> </head> <body> <applet code ="olamundo.class" width=180 height=70> </applet> </body> </html>

Controlar a posio do applet na pgina web


<applet code ="olamundo.class" width=180 height=70> alm das opes width (largura) e height (altura) tambm se pode controlar o align (alinhamento do applet: left, esquerda e right, direita)
o atributo align, do HTML, possui ainda mais 7 valores:
middle, centra o applet com o meio da linha de texto absmiddle, o applet alinhado com o meio do maior elemento da linha top, alinhado o topo do applet com o topo da linha texttop, alinhado o topo do applet com o topo do maior elemento da linha bottom, o fundo do applet com o fundo do texto absbottom, o fundo do applet com o menor elemento da linha baseline, o mesmo que o bottom

Compilar aplicaes
uma aplicao desenvolvida em JAVA compilada da mesma forma que um applet
javac aplicacao.java

para correr a aplicao utilizado o interpretador JAVA


java aplicacao

Argumentos para a linha de comando de uma aplicao


Algumas aplicaes necessitam de que lhes seja passada informao, quando so invocadas
argumentos da linha de comando numa aplicao que ordene um conjunto de nmero, a aplicao mais til se se lhe der um ficheiro de entrada e o nome de um ficheiro para o resultado, como argumentos

em JAVA existe apenas um parmetro passado para a aplicao


args: um vector de strings contendo os argumentos o nmero de argumentos pode ser verificado usando o mtodo length( ) do vector

Argumentos para a linha de comando de um applet


nas aplicaes o mtodo main usado para a passagem de argumentos (nos applets no pode) os parmetros so passados nos applets via html , com o atributo param
<APPLET CODE=palavras.class> <PARAM NAME=texto VALUE=funciona?!> </APPLET>

Argumentos para a linha de comando de um applet


tambm necessrio modificar o mtodo init para receber o parmetro com o mtodo getParameter
import java.awt.Graphics; public class palavras extends java.applet.Applet { String txtj; public void init ( ) { String txtj = getParameter("texto"); } public void paint(Graphics g){ g.drawString("Texto: " + txtj, 5, 30); } }

Argumentos para a linha de comando de um applet


possvel ter mais de um argumento de passagem entre html e o applet os parmetros passados pelo html so strings
<APPLET CODE=palavras2.class> <PARAM NAME=texto VALUE=funciona?!> <PARAM NAME=numero VALUE=3> </APPLET>

Argumentos para a linha de comando de um applet


/* programa que recebe como parmetros um texto e o nmero de vezes que o vai repetir, em linhas sucessivas*/ import java.awt.Graphics; public class palavras2 extends java.applet.Applet { String txtj; int num; public void init ( ) { String txtj = getParameter("texto"); String n=getParameter("numero"); num=Integer.parserInt(n); } public void paint(Graphics g){ for (c=0; c<num; c++) { g.drawString("Texto: " + txtj, 5, 20 + c*20); } } }

JAVA
O JAVA sensvel utilizao de maisculas conveno em JAVA
os nomes das classes possuem letras maisculas mtodos e objectos em minsculas

ignorado pelo compilador


espaos tabs comentrios entre /* e */ comentrios de linha //

as linhas de programao em JAVA terminam com ;

Nomes em JAVA
necessrio dar nomes a variveis, classes e mtodos
um nome tem de comear por uma letra ou por _ ou $ os restantes caracteres podem ser qualquer caracter que seja visvel a excepo aos nomes so as palavras reservadas do JAVA

Elementos chave em JAVA


As aplicaes e os applets contm os seguintes elementos:
definies de classes objectos (instncias de uma classe definida) variveis de dados mtodos, que definem as operaes a realizar com os dados

Classes
Em JAVA tudo classes ou descreve o que uma classe faz
no possui funes e procedimentos, mas sim blocos de classes

as classes iniciam-se com a palavra reservada class, seguida pelo nome da classe e o seu contedo entre chavetas
class NovaClasse { }

Subclasses
no caso de uma subclasse da classe NovaClasse, necessrio utilizar a directiva extends
class OutraClasse extends NovaClasse { }

o conjunto de operaes que podem operar uma classe designam-se por mtodos
os mtodos so definidos dentro da classe

Criao de objectos
uma classe pode ser comparada a um formulrio que descreve as caratersticas de um conjunto de objectos aps a criao de uma classe possvel definir objectos que so instncias dessa classe; para criar um novo objecto:
o nome da classe de que se quer criar uma instncia o nome do objecto que se pretende criar a palavra chave new o nome da classe, seguida de parentesis, com os valores iniciais dentro deles

Criao de objectos, exemplos


criar um novo objecto minhaCasa da classe Construcao
Construcao minhaCasa = new Construcao( );

criar um novo objecto valor


Aleatorio valor = new Aleatorio( ); ou Aleatorio valor;

new Aleatorio( ); a palavra chave new cria a instncia, alocando a memria necessria para o objecto, inicializando as variveis e chamando o mtodo constructor para o objecto
valor =

Variveis em JAVA
antes de se poder utilizar uma varivel necessrio definir o seu tipo
tambm se pode atribuir um valor no momento da definio

as variveis locais so definidas dentro dos mtodos o JAVA no possui variveis globais disponveis para todos os mtodos
pode-se definir variveis de instncia e variveis objecto (permite a partilha dentro das classes)

Tipos de dados em JAVA


criar trs variveis de tipo inteiro
int primeiro, segundo, terceiro;

criar duas variveis de tipo inteiro, uma delas inicializada


int velho, novo=50;

criar uma varivel de tipo booleano (alocados em 8 bits)


boolean simNao;

o tipo caracter toma representado em 16 bits contra os tradicionais 8 bits


recurso representao de caracteres por um nmero de caracter Unicode

Tipos de dados
tipo
byte short int long float double char logical

descrio
inteiro inteiro inteiro inteiro vrgula flutuante vrgula flutuante caracter booleano

nmero de bits
8 16 32 64 32 64 16 8

o tipo String no est includo na lista de tipo de dados primitivos do JAVA


instncia da classe String (logo, um objecto) pode ser usado como um tipo de dados normal

Vectores
os vectores so listas de itens
cada item do mesmo tipo (um dos tipos primitivos) em JAVA, os vectores so objectos (diferente das linguagens de terceira gerao)

declarar um vector
int valores[ ]; String cadeiaCaracteres[ ];

notao alternativa:
int [ ] valores; String [ ] cadeiaCaracteres;

Vectores
criar um objecto vector; duas formas:
usando new
int [ ] valores = new int[5];

cria uma lista de 5 inteiros; o 1 referido por valores[0] e o ltimo por valores[4]

os vectores so inicializados, 0 para nmeros, falso para booleanos, nulo para strings e \0 para caracteres
alternativamente pode-se especificar os seus valores iniciais
int [ ] valores = {12, 9, 15, 18, 7} String [ ] lingProg = {Java, C++, Pascal};

Vectores
atribuio de valores
lingProg[2]=Delphi;

o JAVA verifica se o indice fornecido est dentro da gama de indices defina, pelo que caso tal no acontea, ocorre um erro de excepo

podem-se criar vectores multidimencionais


em rigor, tratam-se de vectores de vectores
int tabela[ ][ ] = new int[10][10];

o atribuio de valores realizada de modo semelhante ao dos vectores


tabela[ 3 ][ 4 ] = 26;

Mtodos
descrevem um conjunto de operaes que podem ser realizadas com os dados, dentro de uma classe para definir um mtodo, especifica-se:
modificadores o tipo de objecto retornado pelo mtodo o nome do mtodo os parmetros passados ao mtodo o corpo principal do mtodo

Mtodo, exemplo
Exemplo de um pequeno programa com uma classe e um mtodo:
class Programa { public static void main (String args[]) { System.out.println(Sada de dados do programa); // coloca a mensagem no ecran

o mtodo System.out.println coloca uma string no ecran todas as aplicaes JAVA (no os applets) tem que ter um mtodo main

Mtodos
os modificadores podem ser ou pblicos ou privados
um mtodo pblico (public) pode ser chamado de qualquer lugar, na aplicao um mtodo privado (private) pode ser usado pela classe que o definiu um mtodo protegido (protected) pode ser usado em qualquer lugar, de onde foi definido

se no se especificar se oo mtodo publico ou privado, colocado o valor por defeito de protected

Mtodos
os mtodos podem ser ou no estticos (static):
os mtodos estticos possuem uma instncia por classe e por isso todos os objectos que pertencem a essa classe partilham a mesma cpia do mtodo os mtodos no estticos possuem uma instncia por objecto. Para especificar no esttico, omite-se a palavra chave static

o valor por defeito no esttico

Mtodos de chamada
class ConvGraus { public static void main (String args []) { float centi, fahr = 67.5; centi = fahrParaCenti(fahr); System.out.println(fahr + "f = " + centi + " c"); } } class temperatura { public static float fahrParaCenti(float valor) { return (valor - 32)*5/9; } }

2 classes e 1 mtodo, que converte escalas de temperatura o valor retornado do tipo vrgula flutoante (o tipo por defeito o inteiro). Para o retorno do valor utilizado o return (se o return void, ento nenhum valor retornado)

Criar uma classe


para criar uma classe e instnciar esta...
primeiro, definir uma classe
class Construcao { }

a seguir, definir as variveis da classe:


class Construcao { int pisos; //nmero de pisos da construo float area; //rea coberta de construo String uso; //trabalho, armazm, lazer, residncia }

Criar uma classe


terceiro; criar os mtodos para a classe, por exemplo os dois mtodos seguintes visualizam e modificam o uso da classe construo
void visualizaUso () { System.out.println(A construo usada para + funcao); } void modificaUso() { uso=novoUso); }

Utilizar uma classe


a declarao das variveis e mtodos definem a classe para criar uma instncia de uma classe necessrio, no mtodo main (b instncia da classe Contrucao)
Contrucao b = new Contrucao( );

para criar uma aplicao executvel adiciona-se um mtodo main depois da definio da classe
public static void main(String args[ ] ) { construcao b = new Construcao( ); b.pisos=9; b.area=6500; b.uso=residncia; b.visualizaUso( ); b.modificaUso(trabalho); b.visualizaUso( ); }

Variveis de instncia
As classes possuem variveis associadas que fazem parte da sua definio
declaradas da mesma forma que as variveis locais, mas definidas fora do mtodo designadas por variveis de instncia, so globais para cada instncia da classe
class Armazem extends Construcao { int areaPiso; int numeroPortas; String uso; }

Variveis de classe
definidas da mesma forma que as variveis de instncia, mas com a palavra chave static
static peDireito
acessvel globalmente na classe, em substituio de uma varivel diferente por cada instncia

as variveis de uma classe so colocadas aps a definio da classe, junto definio das variveis de instncia

Constantes
varivel cujo valor fixo no incio do programa e que no pode ser mudado
final altura = 2.40; final String erroFich = Ficheiro no encontrado;

em JAVA, as variveis locais no podem ser constantes, apenas as variveis de instncia e de classe para delcarar uma constante utilizada a palavra chave final e o valor pretendido

Uso de variveis de instncia


as variveis de classe so globais classe as variveis de instncia so locais instncia
public static main (String args []) { Armazem deposito = new Armazem( ); deposito.uso = Guardar monos; deposito.areaPiso = 2000 deposito.numeroPortas = 4 } class Armazem extends Construcao { int areaPiso; int numeroPortas; String uso; }

Uso de variveis de classe


Class Fiat { static String marca = Fiat; int ccMotor; } ... Fiat carroUtilitario, carroDesportivo carroUtiliario.ccMotor = 1300 carroDesportivo.ccMotor = 2000 System.out.println(a marca do automovel + carroUtilitario.marca);

carroUtilitario e carroDesportivo so duas instncias da classe Fiat e podem possuir diferentes valores nas variveis de instncia ccMotor tem que ter o mesmo valor para a varivel marca porque se trata de uma varivel de classe (existe um valor por classe em vez de um valor por instncia)

A palavra chave this


possibilita a referncia ao objecto corrente dentro de um mtodo, usando a notao do ponto
se o objecto corrente possui uma varivel de instncia designada por valor possvel referir esta por this.valor se se pretender passar o objecto corrente como um parmetro, this proporciona um meio fcil de o fazer
Inicializar(this)

a palavra chave s pode ser usada dentro de um mtodo de instncia e no num mtodo de classe, uma vez que this se refere instncia corrente de uma classe

A aritmtica e o JAVA
o JAVA possui cinco operadores aritmticos:
+ (adio); - (substraco); / (diviso); * (multiplicao) e % (mdulo)

o mesmo operador usado para a diviso de inteiros e reais


o resultado da diviso inteira no arredondado 14/5 = 2 e no 3

o operador mdulo, %, calcula o resto de uma diviso inteira


o resultado de 14%5 4

Atribuio de variveis numricas


a atribuio realizada com o operador = com variveis de tipos diferentes, existe uma converso de tipo antes de serem operadas essas variveis
int e float; as variveis inteiras so convertidas para float float e double; as variveis do tipo float so convertidas para double

as variveis mais fracas (de menor gama de valores) so convertidas para as variveis mais fortes, presentes como variveis a operar

Atribuio de variveis numricas


double litro, galao; float milha, kilometro; litro=galao*0.22; kilometro = (milha*5)/8;

0.22 automaticamente uma quantidade de tipo double as constantes 5 e 8, inicialmente inteiros, so convertidas para float por causa da varivel milha: kilometro = (milha * 5.0) / 8.0

aps os clculos, o resultado convertido para o tipo da varivel do lado esquerdo da atribuio

Atribuio de variveis numricas


int centigrados, pontoCongelacao; double fahrneit; pontoCongelacao = 32; centigrados = (fahrneit - pontoCongelacao) *5.0/9.0;

o tipo de dados mais forte o double, atribudo varivel fahrneit o clculo realizado com todos os valores convertidos para double o resultado ento convertido para o tipo int, da varivel centigrados

Casting de variveis
quando se pretende alterar a converso automtica entre diferentes tipos que o JAVA possui por defeito utiliza-se o casting de variveis
especifica-se o tipo de varivel para o qual se pretende a converso
int c, d; float valor;

valor = (float) c / (float) d;

converte as variveis int em variveis do tipo float

pode-se efectuar o cast de um objecto para outro que seja sua superclasse ou subclasse no possvel realizar o cast de um objecto para um dos tipos de dados primitivos

Atribuio de variveis no numricas


para atribuir um caracter
letra = L; caracterNovaLinha = \n;

existem vrios caracteres de controlo especiais que o JAVA permite especificar \n nova linha \\ caracter \ \t tecla tab \ caracter \b \ caracter backspace \r tecla return \ddd nmero octal \f \xdd nmero hexadecimal formfeed \udddd caracter unicode

Atribuio de variveis no numricas


para o tipo booleano, podem-se atribuir os valores true e false:
boolean campeaoFCP = true;

para o objecto String, a atribuio realizada com o valor entre aspas:


texto = Esta uma pequena frase;

no objecto String tambm se possvel utilizar os cdigos dos caracteres especiais:


texto = 1. Primeira parte \n\t1.1. Introduo\n;

Operadores de atribuio
alm do operador =, o JAVA possui outros
contador1, contador2, contador3 = 0: atribudo o valor zero a todas as variveis

existe uma forma abreviada de escrever as seguintes expresses


contador1 = contador1 + 7; novoValor = novoValor / intervalo;

a seguinte:
contador1 += 7; novoValor /= intervalo;

Operadores de atribuio
operao c += d c -= d c /= d c *=d c++ c-significado c=c+d c=c-d c=c/d c=c*d c=c+1 c=c-1

Operadores de atribuio
no caso de se incrementar (ou decrementar, neste caso, substituir o sinal + pelo sinal -) um valor possvel representar a operao de uma das seguintes quatro formas:
contador1 = contador1 + 1; contador1 += 1; contador1 ++; ++ contador1;

Atribuio de objectos
O operador = usado para atribuir as variveis de um objecto a outro
public void class Emprego { String ocupacao; int vencimento; empPaula.ocupacao = emp.Sara.ocupacao; emp.vencimento = emp.Sara.ocupacao; }

Atribuio de objectos
no possvel ter
empPaula = empSara

para copiar todas as variveis de instncia de um objecto utilizado o mtodo copy:


empPaula = copy(emp.Sara)

Operadores de comparao
operao == != < > <= >= significado equivalente diferente menor que maior que menor ou igual a maior ou igual a

Operadores de comparao
diferena entre o operador de atribuio e o operador de equivalncia:
if (c = = d) e = f;

compara c e d se c e d forem iguais, atribui o valor de f a e

no entanto a expresso seguinte, no tem sentido:


if (c = d) e = = f

- o valor de d atribuido a c e nunca ser atribuido o valor f a e porque e==f um teste de igualdade

Comparao de objectos
podem-se usar os operadores = = e ! =
cuidado; estes operadores no testam se os valores atribuidos aos dois operandos so iguais! com diferentes objectos String que possuem o mesmo texto o valor retornado no true, quando se testa a igualdade, a no ser que ambos refiram o mesmo objecto

Sobreposio de mtodos
o que ?
na definio de um mtodo necessrio declarar explicitamente a lista de parmetros que lhe so passados no JAVA, quando um mtodo chamado com uma lista de prametros incompleta ou incorrecta, obtido um erro com parmetros opcionais, define-se um mtodo com o mesmo nome mas com uma lista diferente de parmetros quando chamado um mtodo, o JAVA examina os parmetros fornecidos e chama o mtodo apropriado

Sobreposio de mtodos
Class MostraErro { MostraErro relataErro(String menasagem) { System.out.println(mensagem); } MostraErro relataErro( ) { System.out.println(Erro desconhecido.); } }

pode-se chamar o mtodo relataErro com um parmetro ou sem prmetro

Construtores
mtodos especiais que controlam como um objecto inicalizado no podem ser chamados directamente, mas so lanados pelo JAVA sempre que um objecto criado (sempre a directiva new utilizada) podem ser usados por feitos ou definidos pelo utilizador um mtodo construtor para a classe possui o mesmo nome desta mas no tem tipo de retorno

Construtores, exemplo
com os construtores por defeito
class Pais { String nome; String capital; int populacao; public static void main(String args[ ] ) { Pais portugal; portugal = new Pais( ); portugal.nome = Portugal; portugal.capital = Lisboa; portugal.populacao = 8800000 System.out.println(A capital de + portugal.nome); System.out.println( + portugal.capital); System.out.println(A populao + portugal.populacao); } }

Construtores, exemplo
com o construtor Pais
class Pais { String nome; String capital; int populacao; Pais(String oNome, String aCapital, int aPopulacao) { nome = oNome; capital = aCapital; populacao = aPopulacao; } public static void main(String args[ ] ) { Pais portugal; portugal = new Pais( Portugal, Lisboa, 8800000); System.out.println(A capital de + portugal.nome); System.out.println( + portugal.capital); System.out.println(A populao + portugal.populacao); } }

O mtodo finalize
chamado quando um objecto destruido ou quando um programa termina abruptamente s criado pelo utilizador quando este pretende optimizar a gesto de memria, assegurando que todos os recursos de memria atribuidos ao objecto foram libertados para criar um mtodo finalize prprio
void finalize( ) { }

Tratamento de condies
tomar decises ifelse
if (memoria < 16) System.out.println(Est tudo um bocado lento?);

- com a clausula else


if (memoria < 16) System.out.println(comprar mais memria); else System.out.println(memria suficiente);

Tratamento de condies
vrios ifelse encadeados
if (memoria < 8) System.out.println(necessrio comprar mais memria); else if (memoria <=16) System.out.println(memria suficiente); else System.out.println(memria adequada para trabalho);

- vrias condies a testar


if ((dia = = domingo) && (canal = = 1)) System.out.println(podemos ter futebol na televiso...);

Blocos de cdigo
permite o agrupamento de linhas de programao em blocos:
if (dia = = sabado) fazerCompras( ); if (dia = = sexta) { calcularVencimentos( ); deduzirImpostos( ); imprimirCheques( ); }

O operador condicional
o seguinte cdigo
if (memoria <= 16) mensagem = memria pequena); else mensagem = memria adequada; System.out.println(mensagem)

equivalente a
String mensagem = memoria <=16 ? memria pequena : memria adequada System.out.println(mensagem)

sintaxe geral:
test ? Resultado verdadeiro : resultado falso

A estrutura switch
forma de especificar mltiplas opes:
if (memoria = = 8) System.out.println(necessrio mais memria); else if (memoria = = 16 ) System.out.println(possui a memria suficiente); else if (memoria = = 32) System.out.println(possui a memria aconselhvel); else if (memoria = = 64) System.out.println(tem memria para trabalhar bem);

com switch, possvel reescrever o cdigo...

A estrutura switch
Switch (memoria) { case 8: System.out.println(necessrio mais memria); break; case 16: System.out.println(possui a memria suficiente); break; case 32; System.out.println(possui a memria aconselhvel); break; case 64: System.out.println(tem memria para trabalhar bem); }

A estrutura switch
a clausula break assegura que na estrutura switch cada bloco asociado a um case realizado, sem os seguintes serem executados a clausula default pode ser usada no final de todas as opes case; neste caso, se nenhuma outra linha de cdigo for executada, o bloco default executado existem algumas limitaes para o
s se usar para condies de igualdade s se podem usar os tipos byte, char, int e short para os testes